16、数据库加固-mysql 加固
1.修改 DBA 登录密码
shell 下执行:
mysqladmin -u root password
非首次修改:mysqladmin -u root password -p原密码
在 mysql 下执行:
update user set password=password('密码') where user='root';
flush privileges;
2.删除默认数据库和用户
删除测试库
show databases;
drop database test;
删除非 root 用户
use mysql;
delete from user where not (user='root');
删除空密码的 root 用户
delete from user where user='root' and password='';
flush privileges;
3.变更 DBA 用户名
use mysql;
update user set user="zhangsan" where user="root";
flush privileges;
4.在账户管理时使用加密算法
添加账户 test,密码进行加密处理
use mysql;
insert into users values(1,password(123.com),"test");(48位的 md5)
5.更改 mysql 启动用户
修改 my.cnf 文件:/etc/my.cnf
加入内容:
[mysqld] user=mysql
6.限制远程连接数
修改 my.cnf 文件
加入内容:
[mysqld] max_connections=5 max_user_connections=2
或者限制某个用户,在 mysql 中执行
testdb用户最多两个连接
GRANT test ON *.* TO testdb@localhost MAX_USER_CONNECTIONS 2;
7.关闭远程管理数据库(关闭后,限制远程就没用了)
修改 my.cnf
修改内容:
取消下方语句的注释符 #skip-networking skip-networking
8.清理 mysql 命令历史
注意清理家目录中的 .mysql_history
ln -s /dev/null /root/.mysql_history
禁止使用明文模式登录 mysql:mysql -u root -p
9.禁止 MySQL 读取本地文件
禁止mysql通过某个文件,把文件内容置入数据库
修改 my.cnf
加入内容:
[mysqld] local_infile = 0
或者添加启动选项:用脚本开启 mysql(临时生效)
mysqld_safe --local_infile=0 --user=mysql
10.禁止将表导出到文件
在 mysql 中修改用户的文件权限
update user set File_priv='N' where user='用户名';
检查配置文件是否存在不合理信息,存在则删掉
grep secure_file_priv /etc/my.cnf
secure_file_priv=xxx路径
11.日常备份数据库
手动备份数据库可用防止密码明文存储
mysqldump --user=root --all-databases --flush-privileges --lock-all-tables --master-data=1 --flush-logs --triggers --routines --events --hex-blob > 备份路径/文件名时间戳.sql
还原数据库
mysql -u用户名 -p密码 数据库名 < 备份文件名