暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 8.0 使用角色授权给用户,无法登录

原创 Asher.Hu 2022-10-18
561

[[toc]]

适用范围

mysql 8.0

问题概述

在生产环境中,为了方便管理权限,通常会使用权限! 但在mysql 中同样的权限,直接授权给用户,用户可以登录使用! 而如果把权限授权给角色,在把角色授权给用户,用户却不能登录!

mysql>         show grants for  matomo_admin ;
+-----------------------------------------------------+
| Grants for matomo_admin@%                           |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO `matomo_admin`@`%`            |
| GRANT `matomo_admin_role`@`%` TO `matomo_admin`@`%` |
+-----------------------------------------------------+
2 rows in set (0.00 sec)

mysql>         show grants for  matomo_admin_role ;
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for matomo_admin_role@%                                                                                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT PROCESS, CREATE USER ON *.* TO `matomo_admin_role`@`%`                                                                                                                                                                  |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, TRIGGER ON `matomo`.* TO `matomo_admin_role`@`%` WITH GRANT OPTION |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

#指定数据库无法登录 
[root@S2AVDXCOMSDB01 run]# mysql -umatomo_admin -p"matomo_Admin.3312" -h172.18.190.84 -P3312 -D matomo
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1044 (42000): Access denied for user 'matomo_admin'@'%' to database 'matomo'

问题原因

这是因为当您向用户帐户授予角色时,并不会在用户帐户连接到数据库服务器时自动使角色变为活动状态。
如果您调用该 CURRENT_ROLE() 函数,它将返回 NONE ,这意味着没有活动角色。

mysql> SELECT current_role();
+----------------+
| current_role() |
+----------------+
| NONE           |
+----------------+
1 row in set (0.00 sec)

解决方案

  1. 需要指定每次用户帐户连接到数据库服务器时应激活哪些角色,请使用该 SET DEFAULT ROLE 语句。
    以下语句为 matomo_admin@’%’ 帐户的所有分配角色设置默认值。
SET DEFAULT ROLE ALL TO  matomo_admin@'%';

mysql> select CURRENT_ROLE()  ;
+-------------------------+
| CURRENT_ROLE()          |
+-------------------------+
| `matomo_admin_role`@`%` |
+-------------------------+
1 row in set (0.00 sec)

2.定义强制角色

[mysqld]
mandatory_roles='role1,role2@localhost,matomo_admin_role@%'

然后重启DB

3.用户登录服务器时是否启用自动激活所有授予的角色,这优先于用 指定的默认角色SET DEFAULT ROLE。

[mysqld]
activate_all_roles_on_login=ON

然后重启DB

参考文档

https://dev.mysql.com/doc/refman/8.0/en/set-default-role.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论