MySQL 安全策略

2021-06-27
1,密码复杂化。

登录密码尽量包含特殊字符、大小写组合,保持长度。

修改密码:

$ mysql> use mysql;
$ mysql> update user set authentication_string=password("test") where user='root';
$ mysql> flush privileges;
$ exit;
2,使用内网登录,不启用公网。

若无特殊需要,禁止远程连接 MySQL。编辑 my.cnf 在 [mysqld] 添加:

skip-networking

# 指定IP链接
bind-address=192.168.1.100

远程管理可使用 phpMyAdmin。

3,删除默认数据库和账号。
$ mysql> drop database test;
$ mysql> use mysql;
$ mysql> delete from db;
$ mysql> delete from user where not(host="localhost" and user="root");
$ mysql> flush privileges;
$ exit;
4, 更改默认root账号名称。
$ mysql> use mysql;
$ mysql> update mysql.user set user="admin" where user="root";
$ mysql> flush privileges;
5,降低用户的数据库特权。

有些应用程序是通过一个特定数据库表的用户名和口令连接到MySQL的,安全人员不应当给予这个用户完全的访问权。

如果攻击者获得了这个拥有完全访问权的用户,他也就拥有了所有的数据库。

查看一个用户许可的方法是在 MySQL 控制台中使用命令 SHOW GRANT:

$ mysql> SHOW GRANTS FOR 'user'@'localhost';

为定义用户的访问权,使用 GRANT 命令。在下面的例子中,user1 仅能从 lh1010 数据库的 billing 表中选择:

$ mysql> GRANT SELECT ON billing.lh1010 TO 'user1'@'localhost';
$ mysql> FLUSH PRIVILEGES;

# 可以查询lh1010库中的表
$ mysql> GRANT SELECT ON lh1010.* TO 'user1'@'localhost';

如此一来,user1 用户就无法改变数据库中这个表和其它表的任何数据。

另一方面,如果你要从一个用户移除访问权,就应使用一个与 GRANT 命令类似的 REVOKE 命令:

$ mysql> REVOKE SELECT ON billing.lh1010 FROM 'user1'@'localhost';
$ mysql> FLUSH PRIVILEGES;

GRANT 权限具体可查看:https://www.cnblogs.com/yunfeioliver/p/7887676.html

6,本地文件安全。

禁用 LOCAL INFILE 命令,在 MySQL 配置文件中的 [mysqld] 部分增加下面的参数:

set-variable=local-infile=0

这有助于防止非授权用户访问本地文件。在PHP应用程序中发现有新的SQL注入漏洞时,这样做尤其重要。

此外,在某些情况下,LOCAL INFILE 命令可被用于访问操作系统上的其它文件(如 /etc/passwd ):

mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1

# 或者

mysql> SELECT load_file("/etc/passwd")
7,定期备份数据。

任何系统都有可能发生灾难。服务器、MySQL也会崩溃,也有可能遭受入侵,数据有可能被删除。只有为最糟糕的情况做好了充分的准备,才能够在事后快速地从灾难中恢复。企业最好把备份过程作为服务器的一项日常工作。

新增定时任务,自动备份数据脚本示例:

time=us_songmics_dev_$(date '+%Y-%m-%d-%H-%M-%S')

###################数据库配置信息#######################
user=root
passwd='password'
dbname=us_songmics_dev
mysql_back_path=/home/data

##################执行备份#############################
mysqldump -u$user -p$passwd $dbname > $mysql_back_path/$time.sql

参考信息:
http://www.yunweipai.com/5994.html
https://www.cnblogs.com/allenhu320/p/11547424.html
https://www.jb51.net/article/40710.htm
https://www.cnblogs.com/guixia621/p/7365517.html

© 2021 Lh1010 - 豫ICP备16115435号-1