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

我想让多个 MySQL用户能够发出类似的命令

CREATE DATABASE dbTest; 

但是我也希望每个用户都能够看到并访问他们自己的数据库。

我所能find的就是如何通过DBA创build数据库,并将特定用户的权限授予此数据库:

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

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

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

但既不是我想要的,因为它需要规模和安全。

您可以使用

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

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

这允许testuser创build限于从testuser_开始的名称的数据库

您可以使用

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

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

编辑:我不知道如果这个用户现在也被允许创build数据库。

是的,这允许testuser创build限于从testuser_开始的名称的数据库

创build一个由admin用户定义的存储过程,并使用SQL SECURITY DEFINER以pipe理员用户权限进行调用。 在存储过程中,

  • 创build数据库。
  • 在数据库上设置权限,以便只有当前用户有权访问。
  • 执行FLUSH PRIVILEGES以从授权表中重新加载权限。

使用USER()获取当前的用户login信息。

了解更多关于SQL SECURITY DEFINER的信息 。

只有使用权限才能做到这一点。

在另一个答案中build议的解决方法: GRANT ALL PRIVILEGES ON testuser_%上的GRANT ALL PRIVILEGES ON . * TO 'testuser'@'%'; . * TO 'testuser'@'%'; 存在这样的问题,即用户必须非常小心地命名他们的数据库。

例如,如果用户aaa创build数据库bbb_xyz ,则可以仅由用户bbb访问,但不能由用户aaa