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

Posted

技术标签:

【中文标题】mysql:具有授予选项和通配符的数据库特定用户权限委托【英文标题】:mysql: database specific user permission delegation with grant option and wildcard 【发布时间】:2018-08-01 14:55:59 【问题描述】:

我希望有一个非 root mysql 用户,该用户可以创建另一个数据库和用户,并授予该用户对已创建数据库的访问权限。为此,我以 root 身份首先创建了一个用户

CREATE USER asusi_admin@localhost IDENTIFIED BY '123';

然后我将 create user 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'

在这里我收到一个错误:'Access denied for user 'asusi_admin'@'localhost' to database 'asusi_superdb'

我是否应该以 root 身份重新登录并明确授予 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】:

似乎这是一个已确认的错误,尚未修复 https://bugs.mysql.com/bug.php?id=75097,因此您现在无能为力。

【讨论】:

以上是关于mysql:具有授予选项和通配符的数据库特定用户权限委托的主要内容,如果未能解决你的问题,请参考以下文章

如何授予用户角色具有授予选项的权限?

MySql 授予用户权限

MySQL用户管理

mysql 用户管理

将数据库下的所有 MySQL 用户定义函数授予/允许用户

授予 PostgreSQL 中特定数据库的权限