以下包括以下Mysql数据库系统安全与加固的一些知识,熟悉Mysql数据库框架与各主要文件配置,权限、日志等内容,有助于管理员更好的进行维护,及时发现问题并有效解决。
主要包括6点内容如下:
################################################################################
Mysql_sys_security@Aplexia
################################################################################
================================================================================
# 1.禁止Mysql以管理员权限运行
# 2.设置root用户口令修改登录名,且不存在空密码账户
# 3.配置合适的密码强度,最长使用期限小于90天
# 4.降低用户的数据库特权,只有管理员才有完整的数据库访问权限
# 5.进制或者限制远程访问,确保特定主机才有访问特权
# 6.配置Mysql日志便于审计
================================================================================
1.禁止Mysql以管理员账号权限运行
================================================================================
# 1.禁止Mysql以管理员账号权限运行
# 》Mysql应该使用非管理员账号运行,以普通账户安全运行mysql
# 》加固方法:在Mysq my.cnf配置文件中应该配置user=mysql
#
================================================================================
2.设置root用户口令并修改登录名,且不存在空密码账户
================================================================================
# 2.设置root用户口令并修改登录名,且不存在空密码账户
# 在Mysql控制台中执行:
# >SET PASSWORD FOR 'root'@'localhost'=PASSWORD('new_password');
# 在实际操作中,只需要将上面new_password换成实际口令即可。
#
# 为更好的改进root用户安全性,为其改名也是十分必要的。
# >USE mysql;
# >UPDATE user S:ET user="another_username" WHERE user="root";
# > FULESH PRIVILEGES;
#
# 数据库中的所有用户都应配置密码,空密码允许在用户不使用密码的情况下登录
# >SET PASSWORD FOR root@'host'=PASSWORD('1234');
# >select * from mysql.user where user=""; 这句话什么也不会返回
#
================================================================================
3.配置合适的密码强度,最长使用期限小于90天
================================================================================
# 3.配置合适的密码强度,最长使用期限小于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
#
================================================================================
4.降低用户库特权,只有管理员有完整的数据库访问权限
================================================================================
# 4.降低用户库特权,只有管理员有完整的数据库访问权限
# Mysql数据库中mysql.user和mysql.db表列出了可授予(或拒绝)给Mysql用户的
# 各种权限。一般特权只给管理员使用。
# 加固方法:列举审计程序结果统计非管理员用户,对于每个非管理员使用REVOKE
# 语句来适当删除权限.
#
# Mysql.user表中的权限有:
# file_prive:表示是否允许用户读取数据库所在主机的本地文件
# Process:表示是否允许用户查询所有用户的命令执行信息
# Super_priv:表示用户是否有设置全局变量、管理员调试等高级别权限
# Shutdown_priv:表示用户是否可以关闭数据库
# Create_user_priv:表示用户是否可以创建或删除其他用户
# Grant_priv:表示用户是否可以修改其他用户的权限
#
# 确保只有管理员才有上述权限,使用sql语句查看拥有各权限的数据库账号:
# >select user,host from mysql.user where File_prive='Y';
# >select user,host from mysql.user where Process_priv='Y';
#
# 确保查询结果不存在非管理员用户
#
# 如果存在非管理员用户,使用REVOKE进行权限回收:
# >REVOKE SHUTDOWN ON *.* FROM 'user';
# >REVOKE CREATE USER ON *.* FROM 'user';
# >REVOKE GRANT OPTION ON *.* FROM 'user';
# <'user'为查询到的非管理员用户>
================================================================================
5.禁止或限制远程访问,确保只有主机才拥有访问权
================================================================================
# 5.禁止或限制远程访问,确保只有主机才拥有访问权
# 》直接通过本地网络之外的计算机改变生产环境中的数据库是异常危险的。有时
# 管理员会打开主机对数据库进行访问:
# >GRNAT ALL ON *.* TO 'root'@'%';
# 这其实是完全开放了对root的访问。
#
# >GRANT ALL ON *.* TO 'root'@'localhost';
# >GRANGT ALL ON *.* TO 'root'@'myip.athome'
# >FLUSH PRIVILEGES
# 对root配置访问权限
#
# 》有限许可访问:
# >GRANT SELECT,INSERT,SELETE ON mydb.* TO 'someuser'@'somehost';
#
================================================================================
6.配置Mysql日志便于审计
================================================================================
# 6.配置Mysql日志便于审计
# 》Mysql应该配置日志功能,其中包括错误日志、二进制日志、置慢查询日志、
# 通用查询日志、更新日志。
# 》加固方法:
# 编辑my.cnf文件,设置log_error=/home/mysql.err、log_bin=mysql-bin、
# slow_query_log=1、general_log=1、log_slave_update=1
#
# 》错误日志:在对于数据目录中,以主机+.err命名的文件,信息类型为:
# 记录服务器运行中产生错误信息
# 记录了服务器在启动和停止中所产生的信息
# 在从服务器上如果启动了复制进程的时候,复制进程的信息也会被记录
# 记录event错误日志
# 》在mysql的主配置文件:
# log_error=/mydate/data/mysql.test.com.err
# 指定错误日志的位置,默认是在数据目录下,这个位置mysql用户必须有
# 写的权限。
#
# log_warning={0|1}
# 默认开启,服务器运行中的警告日志也会记录在错误日志文件中。
================================================================================