2010-06-01 88 views
35

我想有多个一个MySQL用户能够发出像让MySQL用户创建数据库,但是只允许访问自己的数据库

CREATE DATABASE dbTest; 

命令,但我也希望每个用户来只能看到并访问他们的自己的数据库。

所有我能找到的是如何可以创建一个由DBA数据库,并授予该数据库的权限给特定用户:对所有数据库

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

或授予权限的用户:

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

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

回答

65

您可以使用

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

授予用户对所有数据库testuser特权与testuser_开头的名称。

这允许TESTUSER创建开始testuser_

+0

当我运行这个时,我得到错误1064 ...在第1行'* TO'testuser'@'%''附近使用正确的语法 – Asaf 2015-08-29 18:34:37

+0

您可以发布整个查询吗? – 2015-08-29 20:10:00

+0

我注意到这只发生在'mysql -u root -e“QUERY”'下运行时,如果你用反斜杠反斜杠 – Asaf 2015-08-30 13:47:17

12

不限于姓名数据库创建由管理员用户定义,并通过使用SQL SECURITY DEFINER与管理员用户权限调用的存储过程。在存储过程中,

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

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

Find out more about SQL SECURITY DEFINER

+1

它在哪里创建存储过程。哪个数据库具有此存储过程? – Nest 2015-03-02 09:38:31

19

您可以使用

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

授予用户对所有数据库testuser特权与testuser_开头的名称。

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

是的,这使得testuser创建不限于姓名数据库开始testuser_

+2

我不得不围绕testuser_%包装反引号,但不幸的是,堆栈溢出不会通过反引号表示代码段。 – Programster 2014-04-09 09:10:08

+8

这应该是对Lex答案的评论,而不是答案本身。 – 2014-12-04 00:27:16

+0

我不确定这个用户现在是否也被允许创建数据库....不,它不是。 – sitilge 2015-08-24 13:29:30

0

这是不可能做到这一点使用权限只有

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

例如,如果用户aaa创建数据库bbb_xyz,然后它可以完全由用户bbb而不是由用户aaa访问。

相关问题