我正在使用脚本来创建 Mysql 数据库和表。这些脚本包含如下授权部分:
GRANT SELECT ON my_database.* TO my_user@"%" IDENTIFIED BY 'my_password';
REVOKE ALL PRIVILEGES ON my_database.* FROM my_user@"%";
GRANT SELECT, UPDATE ON my_database.* TO my_user@"%" IDENTIFIED BY 'my_password';
最初,我只使用了第三行,但遇到了以下问题:每当我从用户中删除权限 Q 并重新运行该脚本时,该用户在数据库中仍然具有该权限。所以我在授权行之前添加了撤销行。
然后我遇到了以下问题:每当我在“全新”Mysql 安装上运行脚本时,撤销失败,因为用户还不存在。所以我在撤销之前添加了一个“虚拟”授权。
问题:有没有更好的方法来实现这一点?我的“真实”脚本包含大量用户和大量数据库并且难以阅读,因为我需要为要分配的每组权限设置三行代码。我只想使用一条线。
编辑(基于答案和评论的反馈):
我正在寻找最短的方式来表达类似
SET PRIVILEGES SELECT, UPDATE
ON my_database.*
TO my_user@"%"
IDENTIFIED BY 'my_password';
my_user 可能在哪里
- 已经存在(但可能是新的)
- 目前拥有扩展我希望他拥有的特权
- 拥有其他数据库的权限,这些数据库必须不受影响