Mysql

如何在 MySQL 的單個查詢中向使用者授予對多個數據庫/表的權限?

  • December 11, 2021

我正在嘗試查詢 -

GRANT SELECT ON company.*, school.*, onlineshop.* TO user1@localhost;

我收到語法錯誤。

我可以使用 - 一個一個地授予權限 -

GRANT SELECT ON company.* TO user1@localhost;
GRANT SELECT ON school.* TO user1@localhost;
GRANT SELECT ON onlineshop.* TO user1@localhost;

那麼有沒有辦法在一個查詢中授予所有三個權限?

MySQL 8.0

您將使用CREATE ROLE. 接下來,您將執行GRANT SELECT ON db.*到您需要的所有數據庫的角色。(您只需執行一次。)

然後,您將角色授予使用者。

有關此範例,請參閱MySQL 文件。

MySQL 5.7 及之前版本

您可以為每個數據庫創建一個授權,就像您在問題中所做的那樣。或者原則上可以使用兩個 SQL 命令(參見Bill Karwin 的評論)。

您可以不使用 GRANT 語句直接作業系統表,但如果這樣做,則必須使用 FLUSH PRIVILEGES 使更改生效。

INSERT INTO mysql.db (user, host, db, select_priv) VALUES
('user1', 'localhost', 'company', 'Y'),
('user1', 'localhost', 'school', 'Y'),
('user1', 'localhost', 'onlineshop', 'Y')
ON DUPLICATE KEY SET select_priv = 'Y';

FLUSH PRIVILEGES;

如果該表中已經存在行,我將展示 ON DUPLICATE KEY 的用法。

從技術上講,這不是一條 SQL 語句,因為您需要使用 FLUSH PRIVILEGES。

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