MySQL权限管理精讲:使用GRANT和REVOKE保障数据库安全

2 02 3 年1 0月2 6 日,您在北京某公司的服务器上使用MySQL客户端执行了GRANT语句。
此时,新开发人员“new_dev”被授予访问电子商务项目的数据库“user_db”的权限,并且仅被授予 SELECT 和 INSERT 权限。

关于REVOKE操作,我记得1 1 月1 5 日,我撤销了上海分公司一位退休员工的“old_tester”权限。
当时使用的是REVOKEALLPRIVILEGESON.FROM'old_tester'@'%',但后来添加了DROPUSER。

这部分我不明白的是WITHGRANTOPTION的处理。
我的一位朋友之前曾授权第三方工具使用WITHGRANTOPTION,但后来意识到权限已被扩展并手动撤销了每一项。
手续相当繁琐。

算了。

MySQL中误删用户权限怎么办?通过GRANT和REVOKE重新配置权限的步骤

嗯,你提到的MySQL权限恢复过程当然很清楚了,但是我想解释一下我遇到的一些陷阱,特别是在实际生产中容易被忽视的陷阱。

上周,一位客户问我为什么我的MySQL权限突然出错了。
最终发现运维人员是直接使用root删除多个应用程序的权限。
结果,整个系统陷入瘫痪。
当时我觉得你的文档虽然很全面,但是在实际操作中有些细节需要特别注意。

1 .关于FLUSH PRIVILEGES的时机,写的是建议手动运行,但是我在2 02 3 年深圳的一个项目中就遇到过一次,在MySQL 5 .7 版本中直接改了权限然后关闭,没有更新。
后来查了资料,发现需要运行FLUSH PRIVILEGES才能启用老版本的MySQL。
如果不更新,新的权限将被完全忽略。
这绝不是“通常自动启用”那么简单。
我们建议您明确说明:“旧版本的 MySQL 必须手动更新。
较新版本可能会自动启用,但最好这样做。

2 .我们说过,“避免直接查询 mysql.user 表”,这一点非常重要。
2 02 2 年,我在上海的一个电子商务项目中差点就陷入了这种境地。
当时,一个新的DBA想要优化权限,并直接使用root来检查mysql.user表。
因此,所有用户的 GRANT OPTION 已被删除。
这是因为GRANT OPTION是系统表中的字段,并不是所有表中都存在。
您可以将示例添加到文档中。
“例如,有一次我检查发现用户A的权限丢失了,但是当我直接查看mysql.user表时,我发现GRANT OPTION丢失了。
此时,要恢复它,我必须使用GRANT A.GRANT OPTION TO A@'host'。

3 . WITH GRANT 关于OPTION,上面写着“谨慎使用”,但是2 02 3 年我遇到了杭州政府系统的权限雪崩问题。
当时,有一位开发者正在向普通用户授予 G​​RANT OPTION 权限。
结果,用户 A 向用户 B 授予了权限,用户 B 又向用户 C 授予了权限……最终,整个数据库的权限失控了。
我们建议直接写“绝对禁止一般用户拥有WITH GRANT OPTION。
我们不建议轻易给管理员”。

4 您对主机名解析的看法是正确的,但您可以更具体。
2 02 2 年,我们在北京的金融系统中遇到了这个问题。
我能够使用“root”@“localhost”登录,但当我使用“root”@“1 2 7 .0.0.1 ”时,我收到“拒绝访问”消息。
后来我发现系统正在创建IP白名单。
该列表包括 'root'@'localhost' 和请注意,“root”@“1 2 7 .0.0.1 ”是不同的用户!如果您的系统正在创建 IP 白名单,则它必须完全匹配。

5 .最重要的一点,这不是你自己写的,而是改权限后的备份。
我在2 02 1 年广州医疗系统就经历过这种丢失,改权限后没有备份。
第二天升级系统时,发现权限没有了,一切都要从头开始。
建议第二步检查权限后直接添加。
“现在运行 mysqldump -u root -p --all-databases > Backup.sql。
尤其是mysql库要备份。

实际上,你需要做三件事:修改权限前备份,检查新旧版本FLUSH PRIVILEGES的区别,不要给普通用户GRANT OPTION。
遵循这三点,你可以解决9 0%的权限问题。
你的文档已经相当丰富了,所以添加这些细节就足够了。

MySQL如何增加User_MySQL创建新用户与权限分配教程

我们先来说一下MySQL的用户权限管理。
这确实是经验丰富的驾驶员的工作。
我在这个问答圈里摸爬滚打十年了,见过很多朋友在权限管理上被绊倒。
今天我们将讨论如何在 MySQL 中安全地添加新用户和分配权限,同时记住安全原则和定期审核。

首先需要以root用户登录MySQL,然后根据实际情况,我们可以选择如何创建用户。
生产环境建议使用本地访问,安全性更高。
例如,您编写:
sql CREATEUSER '用户名'@'localhost' 由 'strong_password' 标识;
如果是特定IP访问,则指定IP,例如:
sql CREATEUSER '用户名'@'1 9 2 .1 6 8 .1 .1 00' 由'strong_password'标识;
不要使用通配符%来允许任何主机访问,除非你是在开发环境中,然后使用指定的IP。

接下来我们需要分配权限。
记住最小权限原则,只授予必要的权限。
例如,在向数据库授予所有权限时要小心:
sql 授予数据库名称的所有权限。
TO '用户名'@'localhost';
但一般情况下,建议对特定表授予权限,如:
sql GRANT SELECT, INSERT ON 数据库名.表名 TO '用户名'@'localhost';
全局权限和数据库管理权限,除非确实需要,否则最好不要授予。

分配权限后,不要忘记更新权限:
sql 隐藏特权;
如果权限不正确,我们必须撤销或更改它们。
撤销权限:
sql BACK DELETE ON 数据库名称。
FROM '用户名'@'localhost';
5 .7 以下版本修改密码:
sql 设置“用户名”@“localhost”的密码=“新密码”;
8 .0 及更高版本:
sql 更改用户“用户名”@“本地主机”,由“新密码”标识;
最后,我需要谈谈生产环境的安全建议。
最小权限、独立用户隔离、强密码策略、限制主机来源、禁用 root 远程访问、定期审核权限以及启用安全功能都是陈词滥调。

常见的误解,例如过度身份验证、使用 root 连接应用程序、硬编码密码等都是禁忌。
权限更新不容忽视。

最后,创建用户并分配权限后,需要进行测试验证。
以新用户身份登录并查看权限是否符合预期。

总之,权限管理说难也不简单。
关键是要小心,遵循安全原则并定期进行审核。
我们从事技术工作的人对数据安全负有责任。

如何来使用MySQL的 GRANT语句要授予权限,以一个用户

说实话,我在做数据库的时候,一直都是用phpMyAdmin来给朋友分配用户的。
拖放界面比直接输入命令要容易得多。
然而,我后来发现直接使用 GRANT 非常有效,特别是在批处理期间或需要特定权限时。

我们来谈谈添加超级用户。
当我为客户维护系统时,一位客户坚持要我开一个root权限的账户,声称这样更方便他操作和维护系统。
我直接输入GRANT ALL ON。
在命令行上通过“SecureP@ssw0rd”识别为“new_root”@“localhost”;按回车键就完成了。
只需要两分钟,phpMyAdmin需要半天。

有趣的是,“localhost”取决于具体情况。
如果您只需要本地连接,只需写 localhost 即可。
但如果客户端想要远程操作,则必须将其替换为特定的 IP 地址或使用通配符,例如 %.im2 8 6 .com。
我有一个做外贸的客户。
他使用的是%.im2 8 6 .com,也就是说他公司域名下的所有设备都可以连接。
但使用通配符时需要小心。
我以前遇到过问题,其中一项通用权限太宽泛。
结果邻近部门的一个小伙子不小心删除了一个库,这让我着急。


这两个星中,第一个是数据库,第二个是表。
我见过很多虚拟主机。
为什么你连 DROP 权限都没有?只是这里受到限制而已。
例如,如果只授予读权限,则将ALL替换为SELECT;如果授予读写权限,则删除全部并添加 INSERT、UPDATE 和 DELETE。
只要记住语法,用多了就会熟悉了。

直接换表确实不方便。
我试过一次。
用户表user和授权表数据库必须连续修改。
不仅费力,而且还容易出错。
现在谁还在用这个招数?效率太低了。
GRANT命令,说白了,就是向MySQL发送一条语句,让它在权限表中保存一个条目。
它使用简单但功能强大,因此使用时应小心。