让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
。