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

eik*_*kes 44 mysql

我希望有多个 MySQL用户能够发出像这样的命令

CREATE DATABASE dbTest;
Run Code Online (Sandbox Code Playgroud)

但我也希望这些用户中的每一个都能够只查看和访问他们自己的数据库.

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

GRANT ALL PRIVILEGES ON dbTest.* TO 'user';
Run Code Online (Sandbox Code Playgroud)

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

GRANT ALL PRIVILEGES ON *.* TO 'user';
Run Code Online (Sandbox Code Playgroud)

但这也不是我想要的,因为它需要扩展和安全.

rae*_*kid 78

您可以使用

GRANT ALL PRIVILEGES ON `testuser\_%` .  * TO 'testuser'@'%';
Run Code Online (Sandbox Code Playgroud)

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

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


小智 23

您可以使用

GRANT ALL PRIVILEGES ON `testuser_%` . * TO 'testuser'@'%';
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 这应该是对Lex答案的评论,而不是答案本身. (8认同)
  • 我不得不在testuser_%周围包装反引号,但遗憾的是在堆栈溢出时不会反复出现,因为反引号表示代码部分. (2认同)

Jan*_*cki 14

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

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

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

了解有关SQL SECURITY DEFINER的更多信息.

  • 在哪里创建存储过程。哪个数据库具有此存储过程? (2认同)