我想让多个MySQL用户能够执行命令,例如:
CREATE DATABASE dbTest;
我还希望这些用户只能看到和访问他们自己的数据库。
我找到的都是如何由DBA创建数据库并授予特定用户此数据库权限的方法:
GRANT ALL PRIVILEGES ON dbTest.* TO 'user';
或者将所有数据库的权限授予给一个用户:
GRANT ALL PRIVILEGES ON *.* TO 'user';
但是这两个选项都不是我想要的,因为它需要具备可扩展性和安全性。
我想让多个MySQL用户能够执行命令,例如:
CREATE DATABASE dbTest;
我还希望这些用户只能看到和访问他们自己的数据库。
我找到的都是如何由DBA创建数据库并授予特定用户此数据库权限的方法:
GRANT ALL PRIVILEGES ON dbTest.* TO 'user';
或者将所有数据库的权限授予给一个用户:
GRANT ALL PRIVILEGES ON *.* TO 'user';
但是这两个选项都不是我想要的,因为它需要具备可扩展性和安全性。
您可以使用
GRANT ALL PRIVILEGES ON `testuser\_%` . * TO 'testuser'@'%';
授予用户testuser
对名称以testuser_
开头的所有数据库的特权。
这允许testuser创建仅限于以testuser_开头的名称的数据库。
您可以使用
GRANT ALL PRIVILEGES ON `testuser_%` . * TO 'testuser'@'%';
授予用户testuser
在所有名称以testuser_
开头的数据库上的权限。
编辑:我不确定这个用户是否也被允许创建数据库。
是的,这将允许testuser
创建仅限于以testuser_
开头的名称的数据库。
使用SQL SECURITY DEFINER创建由管理员用户定义并以管理员用户特权调用的存储过程。在存储过程中,
使用USER()获取当前用户登录详细信息。
仅使用权限是不可能做到这一点的。
另一个答案中建议的解决方法是:
GRANT ALL PRIVILEGES ON
testuser_%. * TO 'testuser'@'%';
但这种方法存在问题,因为用户在命名数据库时必须非常小心。
例如,如果用户aaa
创建了数据库bbb_xyz
,那么它只能被用户bbb
独占访问,而不能被用户aaa
访问。
aaa
将无法创建一个名为bbb_xyz
的数据库,只能创建一个名为aaa_xyz
的数据库。 - Jack_Hu
mysql -u root -e "QUERY"
时才会发生这种情况,如果你用反斜杠转义反引号,则可以正常工作。 - Asaf