MySQL账号安全设置

Posted 笑东风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL账号安全设置相关的知识,希望对你有一定的参考价值。

========================================================================

推荐账号安全设置

在数据库服务器上严格控制操作系统的账号权限
1) 锁定mysql用户
2) 账号独立使用,管理员账号和应用账号分开,不同应用账号分开
3) MYSQL 用户目录下,除数据文件目录外,其他文件和目录属主都改为root
4)对所有用户使用IP和HOSTNAME来限制

 

========================================================================

避免下列危险操作

尽量避免以root权限运行mysql
如果使用root用户启动数据库,则任何具有FILE权限的用户都可以读写ROOT用户的文件,这样会给系统造成严重的安全隐患。

删除匿名账号
建议删除匿名账号,或者对账号增加密码

给root账号设置口令
MYSQL安装后,root的默认密码为空,应立即修改

只授予账号必须的权限

使用强密码,避免密码明文

除root外,任何用户不应该有mysql库的user表的存取权限
如果普通用户具有修改mysql.user表的权限,则可以修改root及其高级别账号的密码。

 

========================================================================

控制账号权限

不要把FILE PROCESS SUPPER 权限授权给非管理员账号

FILE权限主要有以下作用:
A)将数据库的信息通过SELECT INTO OUTFILE 写到服务器上有写权限的目录下,作为文本格式存放。具有权限的目录就是启动MYSQL时的用户权限目录。
B)可以将具有读权限的文本文件通过LOAD DATA INFILE 命令写入数据库表,造成表中的敏感信息泄露



PROCESS权限有以下作用:
可以执行"SHOW PROCESSLIST"命令,查看当前所有用户执行的查询的明文文本,如果其他用户正在执行敏感脚本如更新账号,则会存在安全隐患。


SUPER权限有以下作用:
可以执行kill命令中止任何用户的进程。


禁用LOAD DATA LOCAL
LOAD DATA LOCAL命令运行将本例文件加载到数据库中,存在安全问题,可以使用--local-infile=0来从服务器端禁用LOAD DATA LOCAL命令。


DROP TABLE 命令不会回收表的相关访问权限
当删除表时,其他用户对表的权限并没有被收回,如果创建同名的表,则这些用户对新表的权限会自动赋予,造成权限外流。


REVOKE 命令漏洞
如果用户被多次赋权,然后对用户使用REVOKE操作取消权限时,可能不能将多次赋予的权限一次全部REVOKE完成。因为多次赋权后,可能被认为多组单独的权限,REVOKE时不会依次进行清理

 

========================================================================

使用SSL确保网络传输安全

使用SSL来确保数据在网络传输过程中不给截取和窃听
SSL协议提供的服务有:
A)认证用户和服务器,确保数据发送到正确的客户机和服务器
B)加密数据以防止数据中途被窃取
C)维护数据的完整性,确保数据在传输过程中不会被改变

 

========================================================================

使用SSL确保网络传输安全

使用SSL来确保数据在网络传输过程中不给截取和窃听
SSL协议提供的服务有:
A)认证用户和服务器,确保数据发送到正确的客户机和服务器
B)加密数据以防止数据中途被窃取
C)维护数据的完整性,确保数据在传输过程中不会被改变

 

========================================================================

MySQL加密算法增强

MYSQL中密码加密相当于两次SHA1夹杂一次unhex方式:
SELECT CONCAT(*,UPPER(SHA1(UNHEX(SHA1([email protected]))))),PASSWORD([email protected]);
+------------------------------------------------+-------------------------------------------+
| CONCAT(*,UPPER(SHA1(UNHEX(SHA1([email protected]))))) | PASSWORD([email protected])                        |
+------------------------------------------------+-------------------------------------------+
| *F1B060F1AFDAA276FB109607A6D0A701C19C0314      | *F1B060F1AFDAA276FB109607A6D0A701C19C0314 |
+------------------------------------------------+-------------------------------------------+

在MYSQL 5.6版本前,binlog日志中和用户密码相关的操作是不加密的,在MYSQL 5.6版本中进行了加强,但在搭建复制时仍需要使用明文密码。

以上是关于MySQL账号安全设置的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL5.7设置账号密码复杂度密码有效期账号锁定等策略

LAMP安全设置

springcloud应用配置中心config的安全设置

mysql系统安全管理与优化

Mysql安全的小技巧

MySQL用户