Mysql

MySQL 8 個角色 - 我可能遺漏了一些明顯的東西

  • July 31, 2019

我正在嘗試在 MySQL 8 中使用角色,但失敗了。我已經閱讀了文件,據我所知,我做得對。由於這是一個“hello world”級別的嘗試,我認為我遺漏了一些非常明顯的東西,但我無法弄清楚。任何幫助將不勝感激。

這就是我想要做的。

CREATE USER 'reader'@'localhost' IDENTIFIED BY 'reader_password';

CREATE ROLE 'read_all';

GRANT SELECT ON MySchema.* TO 'read_all';

GRANT 'read_all' TO 'reader'@'localhost';

上面的腳本是用root使用者執行的,所有的語句都成功了。

然後,我使用“讀者”使用者憑據打開一個新連接,並成功連接。但是,任何從 MySchema 中的任何表中進行 SELECT 的嘗試都會被拒絕並顯示錯誤消息:

SELECT * FROM MySchema.SomeTable;

SQL Error [1142] [42000]: SELECT command denied to user 'reader'@'localhost' for table 'SomeTable'

我希望這個 SELECT 能夠成功,因為該角色具有 SELECT 權限,並且讀者使用者已被授予該角色。我錯過了什麼?

週末愉快!


**更新:**根據 Rick James 的評論,以下是相關的節目:

在根連接上(使用活動模式上下文“MySchema”):

SHOW CREATE USER 'reader'@'localhost';
--------------------------------------
CREATE USER 'reader'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*96B291A4F8FC2B6C453E4C54AD2080751B0D4712' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT

SHOW CREATE USER 'read_all';
----------------------------
CREATE USER 'read_all'@'%' IDENTIFIED WITH 'mysql_native_password' REQUIRE NONE PASSWORD EXPIRE ACCOUNT LOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT

SHOW GRANTS FOR 'reader'@'localhost';
-------------------------------------
GRANT USAGE ON *.* TO `reader`@`localhost`  
GRANT `read_all`@`%` TO `reader`@`localhost`

SHOW GRANTS FOR 'read_all';
----------------------------
GRANT USAGE ON *.* TO `read_all`@`%`         
GRANT SELECT ON `MySchema`.* TO `read_all`@`%

在閱讀器連接上:

SHOW GRANTS;
------------
GRANT USAGE ON *.* TO `reader`@`localhost`  
GRANT `read_all`@`%` TO `reader`@`localhost`

因此,在深入研究文件,特別是“使用角色”頁面之後,我發現:“預設情況下,將角色授予帳戶或在mandatory_roles 系統變數值中命名它不會自動導致角色變為活動狀態在帳戶會話中…要指定每次使用者連接到伺服器並進行身份驗證時應啟動哪些角色,請使用 SET DEFAULT ROLE。 "

引用自:https://dba.stackexchange.com/questions/243375