mysql:具有授予选项和通配符的数据库特定的用户权限委派

时间:2018-08-01 14:56:00

标签: mysql

我想拥有一个非root用户的mysql用户,该用户可以创建另一个数据库和用户,并向该用户授予对创建数据库的访问权限。要以 root 身份执行此操作,我首先创建了一个用户

CREATE USER asusi_admin@localhost IDENTIFIED BY '123';

然后我将创建用户PRIVILEGE授予该用户

GRANT CREATE USER ON *.* TO 'asusi_admin'@localhost';

然后,我向该用户授予他创建的每个数据库的所有特权

GRANT ALL PRIVILEGES ON `asusi\_%`.* TO 'asusi_admin'@'localhost WITH GRANT OPTION;

现在我正在刷新权限

 FLUSH PRIVILEGES;

现在,我以新创建的用户 asusi_admin 登录到MySQL,并创建一个新数据库

现在我要创建一个新数据库

 CREATE DATABASE asusi_database;

现在我正在检查是否可以使用该数据库

 USE asusi_database;

我可以使用这个数据库,很好

现在我要创建一个新用户

CREATE USER 'asusi_user'@'localhost' IDENTIFIED '123';

现在我要授予创建用户的选择特权

GRANT select on `asusi_database`.* 'asusi_user'@'localhost'

在这里我得到一个错误:'拒绝用户'asusi_admin'@'localhost'访问数据库'asusi_superdb'

我应该以身份重新登录,并明确授予 asusi_user

对此数据库的访问权限
GRANT ALL PRIVILEGES ON `asusi_database`.* TO 'asusi_admin'@'localhost WITH GRANT OPTION; 

,然后以 asusi_admin 重新登录并再次运行命令

GRANT select on `asusi_database`.* 'asusi_user'@'localhost'

这次没有错误,用户 asusi_user 可以读取数据库 asusi_database 。显然,MySQL希望我通过 root 帐户为每个创建的数据库显式授予对用户 asusi_admin 的访问权限。但是我不想使用 root 帐户。我以为执行此命令后

GRANT ALL PRIVILEGES ON `asusi\_%`.* TO 'asusi_admin'@'localhost WITH GRANT OPTION;

用户 asusi_admin 将能够向其他用户授予对以“ asusi_”前缀进行统计的ecery数据库的访问权限。可能是我错过了一些东西,还是设计了这种行为?

1 个答案:

答案 0 :(得分:0)

这似乎是一个已确认的错误,尚未修复https://bugs.mysql.com/bug.php?id=75097,因此您现在无法对其进行任何操作。