是否可以授予 MySQL 用户创建新数据库的权限,以便他们拥有对其创建的数据库的完全访问权限(包括删除这些数据库的能力)。但除了他们自己创建的数据库之外,他们不应该对任何其他用户的数据库拥有任何权限。
实现此目的的 CREATE USER/GRANT 语法是什么?
解决方案:(按照约翰申64的回应)
假设你想要应用服务器用户能够创建和访问新的数据库。
- 作为根,创建以下存储过程:
如果存在 CreateAppDB,则删除过程; 分隔符 // 创建过程 CreateAppDB( 在 db_name VARCHAR(50)) 开始 -- 创建数据库 SET @s = CONCAT('创建数据库', db_name); 从@s 准备语句; 执行语句; 解除分配准备语句; -- 授予权限 SET @s = CONCAT('GRANT ALL ON ', db_name, '.* TO appserver@localhost'); 从@s 准备语句; 执行语句; 解除分配准备语句; 结尾// 分隔符;
- 授予用户执行此过程的权限应用服务器:
授予 appserver@localhost 在 CreateAppDB 上的执行权限;
- 登录身份应用服务器并执行此过程。例如,要创建一个名为富:
调用 CreateAppDB('foo');
用户应用服务器将对新创建的数据库拥有全部权限富,包括删除它的能力,但将无法访问 MySQL 中的任何其他用户数据库。
答案1
虽然我知道 MySQL 中没有这样的 SQL 语句可以让你这样做,但你可以编写一个存储过程来管理这个并将存储过程授予用户。然后,你可以在过程中创建数据库并将所有上述权限授予用户。