让MySQL用户创建数据库,但只允许访问自己的数据库

时间:2010-06-01 13:19:00

标签: mysql

我想让多个 MySQL用户能够发出像

这样的命令
CREATE DATABASE dbTest;

但我也希望这些用户能够只查看和访问自己的数据库。

我只能找到如何通过DBA创建数据库并将此数据库的权限授予特定用户:

GRANT ALL PRIVILEGES ON dbTest.* TO 'user';

或将所有数据库的权限授予用户:

GRANT ALL PRIVILEGES ON *.* TO 'user';

但这也不是我想要的,因为它需要扩展并且安全。

4 个答案:

答案 0 :(得分:75)

您可以使用

GRANT ALL PRIVILEGES ON `testuser\_%` .  * TO 'testuser'@'%';

在名称以testuser开头的所有数据库上授予用户testuser_权限。

这允许testuser创建仅限于以testuser _

开头的名称的数据库

答案 1 :(得分:23)

您可以使用

GRANT ALL PRIVILEGES ON `testuser_%` . * TO 'testuser'@'%';

在名称以testuser开头的所有数据库上授予用户testuser_权限。

编辑:我不确定此用户现在是否也被允许创建数据库。

是的,这允许testuser创建仅限于以testuser_开头的名称的数据库

答案 2 :(得分:13)

创建由admin用户定义的存储过程,并使用SQL SECURITY DEFINER以admin用户权限调用。在存储过程中,

  • 创建数据库。
  • 设置数据库的权限,以便只有当前用户才能访问。
  • 执行FLUSH PRIVILEGES以从授权表重新加载特权。

使用USER()获取当前用户登录详细信息。

Find out more about SQL SECURITY DEFINER

答案 3 :(得分:0)

无法仅使用权限

另一个答案建议的解决方法: GRANT ALL PRIVILEGES ON TESTUSER _%. * TO 'testuser'@'%'; 有一个问题是用户必须非常小心地命名他们的数据库。

例如,如果用户aaa创建了数据库bbb_xyz,则可以由用户bbb专门访问,但不能由用户aaa访问。