【问题标题】:MySQL 8.0.18 all privileges on a database for role doesn't allow user to create the databaseMySQL 8.0.18 角色数据库的所有权限不允许用户创建数据库
【发布时间】:2020-06-21 05:47:41
【问题描述】:

我使用角色来授予我的 MySQL 用户。我注意到在向用户授予角色时在任何地方都找不到记录的奇怪行为。让我带你了解一下。

首先,我们创建一个实际用户joe@localhost,并授予它在joe_db 上的所有权限。虽然我在代码中省略了第二步,但我在这里用它来说明这种行为是多么出乎意料。 ($ mysql 以 root 身份登录)。

$ mysql
mysql> CREATE USER 'joe'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'joe'@'localhost' IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT ALL ON `joe_db`.* TO 'joe'@'localhost';
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> exit
Bye

现在,为了消除其他问题,我以 joe@localhost 身份登录并断言我的赠款确实有效。

$ mysql -ujoe -p1234 -hlocalhost
mysql> CREATE DATABASE `joe_db`;
Query OK, 1 row affected (0.01 sec)
mysql> DROP DATABASE `joe_db`;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye

现在让我们再次以 root 身份登录并创建一个新角色joe_role。我们为这个角色授予与joe@localhost 相同的权限。然后我们将joe_role 授予joe

$ mysql
mysql> CREATE ROLE 'joe_role';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL ON `joe_db`.* TO `joe_role`;
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT `joe_role` TO `joe`@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye

让我们再次以joe 登录并激活joe_role。这样做会阻止我们创建数据库。这种行为是我所质疑的。 这是预期的吗?有没有办法为有权创建joe_db 而无需授予全局权限的用户创建角色?

$ mysql -ujoe -p1234 -hlocalhost
mysql> SET ROLE `joe_role`;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE DATABASE `joe_db`;
ERROR 1044 (42000): Access denied for user 'joe'@'localhost' to database 'joe_db'

为了消除其他问题,让我们看看当我们将joe权限设置为全局时会发生什么。

mysql> exit
Bye
$ mysql
mysql> GRANT ALL ON *.* to `joe_role`;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
$ mysql -ujoe -p1234 -hlocalhost
mysql> CREATE DATABASE `joe_db`;
Query OK, 1 row affected (0.01 sec)

它再次工作。撤销该角色也使其再次工作。显然两者都不是解决方案。

总结一下: 我做错了什么,或者我如何误解了正在发生的角色概念?

我使用this MySQL 8.0.18 image

【问题讨论】:

    标签: mysql authorization


    【解决方案1】:

    与用户具有相同权限的角色在分配给用户时会阻止他们创建数据库。用户或角色的全局授权 (*.*) 不会发生这种情况,数据库的 SELECT 权限也不会发生这种情况。只有CREATE 权限会表现出这种行为。根据this thread,这是预期的行为。

    编辑:已确认这是一个错误,并已在 8.0.22 中修复。

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 1970-01-01
      • 2014-01-20
      • 2011-07-14
      • 2020-10-05
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多