MySQL安全配置之MySQL权限安全

1. 设置仅管理员用户具有所有数据库的访问权限

安全说明
除了管理员账号,其他用户没必要有所有数据库的访问权限。过高的权限会导致安全问题。
检查方法

mysql> SELECT user, host FROM mysql.user WHERE (Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y');
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| mysql.infoschema | localhost |
| root             | localhost |
+------------------+-----------+


mysql> SELECT user, host FROM mysql.db WHERE db = 'mysql' AND ((Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y'));
Empty set (0.00 sec)

如果返回的都是管理员账号说明安全,否则需要对用户清除权限
配置方法
清除非管理员账号的过高部分权限

 

2. 禁用非管理员用户的“File_priv”

安全说明
File_priv权限用于允许或禁止MySQL用户在服务器主机上读写文件。黑客很可能利用这一点盗取数据库中敏感数据。
检查方法

mysql> select user, host from mysql.user where File_priv = 'Y';
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+

如果返回的都是管理员账号说明安全,否则需要对用户清除权限
配置方法

mysql> REVOKE FILE ON *.* FROM '<user>’; //<user>为需要撤销权限的用户

回退步骤

mysql> GRANT FILE ON *.* TO user@localhost; //<user>为需要增加权限的用户

备注
8.0版本默认情况下,只有管理员账号拥有File_priv权限

 

3. 禁用非管理员用户的“Process_priv”

安全说明
Process_priv权限用于允许或禁止给定用户是否可以查看当前正在执行的sql语句。使用超越当前用户权限的权利。可以被攻击者所利用。
检查方法

mysql> select user, host from mysql.user where Process_priv = 'Y';
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+

如果返回的都是管理员账号说明安全,否则需要对用户清除权限
配置方法

mysql> REVOKE PROCESS ON *.* FROM '<user>’; //<user>为需要撤销权限的用户

回退步骤

mysql> GRANT PROCESS ON *.* TO user@localhost; //user为需要增加权限的用户

备注
8.0版本默认情况下,只有管理员账号拥有Process_priv权限。

 

4. 禁用非管理员用户的“Super_priv”

安全说明
Super_priv权限用于允许或禁止给定用户是否可以执行任意语句,非管理员不应该具备该权限。使用超越当前用户权限的权利。可以被攻击者所利用。
检查方法

mysql> select user, host from mysql.user where Super_priv = 'Y';
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| root          | %         |
| mysql.session | localhost |
| root          | localhost |
+---------------+-----------+

如果返回的都是管理员账号说明安全,否则需要对用户清除权限
配置方法

mysql> REVOKE SUPER ON *.* FROM '<user>’; //<user>为需要撤销权限的用户

回退步骤

mysql> GRANT SUPER ON *.* TO user@localhost; //user为需要增加权限的用户

备注
mysql.session‘@’localhost’:插件内部使用来访问服务器。该用户已被锁定,客户端无法连接。

 

5. 禁用非管理员用户的“Shutdown_priv”

安全说明
Shutdown_priv权限用于允许或禁止给定用户是否可以关闭数据库,会造成一定安全隐患。使用超越当前用户权限的权利。可以被攻击者所利用。
检查方法

mysql> select user, host from mysql.user where Shutdown_priv = 'Y';
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+

如果返回的都是管理员账号说明安全,否则需要对用户清除权限
配置方法

mysql> REVOKE SHUTDOWN ON *.* FROM '<user>’; //<user>为需要撤销权限的用户

回退步骤

mysql> GRANT SHUTDOWN ON *.* TO user@localhost; //user为需要增加权限的用户

备注
8.0版本默认情况下,只有管理员账号拥有Process_priv权限。

 

6. 禁用非管理员用户的“Create_user_priv”

安全说明
Create_user_priv权限用于允许或禁止给定用户是否可以创建任意用户,会造成一定安全隐患。使用超越当前用户权限的权利。可以被攻击者所利用。
检查方法

mysql> select user, host from mysql.user where Create_user_priv = 'Y';
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+

如果返回的都是管理员账号说明安全,否则需要对用户清除权限。
配置方法

mysql> REVOKE CREATE USER ON *.* FROM '<user>’; //<user>为需要撤销权限的用户

回退步骤

mysql> GRANT CREATE USER ON *.* TO user@localhost; //user为需要增加权限的用户

 

7. 禁用非管理员用户的“Grant_priv”

安全说明
Grant_priv权限用于允许或禁止给定用户是否可以对其他用户赋权,可能会被黑客利用造成一定安全隐患。使用超越当前用户权限的权利。可以被攻击者所利用。
检查方法

mysql> select user, host from mysql.user where Grant_priv= 'Y';
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+

如果返回的都是管理员账号说明安全,否则需要对用户清除权限。
配置方法

mysql> REVOKE GRANT ON *.* FROM '<user>’; //<user>为需要撤销权限的用户

回退步骤

mysql> GRANT GRANT ON *.* TO user@localhost; //user为需要增加权限的用户

 

8. 禁用“Non-slave”用户的“repl_slave_priv”

安全说明
repl_slave_priv权限用于控制给定用户是否可以从主服务器上获取更新的数据。使用超越当前用户权限的权利。可以被攻击者所利用。
检查方法

mysql> select user, host from mysql.user where repl_slave_priv = 'Y';
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+

如果返回的都是管理员账号说明安全,否则需要对用户清除权限。
配置方法

mysql> REVOKE REPLICATION ON *.* FROM '<user>’; //<user>为需要撤销权限的用户

回退步骤

mysql> GRANT REPLICATION ON *.* TO user@localhost; //user为需要增加权限的用户

 

9. 设置DML/DDL授权仅限于特定数据库和用户

安全说明
DML/DDL包括用于修改或创建数据结构的一组权限。这包括INSERT,SELECT,UPDATE,DELETE,DROP,CREATE和ALTER权限。使用超越当前用户权限的权利。可以被攻击者所利用。
检查方法

mysql> SELECT User,Host,Db FROM mysql.db WHERE Select_priv='Y' OR Insert_priv='Y' OR Update_priv='Y' OR Delete_priv='Y' OR Create_priv='Y' OR Drop_priv='Y' OR Alter_priv='Y';
+---------------+-----------+--------------------+
| User          | Host      | Db                 |
+---------------+-----------+--------------------+
| airflow       | %         | airflow            |
| hive          | %         | hive               |
| mysql.session | localhost | performance_schema |
| airflow       | master    | airflow            |
| hive          | master2   | hive               |
+---------------+-----------+--------------------+

确保返回的所有用户都应在指定的数据库上具有这些权限。
配置方法

mysql> REVOKE XXX ON *.* FROM '<user>’; //<user>为需要撤销权限的用户

回退步骤

mysql> GRANT XXX ON *.* TO user@localhost; //user为需要增加权限的用户

 

版权声明:
作者:youlijiang
链接:https://www.cnesa.cn/913.html
来源:正群欣世
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>