授予 MySQL 用户创建数据库的能力,并且只允许他们访问这些数据库

授予 MySQL 用户创建数据库的能力,并且只允许他们访问这些数据库

是否可以授予 MySQL 用户创建新数据库的权限,以便他们拥有对其创建的数据库的完全访问权限(包括删除这些数据库的能力)。但除了他们自己创建的数据库之外,他们不应该对任何其他用户的数据库拥有任何权限。

实现此目的的 CREATE USER/GRANT 语法是什么?

解决方案:(按照约翰申64的回应)

假设你想要应用服务器用户能够创建和访问新的数据库。

  1. 作为,创建以下存储过程:
如果存在 CreateAppDB,则删除过程;
分隔符 //
创建过程 CreateAppDB(
    在 db_name VARCHAR(50))
开始
    -- 创建数据库

    SET @s = CONCAT('创建数据库', db_name);
    从@s 准备语句;
    执行语句;
    解除分配准备语句;

    -- 授予权限

    SET @s = CONCAT('GRANT ALL ON ', db_name, '.* TO appserver@localhost');
    从@s 准备语句;
    执行语句;
    解除分配准备语句;
结尾//
分隔符;
  1. 授予用户执行此过程的权限应用服务器
授予 appserver@localhost 在 CreateAppDB 上的执行权限;
  1. 登录身份应用服务器并执行此过程。例如,要创建一个名为
调用 CreateAppDB('foo');

用户应用服务器将对新创建的数据库拥有全部权限,包括删除它的能力,但将无法访问 MySQL 中的任何其他用户数据库。

答案1

虽然我知道 MySQL 中没有这样的 SQL 语句可以让你这样做,但你可以编写一个存储过程来管理这个并将存储过程授予用户。然后,你可以在过程中创建数据库并将所有上述权限授予用户。

相关内容