Mysql
MySQL 8 個角色 - 我可能遺漏了一些明顯的東西
我正在嘗試在 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。 "