MySQL等级测评方法及知识点
查看版本 mysql 1 2 select version ();status;
身份鉴别 账户信息 查看账户是否为空口令 1 2 3 4 5 6 7 select user ,host,authentication_string from mysql.user;select user ,host from mysql.user where length (authentication_string)=0 or authentication_string is null ;select user ,host,password from mysql.user;select * from mysql.user where length (password )=0 or password is null ;
密码策略
validate_password插件适用于mysql5.7.17以后
插件安装 1 2 INSTALL PLUGIN validate_password SONAME 'validate_password.dll' ; UNINSTALL PLUGIN validate_password;
查看 1 show global variables like '%validate_password%' ;
参数
值
说明
validate_password_check_user_name
ON
匹配新口令中是否含有用户名,默认启用
validate_password_dictionary_file
密码字典,新口令与字典相同则不可用
validate_password_length
8
口令最小长度
validate_password_mixed_case_count
1
最少大写和小写字符数(同时有大写和小写)
validate_password_number_count
1
最少数字字符数
validate_password_special_char_count
1
最少特殊字符数
validate_password_policy
MEDIUM
密码安全策略:0/LOW:只限长度;1/MEDIUM:限制长度、数字、字母、特殊字符;2/STRONG:限制长度、数字、字母、特殊字符、字典
mysql5.7.4以上版本 1 2 show global variables like 'default_password_lifetime' ;select user ,host,password_last_changed from mysql.user;
在mysql配置文件(my.cnf(linux)
、my.ini(windows)
)中设置
1 2 [mysqld] default_password_lifetime=180
在线设置,重启后失效 1 SET GLOBAL default_password_lifetime = 180 ;
登录失败 1 2 3 4 5 6 7 8 9 10 11 12 13 show global variables like '%connection-control%' ;connection_control_failed_connections_threshold=5 connection_control_min_connection_delay=60000 connection_control_max_connection_delay=2147483647 show global variables like 'max_connect_errors' ;
登录超时 1 2 show global variables like 'wait_timeout' ;show global variables like 'interactive_timeout' ;
参数
说明
interactive_timeout
服务器关闭交互式连接前等待活动的秒数,默认值为28800。注意,如果设置该参数,通过交互式登录后,当前会话wait_timeout值也会变成该参数的值,使用show session variables like 'wait_timeout';
查看当前会话设置。
wait_timeout
服务器关闭非交互连接之前等待活动的秒数,默认值为28800。
远程管理 见鉴别信息传输保密性
访问控制 查看用户 1 2 3 4 5 select currnet_user(); select user ,host from mysql.user; show grants for 'root' @'localhost' ; show grants ; select user ,host,account_locked from mysql.user;
查看用户权限 1 2 3 4 select * from mysql.user\G; select * from mysql.db\G; select * from mysql.tables_priv\G; select * from mysql.columns_priv\G;
安全审计 日志类型
MySQL日志类型
说明
普通查询日志(general query log)
当客户端连接数据库、执行语句时产生该日志
二进制日志(binray log)
当数据库内容发生改变时产生该日志,也被用来实现主从复制功能
错误日志(error log)
当数据库启动、运行、停止时产生该日志
中继日志(relay log)
从库上收到主库的数据更新是产生该日志
慢查询日志(slow query log)
SQL语句在数据库查询超过指定时间时产生该日志
DDL日志(metadata log)
执行DDL语句操作元数据时产生该日志
日志设置 查看日志设置 1 2 3 4 5 show global variables like '%log%' ; show global variables like 'log_output' ; show global variables like '%general_log%' ; show global variables like '%log_bin%' ; show global variables like '%log_error%' ;
参数
值
说明
log_output
TABLE/FILE
日志保存位置,数据库表或文件,MySQL5.1.6版及以上
general_log
ON/OFF
是否开启mysql常规查询日志,包括登录退出、SQL语句执行
general_log_file
\
mysql常规查询日志文件存储路径
log_bin
ON/OFF
是否开启二进制日志
log_bin_basename
\
保留二进制日志文件的基本名称和路径
log_bin_index
\
保留二进制日志索引文件的基本名称和路径
log_error
\
错误日志文件路径
slow_query_log
ON/OFF
是否开启慢查询日志
slow_query_log_file
\
慢查询日志文件路径
配置 1 2 3 set global log_output="TABLE" ;set global general_log=1 ; set global log_bin=1 ;
日志内容 log_output 1 2 3 4 desc mysql.general_log; SELECT * FROM mysql.general_log where event_time like '2020-08-31%' ; SELECT *, CONVERT (argument USING utf8) FROM mysql.general_log; SELECT *, CONVERT (argument USING utf8) FROM mysql.general_log where event_time like '2020-08-31%' ;
查看二进制日志 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 show binary logs ; show binlog events ; show binlog events in 'XXX-bin.000002' ; mysqlbinlog [options] log_file mysqlbinlog -v mysqlbinlog -v
查看慢查询日志 1 2 desc mysql.slow_log; SELECT * FROM mysql.slow_log;
日志备份 log_output
值为FILE时备份文件,为TBALE时备份数据库。
其他审计 MySQL企业审核基于审核日志插件和相关组件,官方文档
查看是否安装 1 2 3 4 show global variables like '%audit%' ;SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'audit%' ;
入侵防范 组件 查看插件信息
地址限制 1 select user ,host from mysql.user;
数据完整性
1 2 show global variables like '%ssl%' ; show global variables like "%require_secure_transport%" ;
数据保密性 鉴别信息传输保密性 1 2 3 4 show variables like 'default_authentication_plugin' ;select user ,plugin from mysql.user;
插件名称
说明
mysql_native_password
使用带盐的SHA1算法加密
caching_sha2_password
使用带盐的SHA256算法加密,mysql8.0以上默认采用caching_sha2_password
插件,官方说明
sha256_password
使用带盐的SHA256算法加密
mysql_old_password
不符合要求,被截获可直接登录
加密安全度caching_sha2_password
> sha256_password
> mysql_native_password
鉴别信息存储保密性 查看加密插件及加密结果 1 2 3 select user ,plugin ,password from mysql.user;select user ,plugin ,authentication_string from mysql.user;
user
plugin
authentication_string/password
root
caching_sha2_password
$A$005$1%h5f1OdZ0'46}M[uz5Di5wW2WWg8eeLWynsg2h3xnzHwQLmm39bEqLBxB0
root
mysql_native_password
*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
内容
字节数
说明
哈希算法
2字节
目前仅为 $A,表示 SHA256 算法
哈希轮转次数
4字节
目前仅为 $005,表示 5*1000=5000 次
盐(salt)
21字节
用于解决相同密码相同哈希值问题
哈希值
43字节
参考文档:MySQL 8.0:新的身份验证插件(caching_sha2_password)
其他 1 2 3 4 5 6 7 8 9 select user (); select database (); show database ; show tables ; select * from mysql.user; show plugins; INSTALL PLUGIN myplugin SONAME 'somepluglib.so' ; SET GLOBAL 插件名 = 值; uninstall plugin name ;