mysql数据库安全管理包含如下方面
禁止mysql以管理员账号权限运行
- mysql应该使用非管理员账号运行,以普通账户安全运行mysqld
在mysql进程出现的时候防止影响系统
- 加固方法:在mysql的my.cnf配置文件中应该配置user=mysql
设置root用户口令并修改登录名,且不存在空密码账户
登录数据库
mysql - u root -p
控制台中执行:
SET PASSWORD FOR 'root'@'localhost'=PASSWROD('new_password')'
new_password为实际密码
为了更有效的改进root用户安全性,另一种方法是为其改名。因此,需要更新表用户中的mysql数据库。
USE mysql;
UPDATE user SET user="another_username" WHERE user="root";
FLUSH PRIVILEGES;
然后通过mysql控制台使用新的用户名
mysql -u another_username -p
数据库中所有的用户都应该配置密码,空密码允许用户在不适用密码的情况下登录。
加固方法:使用以下语句为用户设置一个密码
SET PASSWORD FOR<user>@'<host>'=PASSWORD('<clear password>')
检查是否存在用户为空密码
select * from mysql.user where user="";
在安全的系统中,不会返回什么信息。
配置合适的密码强度,最长使用期限小于90天
数据库用户密码复杂性包括密码特征,如长度,大小写,长度和字符集
加固方法:添加如下配置到全局配置
plugin-load=validate_password.so
validate_password_length=14
validate_password_mixed_case_count=1
validate_password_number_count=1
validate_password_special_char_count=1
validate_password_policy=MEDIUM
数据库提供了配置配置数据库密码的过期时间,用户密码过期时间应该设置为小于等于90天
加固方法:配置mysql RDBMS:
全局策略
SET GLOBAL default_password_lifetime=90
降低用户的数据库特权,只有管理员有完整的数据库访问权限
mysql数据库中,mysql.user和mysql.d表中列出了可以授予(或者拒绝)给mysql用户的各种权限。通常这些特权不应该对每个MYSQL用户都可用,而且通常只保留给管理员使用。
加固方法,列举审计程序结果统计的非管理员用户,对于每个非管理用户,使用revoke语句来适当删除权限。
Mysql.user表中的权限有:
file_priv:表示是否允许用户读取数据库所在的主机的本地文件
Process:表示是否允许用户查询所有用户的命令执行权限信息
Super_priv:表示用户是否有设置全局变量,管理员调试等高级别权限
Shutdown_priv: 表示用户是否可以关闭数据库
Create_user_priv:表示用户是否可以创建或者删除其他用户
Grant_priv:表示用户是否可以修改其他用户的权限。
应该确保只有数据库管理员才有上述权限,使用如下sql语句查看拥有各个权限的数据库账号
select user,host from mysql.user where File_priv='Y';
select user,host from mysql.user where Process_priv='Y';
需要确保查询结果中不存在非管理员用户。
如果存在非管理员用户,使用如下命令进行权限回收:
REVOKE SHUTDOWN ON *.* FROM '<user'>;
REVOKE CREATE USER ON *.* FROM '<user'>;
REVOKE GRANTE OPTION ON *.* FROM '<user>';
其中user为上述查询到的非管理员用户。
禁止或者限制远程访问,确保特定的主机采用访问权限
直接通过本地网络之外的计算机改变生成环境中的数据库是非常危险的,有时管理员会打开主机对数据的访问
GRANT ALL ON *.* TO 'root'@'%';
这其实是完全放开了对root的访问,所以需要把重要的操作权限限制给特定的主机
GRANT ALL ON *.* TO 'root'@'localhost';
GRANT ALL ON *.* TO 'root'@'myip.athome
有限权限的访问
mysql>GRANT SELECT,INSERT ON mydb.* TO 'someuser'@'somehost';
配置mysql日志便于审计
mysql应该配置日志功能,其中包含错误日志,二进制日志,慢查询日志,通过查询日志,更新日志等
加固方法:编辑my.cnf文件,如下设置:
log_error=/home/mysql.err
log_bin=mysql-bin
show_query_log=1
general_log=1
log_slave_updates=1
错误日志
在对应的数据目录中,以主机名+.err命名的文件,错误日志记录的信息类型:
- 服务器运行中产生的错误信息
- 服务器在启动和停止的时候产生的信息
- 在从服务器上如果启动了复制进行的时候,复制进程信息也会被记录
- 记录了 event错误日志
相关配置
log_error=/mydata/data/mysql/test.com.err #指定错误日志的位置,默认是在数据目录下,mysql用户必须有写权限
log_warning={0|1} #默认开启,服务器中运行的告警日志也会记录在错误日志中