授予 MySQL 帳戶的權限決定了該帳戶可以執行的操作。MySQL 權限在它們適用的內容以及不同的操作層級上有所不同
管理權限可讓使用者管理 MySQL 伺服器的操作。這些權限是全域性的,因為它們不是特定於特定資料庫。
資料庫權限適用於資料庫及其中的所有物件。這些權限可以針對特定資料庫授與,也可以全域授與,使其適用於所有資料庫。
資料庫物件 (例如資料表、索引、檢視和預存常式) 的權限可以針對資料庫內的特定物件、資料庫內特定類型的所有物件 (例如,資料庫中的所有資料表) 或全域中所有資料庫中給定類型的所有物件授與。
權限在它們是靜態 (內建於伺服器) 還是動態 (在執行階段定義) 方面也有所不同。權限是靜態還是動態會影響其授與使用者帳戶和角色的可用性。如需靜態和動態權限之間差異的相關資訊,請參閱靜態與動態權限。)
關於帳戶權限的資訊儲存在 mysql 系統資料庫中的授權表中。如需這些資料表的結構和內容說明,請參閱第 8.2.3 節「授權表」。MySQL 伺服器會在啟動時將授權表的內容讀取到記憶體中,並在第 8.2.13 節「權限變更何時生效」中指示的情況下重新載入。伺服器會根據授權表的記憶體複本做出存取控制決策。
某些 MySQL 版本會對授權表進行變更,以新增新的權限或功能。為了確保您可以利用任何新功能,請在每次升級 MySQL 時,將您的授權表更新為目前的結構。請參閱第 3 章升級 MySQL。
以下各節概述了可用的權限,提供了每個權限的更詳細說明,並提供了使用指南。
下表顯示 GRANT 和 REVOKE 陳述式中使用的靜態權限名稱,以及授權表中與每個權限關聯的資料行名稱和權限適用的內容。
表 8.2 GRANT 和 REVOKE 的允許靜態權限
| 權限 | 授權表資料行 | 內容 |
|---|---|---|
ALL [PRIVILEGES] |
「所有權限」的同義詞 | 伺服器管理 |
ALTER |
Alter_priv |
資料表 |
ALTER ROUTINE |
Alter_routine_priv |
預存常式 |
CREATE |
Create_priv |
資料庫、資料表或索引 |
CREATE ROLE |
Create_role_priv |
伺服器管理 |
CREATE ROUTINE |
Create_routine_priv |
預存常式 |
CREATE TABLESPACE |
Create_tablespace_priv |
伺服器管理 |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
資料表 |
CREATE USER |
Create_user_priv |
伺服器管理 |
CREATE VIEW |
Create_view_priv |
檢視 |
DELETE |
Delete_priv |
資料表 |
DROP |
Drop_priv |
資料庫、資料表或檢視 |
DROP ROLE |
Drop_role_priv |
伺服器管理 |
EVENT |
Event_priv |
資料庫 |
EXECUTE |
Execute_priv |
預存常式 |
FILE |
File_priv |
伺服器主機上的檔案存取權 |
GRANT OPTION |
Grant_priv |
資料庫、資料表或儲存程序 |
INDEX |
Index_priv |
資料表 |
INSERT |
Insert_priv |
資料表或欄位 |
LOCK TABLES |
Lock_tables_priv |
資料庫 |
PROCESS |
Process_priv |
伺服器管理 |
PROXY |
請參閱 proxies_priv 表格 |
伺服器管理 |
REFERENCES |
References_priv |
資料庫或資料表 |
RELOAD |
Reload_priv |
伺服器管理 |
REPLICATION CLIENT |
Repl_client_priv |
伺服器管理 |
REPLICATION SLAVE |
Repl_slave_priv |
伺服器管理 |
SELECT |
Select_priv |
資料表或欄位 |
SHOW DATABASES |
Show_db_priv |
伺服器管理 |
SHOW VIEW |
Show_view_priv |
檢視 |
SHUTDOWN |
Shutdown_priv |
伺服器管理 |
SUPER |
Super_priv |
伺服器管理 |
TRIGGER |
Trigger_priv |
資料表 |
UPDATE |
Update_priv |
資料表或欄位 |
USAGE |
與「沒有權限」同義 | 伺服器管理 |
下表顯示 GRANT 和 REVOKE 陳述式中使用的動態權限名稱,以及權限適用的內容。
表 8.3:GRANT 和 REVOKE 的允許動態權限
靜態權限是內建於伺服器中的,與在執行階段定義的動態權限不同。以下清單描述 MySQL 中可用的每個靜態權限。
特定的 SQL 陳述式可能會有比此處所指示的更具體的權限要求。如果是這樣,相關陳述式的描述會提供詳細資訊。
這些權限指定詞是「在給定權限層級可用的所有權限」的簡寫(除了
GRANT OPTION之外)。例如,在全域或資料表層級授與ALL,會分別授與所有全域權限或所有資料表層級權限。啟用使用
ALTER TABLE陳述式來變更資料表的結構。ALTER TABLE也需要CREATE和INSERT權限。重新命名資料表需要對舊資料表具有ALTER和DROP權限,對新資料表具有CREATE和INSERT權限。啟用使用會變更或捨棄儲存程序(儲存程序和函數)的陳述式。對於落在授與權限範圍內且使用者不是指定為程序
DEFINER的使用者的程序,也啟用存取程序定義以外的程序屬性。啟用使用會建立新資料庫和資料表的陳述式。
啟用使用
CREATE ROLE陳述式。(CREATE USER權限也會啟用使用CREATE ROLE陳述式。)請參閱 第 8.2.10 節,「使用角色」。CREATE ROLE和DROP ROLE權限沒有CREATE USER強大,因為它們只能用來建立和捨棄帳戶。它們不能像CREATE USER一樣修改帳戶屬性或重新命名帳戶。請參閱 使用者和角色可互換性。啟用使用會建立儲存程序(儲存程序和函數)的陳述式。對於落在授與權限範圍內且使用者不是指定為程序
DEFINER的使用者的程序,也啟用存取程序定義以外的程序屬性。啟用使用會建立、變更或捨棄資料表空間和記錄檔群組的陳述式。
啟用使用
CREATE TEMPORARY TABLE陳述式建立暫時資料表。在工作階段建立暫時資料表後,伺服器不會對該資料表執行進一步的權限檢查。建立的工作階段可以對資料表執行任何操作,例如
DROP TABLE、INSERT、UPDATE或SELECT。如需詳細資訊,請參閱第 15.1.20.2 節,「CREATE TEMPORARY TABLE 陳述式」。啟用使用
ALTER USER、CREATE ROLE、CREATE USER、DROP ROLE、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES陳述式。啟用使用
CREATE VIEW陳述式。啟用從資料庫中的資料表刪除資料列。
啟用使用會捨棄(移除)現有資料庫、資料表和檢視表的陳述式。在已分割的資料表上使用
ALTER TABLE ... DROP PARTITION陳述式時需要DROP權限。TRUNCATE TABLE也需要DROP權限。啟用使用
DROP ROLE陳述式。(CREATE USER權限也會啟用使用DROP ROLE陳述式。)請參閱 第 8.2.10 節,「使用角色」。CREATE ROLE和DROP ROLE權限沒有CREATE USER強大,因為它們只能用來建立和捨棄帳戶。它們不能像CREATE USER一樣修改帳戶屬性或重新命名帳戶。請參閱 使用者和角色可互換性。啟用使用會建立、變更、捨棄或顯示事件排程器的事件的陳述式。
啟用使用會執行儲存程序(儲存程序和函數)的陳述式。對於落在授與權限範圍內且使用者不是指定為程序
DEFINER的使用者的程序,也啟用存取程序定義以外的程序屬性。影響下列操作和伺服器行為
啟用使用
LOAD DATA和SELECT ... INTO OUTFILE陳述式以及LOAD_FILE()函數,在伺服器主機上讀取和寫入檔案。具有FILE權限的使用者可以讀取伺服器主機上任何全域可讀取或 MySQL 伺服器可讀取的檔案。(這表示使用者可以讀取任何資料庫目錄中的任何檔案,因為伺服器可以存取這些檔案的任何一個。)允許在 MySQL 伺服器具有寫入權限的任何目錄中建立新檔案。這包括伺服器的資料目錄,其中包含實作權限表的檔案。
允許在
CREATE TABLE陳述式中使用DATA DIRECTORY或INDEX DIRECTORY表格選項。
作為一項安全措施,伺服器不會覆寫現有檔案。
若要限制可以讀取和寫入檔案的位置,請將
secure_file_priv系統變數設定為特定目錄。請參閱第 7.1.8 節「伺服器系統變數」。允許您授予或撤銷其他使用者您自己擁有的權限。
允許使用建立或刪除 (移除) 索引的陳述式。
INDEX適用於現有表格。如果您對表格擁有CREATE權限,則可以在CREATE TABLE陳述式中包含索引定義。允許將資料列插入資料庫中的表格。
INSERT也用於ANALYZE TABLE、OPTIMIZE TABLE和REPAIR TABLE表格維護陳述式。允許使用明確的
LOCK TABLES陳述式來鎖定您擁有SELECT權限的表格。這包括使用寫入鎖定,這會阻止其他連線讀取已鎖定的表格。PROCESS權限控制對伺服器內執行緒相關資訊的存取 (也就是,連線正在執行的陳述式相關資訊)。可以使用SHOW PROCESSLIST陳述式、mysqladmin processlist 命令、Information SchemaPROCESSLIST表格和 Performance Schemaprocesslist表格來存取執行緒資訊,如下所示:注意Performance Schema
threads表格也提供執行緒資訊,但表格存取使用不同的權限模型。請參閱第 29.12.22.8 節「threads 表格」。PROCESS權限也允許使用SHOW ENGINE陳述式、存取INFORMATION_SCHEMAInnoDB表格 (名稱以INNODB_開頭的表格) 以及存取INFORMATION_SCHEMAFILES表格。允許一位使用者模擬或成為另一位使用者。請參閱第 8.2.19 節「Proxy 使用者」。
建立外來索引鍵約束需要父表格的
REFERENCES權限。RELOAD允許執行下列操作:使用
FLUSH陳述式。使用 mysqladmin 命令,這些命令等同於
FLUSH操作:flush-hosts、flush-logs、flush-privileges、flush-status、flush-tables、refresh和reload。reload命令會指示伺服器將授權表格重新載入記憶體。flush-privileges是reload的同義字。refresh命令會關閉並重新開啟記錄檔,並刷新所有表格。其他flush-命令會執行與xxxrefresh類似的功能,但更具體,在某些情況下可能更合適。例如,如果您只想刷新記錄檔,flush-logs會是比refresh更好的選擇。使用 mysqldump 選項,這些選項會執行各種
FLUSH操作:--flush-logs和--source-data。使用
RESET BINARY LOGS AND GTIDS和RESET REPLICA陳述式。
允許使用
SHOW BINARY LOG STATUS、SHOW REPLICA STATUS和SHOW BINARY LOGS陳述式。允許帳戶使用
SHOW REPLICAS、SHOW RELAYLOG EVENTS和SHOW BINLOG EVENTS陳述式來請求對複寫來源伺服器上資料庫所做的更新。使用 mysqlbinlog 選項--read-from-remote-server(-R) 和--read-from-remote-source也需要此權限。將此權限授予複本用來連接到目前伺服器作為其複寫來源伺服器的帳戶。允許從資料庫中的表格選取資料列。
SELECT陳述式只有在實際存取表格時才需要SELECT權限。某些SELECT陳述式不存取表格,並且可以在沒有任何資料庫權限的情況下執行。例如,您可以使用SELECT作為簡單的計算機,來評估未參考表格的運算式。SELECT 1+1; SELECT PI()*2;其他讀取欄位值的陳述式也需要
SELECT權限。例如,在UPDATE陳述式中,col_name=expr指派的右手邊所參考的欄位或DELETE或UPDATE陳述式的WHERE子句中所命名的欄位,都需要SELECT權限。允許帳戶透過發出
SHOW DATABASE陳述式來查看資料庫名稱。沒有此權限的帳戶只會看到他們擁有某些權限的資料庫,如果伺服器啟動時使用了--skip-show-database選項,則完全無法使用該陳述式。注意由於任何靜態全域權限都被視為適用於所有資料庫的權限,因此任何靜態全域權限都允許使用者透過
SHOW DATABASES或檢視INFORMATION_SCHEMA的SCHEMATA資料表來查看所有資料庫名稱,但部分撤銷在資料庫層級受到限制的資料庫除外。啟用
SHOW CREATE VIEW陳述式的使用。此權限對於與EXPLAIN一起使用的檢視也屬必要。啟用
SHUTDOWN和RESTART陳述式、mysqladmin shutdown 命令以及mysql_shutdown()C API 函式的使用。SUPER是一個功能強大且影響深遠的權限,不應輕易授予。如果帳戶只需要執行SUPER作業的子集,則可以透過授予一個或多個動態權限來達成所需的權限組合,每個權限都授予更有限的功能。請參閱動態權限說明。注意SUPER已被棄用,您應該預期它會在未來版本的 MySQL 中移除。請參閱將帳戶從 SUPER 遷移至動態權限。SUPER會影響下列作業和伺服器行為啟用執行階段的系統變數變更
啟用使用
SET GLOBAL和SET PERSIST對全域系統變數進行伺服器組態變更。對應的動態權限為
SYSTEM_VARIABLES_ADMIN。啟用設定需要特殊權限的受限工作階段系統變數。
對應的動態權限為
SESSION_VARIABLES_ADMIN。
另請參閱第 7.1.9.1 節〈系統變數權限〉。
啟用全域交易特性的變更 (請參閱第 15.3.7 節〈SET TRANSACTION 陳述式〉)。
對應的動態權限為
SYSTEM_VARIABLES_ADMIN。啟用帳戶啟動和停止複寫,包括群組複寫。
對應的動態權限,正規複寫為
REPLICATION_SLAVE_ADMIN,群組複寫為GROUP_REPLICATION_ADMIN。啟用
CHANGE REPLICATION SOURCE TO和CHANGE REPLICATION FILTER陳述式的使用。對應的動態權限為
REPLICATION_SLAVE_ADMIN。透過
PURGE BINARY LOGS和BINLOG陳述式啟用二進位記錄檔控制。對應的動態權限為
BINLOG_ADMIN。啟用執行檢視或預存程式時設定生效授權 ID。具有此權限的使用者可以在檢視或預存程式的
DEFINER屬性中指定任何帳戶。對應的動態權限為
SET_ANY_DEFINER和ALLOW_NONEXISTENT_DEFINER。啟用
CREATE SERVER、ALTER SERVER和DROP SERVER陳述式的使用。啟用 mysqladmin debug 命令的使用。
啟用
InnoDB加密金鑰輪換。對應的動態權限為
ENCRYPTION_KEY_ADMIN。啟用版本權杖函式的執行。
對應的動態權限為
VERSION_TOKEN_ADMIN。啟用角色授予和撤銷,
GRANT陳述式的WITH ADMIN OPTION子句使用,以及來自ROLES_GRAPHML()函式結果中的非空白<graphml>元素內容。對應的動態權限為
ROLE_ADMIN。啟用對非
SUPER帳戶不允許的用戶端連線進行控制啟用
KILL陳述式或 mysqladmin kill 命令的使用,以終止屬於其他帳戶的執行緒。(帳戶永遠可以終止自己的執行緒。)當
SUPER用戶端連線時,伺服器不會執行init_connect系統變數內容。即使達到
max_connections系統變數所設定的連線限制,伺服器也會接受來自SUPER用戶端的一個連線。離線模式中的伺服器 (已啟用
offline_mode) 不會在下一個用戶端請求時終止SUPER用戶端連線,並接受來自SUPER用戶端的新連線。即使已啟用
read_only系統變數,也可以執行更新。這適用於明確的資料表更新,以及使用隱含更新資料表的帳戶管理陳述式,例如GRANT和REVOKE。
前面連線控制作業的對應動態權限為
CONNECTION_ADMIN。
如果已啟用二進位記錄,您可能還需要
SUPER權限來建立或變更預存函式,如第 27.8 節〈預存程式二進位記錄〉所述。啟用觸發程序作業。您必須擁有資料表的此權限,才能建立、刪除、執行或顯示該資料表的觸發程序。
當觸發程序被啟用時 (由具有執行與觸發程序相關聯的資料表之
INSERT、UPDATE或DELETE陳述式權限的使用者),觸發程序執行要求定義觸發程序的使用者仍具有資料表的TRIGGER權限。啟用更新資料庫中資料表中的列。
此權限規範代表「沒有權限。」它會在全域層級與
GRANT一起使用,以指定諸如WITH GRANT OPTION之類的子句,而不在權限清單中命名特定帳戶權限。SHOW GRANTS顯示USAGE以指出帳戶在權限層級沒有權限。
動態權限是在執行階段定義的,與內建於伺服器中的靜態權限相反。以下清單說明 MySQL 中可用的每個動態權限。
大多數動態權限是在伺服器啟動時定義的。其他則由特定的元件或外掛程式定義,如權限說明中所述。在這種情況下,除非啟用定義權限的元件或外掛程式,否則該權限將無法使用。
特定的 SQL 陳述式可能會有比此處所指示的更具體的權限要求。如果是這樣,相關陳述式的描述會提供詳細資訊。
啟用覆寫安全檢查,這些檢查旨在防止(可能在無意間)導致儲存的物件變成孤立,或導致採用目前已孤立的儲存物件。若無此權限,任何產生孤立 SQL 程序、函數或檢視表的嘗試都會導致錯誤。使用
CREATE PROCEDURE、CREATE FUNCTION、CREATE TRIGGER、CREATE EVENT或CREATE VIEW產生孤立物件的嘗試,除了ALLOW_NONEXISTENT_DEFINER之外,還需要SET_ANY_DEFINER,才能允許與目前使用者不同的定義者。詳細資訊,請參閱孤立的儲存物件。
針對雙密碼功能,此權限允許對您自己的帳戶使用
RETAIN CURRENT PASSWORD和DISCARD OLD PASSWORD子句的ALTER USER和SET PASSWORD語句。由於大多數使用者只需要一個密碼,因此需要此權限才能操作您自己的第二個密碼。如果要允許帳戶操作所有帳戶的第二個密碼,則應該授予其
CREATE USER權限,而不是APPLICATION_PASSWORD_ADMIN。有關雙密碼使用的更多資訊,請參閱第 8.2.15 節「密碼管理」。
允許稽核記錄篩選器中被 「abort」 項目封鎖的查詢。此權限由
audit_log外掛程式定義;請參閱第 8.4.5 節「MySQL Enterprise Audit」。使用
SYSTEM_USER權限建立的帳戶在建立時會自動指派AUDIT_ABORT_EXEMPT權限。如果您執行升級程序,且沒有現有帳戶已指派該權限,則也會將AUDIT_ABORT_EXEMPT權限指派給具有SYSTEM_USER權限的現有帳戶。因此,具有SYSTEM_USER權限的帳戶可用於在稽核錯誤組態後重新取得系統存取權。啟用稽核記錄組態。此權限由
audit_log外掛程式定義;請參閱第 8.4.5 節「MySQL Enterprise Audit」。啟用
LOCK INSTANCE FOR BACKUP語句的執行,並存取 Performance Schemalog_status資料表。注意除了
BACKUP_ADMIN之外,還需要對log_status資料表的SELECT權限,才能存取該資料表。從較早版本就地升級至 MySQL 9.0 時,具有
RELOAD權限的使用者會自動被授予BACKUP_ADMIN權限。authentication_policy系統變數對CREATE USER和ALTER USER語句的驗證相關子句的使用方式施加某些限制。具有AUTHENTICATION_POLICY_ADMIN權限的使用者不受這些限制的約束。(對於其他情況下不允許的語句,會出現警告。)有關
authentication_policy強加的限制的詳細資訊,請參閱該變數的描述。透過
PURGE BINARY LOGS和BINLOG陳述式啟用二進位記錄檔控制。啟用設定系統變數
binlog_encryption,此變數會啟動或停用二進位記錄檔和中繼記錄檔的加密。此功能不是由BINLOG_ADMIN、SYSTEM_VARIABLES_ADMIN或SESSION_VARIABLES_ADMIN權限提供。相關的系統變數binlog_rotate_encryption_master_key_at_startup會在伺服器重新啟動時自動輪換二進位記錄主金鑰,不需要此權限。啟用
CLONE語句的執行。包含BACKUP_ADMIN和SHUTDOWN權限。啟用
KILL陳述式或 mysqladmin kill 命令的使用,以終止屬於其他帳戶的執行緒。(帳戶永遠可以終止自己的執行緒。)啟用設定與用戶端連線相關的系統變數,或規避與用戶端連線相關的限制。需要
CONNECTION_ADMIN才能啟動 MySQL 伺服器的離線模式,這可以透過將offline_mode系統變數的值變更為ON來完成。CONNECTION_ADMIN權限啟用具有該權限的管理員,以繞過這些系統變數的影響init_connect:當CONNECTION_ADMIN用戶端連線時,伺服器不會執行init_connect系統變數內容。max_connections:即使達到max_connections系統變數設定的連線限制,伺服器也會接受來自CONNECTION_ADMIN用戶端的一個連線。offline_mode:處於離線模式(啟用offline_mode)的伺服器不會在下一個用戶端請求時終止CONNECTION_ADMIN用戶端連線,並接受來自CONNECTION_ADMIN用戶端的新連線。read_only:即使啟用read_only系統變數,也可以執行來自CONNECTION_ADMIN用戶端的更新。這適用於明確的資料表更新,以及隱式更新資料表的帳戶管理語句,例如GRANT和REVOKE。
群組複寫群組成員需要
CONNECTION_ADMIN權限,如此一來,如果其中一個相關的伺服器置於離線模式,則不會終止群組複寫連線。如果正在使用 MySQL 通訊堆疊 (group_replication_communication_stack = MYSQL),則沒有此權限,置於離線模式的成員會從群組中移除。啟用
InnoDB加密金鑰輪換。啟用使用者管理任何使用者的防火牆規則。此權限由
MYSQL_FIREWALL外掛程式定義;請參閱第 8.4.7 節「MySQL Enterprise Firewall」。具有此權限的使用者不受防火牆限制的約束。此權限由
MYSQL_FIREWALL外掛程式定義;請參閱第 8.4.7 節「MySQL Enterprise Firewall」。啟用使用者更新自己的防火牆規則。此權限由
MYSQL_FIREWALL外掛程式定義;請參閱第 8.4.7 節「MySQL Enterprise Firewall」。啟用
FLUSH OPTIMIZER_COSTS語句的使用。啟用
FLUSH PRIVILEGES語句的使用。啟用
FLUSH STATUS語句的使用。啟用
FLUSH TABLES語句的使用。啟用
FLUSH USER_RESOURCES語句的使用。啟用帳戶使用
START GROUP REPLICATION和STOP GROUP REPLICATION語句來啟動和停止群組複寫,以變更group_replication_consistency系統變數的全域設定,並使用group_replication_set_write_concurrency()和group_replication_set_communication_protocol()函數。將此權限授予用於管理作為複寫群組成員的伺服器的帳戶。允許使用者帳戶用於建立群組複寫的群組通訊連線。當 MySQL 通訊堆疊用於群組複寫時 (
group_replication_communication_stack=MYSQL),必須將此權限授予恢復使用者。啟用帳戶啟動和停用重做日誌歸檔。
允許使用
ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO_LOG語句來啟用或停用重做日誌記錄。請參閱 停用重做日誌記錄。
啟用帳戶使用
masking_dictionary_term_add()和masking_dictionary_term_remove()元件函數來新增和移除字典詞彙。帳戶也需要此動態權限才能使用masking_dictionary_remove()函數來移除完整字典,該函數會移除目前在mysql.masking_dictionaries表格中與具名字典相關聯的所有詞彙。啟用使用者或角色及其權限在所有啟用
NDB的 MySQL 伺服器加入給定的 NDB 集群後立即共用和同步。只有在啟用NDB儲存引擎時,此權限才可用。對給定使用者或角色所做的任何權限變更或撤銷都會立即與所有連線的 MySQL 伺服器 (SQL 節點) 同步。您應該了解,無法保證來自不同 SQL 節點的多個影響權限的語句會以相同的順序在所有 SQL 節點上執行。因此,強烈建議從單一指定的 SQL 節點完成所有使用者管理。
NDB_STORED_USER是一項全域權限,必須使用ON *.*授予或撤銷。嘗試為此權限設定任何其他範圍都會導致錯誤。此權限可以授予大多數應用程式和管理使用者,但不能授予系統保留帳戶,例如mysql.session@localhost或mysql.infoschema@localhost。已授予
NDB_STORED_USER權限的使用者會儲存在NDB中 (因此由所有 SQL 節點共用),具有此權限的角色也是如此。僅被授予具有NDB_STORED_USER的角色的使用者不會儲存在NDB中;每個NDB儲存的使用者都必須明確授予此權限。如需有關這在
NDB中如何運作的詳細資訊,請參閱 第 25.6.13 節,「權限同步和 NDB_STORED_USER」。允許使用
OPTIMIZE LOCAL TABLE和OPTIMIZE NO_WRITE_TO_BINLOG TABLE語句。此權限適用於無密碼使用者帳戶。
對於帳戶建立,執行
CREATE USER來建立無密碼帳戶的使用者必須擁有PASSWORDLESS_USER_ADMIN權限。在複寫內容中,
PASSWORDLESS_USER_ADMIN權限適用於複寫使用者,並啟用對設定為無密碼驗證的使用者帳戶進行ALTER USER ... MODIFY語句的複寫。
如需有關無密碼驗證的資訊,請參閱 WebAuthn 無密碼驗證。
對於也擁有
SYSTEM_VARIABLES_ADMIN的使用者,PERSIST_RO_VARIABLES_ADMIN允許使用SET PERSIST_ONLY將全域系統變數持續保存到資料目錄中的mysqld-auto.cnf選項檔案。此語句與SET PERSIST類似,但不修改執行時間全域系統變數值。這使得SET PERSIST_ONLY適合用於設定只能在伺服器啟動時設定的唯讀系統變數。另請參閱第 7.1.9.1 節〈系統變數權限〉。
啟用帳戶作為複寫通道的
PRIVILEGE_CHECKS_USER,並在 mysqlbinlog 輸出中執行BINLOG語句。將此權限授予使用CHANGE REPLICATION SOURCE TO指派的帳戶,以提供複寫通道的安全內容,並處理這些通道上的複寫錯誤。除了REPLICATION_APPLIER權限之外,您還必須授予該帳戶執行複寫通道接收或 mysqlbinlog 輸出中包含的交易所需的權限,例如更新受影響的表格。如需詳細資訊,請參閱 第 19.3.3 節,「複寫權限檢查」。啟用帳戶連線到複寫來源伺服器,使用
START REPLICA和STOP REPLICA語句來啟動和停止複寫,並使用CHANGE REPLICATION SOURCE TO和CHANGE REPLICATION FILTER語句。將此權限授予複本用來連線到目前伺服器作為其複寫來源伺服器的帳戶。此權限不適用於群組複寫;請為此使用GROUP_REPLICATION_ADMIN。啟用資源群組管理,包括建立、變更和刪除資源群組,以及將執行緒和語句指派給資源群組。擁有此權限的使用者可以執行與資源群組相關的任何操作。
啟用將執行緒和語句指派給資源群組。擁有此權限的使用者可以使用
SET RESOURCE GROUP語句和RESOURCE_GROUP優化器提示。啟用授予和撤銷角色、使用
GRANT語句的WITH ADMIN OPTION子句,以及ROLES_GRAPHML()函數結果中非空的<graphml>元素內容。設定mandatory_roles系統變數的值時是必需的。允許持有者檢視 Performance Schema 表格中敏感的系統變數值,如
global_variables、session_variables、variables_by_thread和persisted_variables。可發出SELECT陳述式來傳回它們的值,並追蹤連線的 Session Tracker 中變更。沒有此權限的使用者無法檢視或追蹤這些系統變數值。請參閱持久化敏感系統變數。允許連線至僅允許管理連線的網路介面(請參閱第 7.1.12.1 節「連線介面」)。
對於大多數系統變數,設定 Session 值不需要特殊權限,任何使用者都可以執行以影響目前的 Session。對於某些系統變數,設定 Session 值可能會對目前 Session 之外產生影響,因此屬於受限操作。對於這些變數,
SESSION_VARIABLES_ADMIN權限允許使用者設定 Session 值。如果系統變數受到限制,且設定 Session 值需要特殊權限,則該變數的說明會指出該限制。範例包括
binlog_format、sql_log_bin和sql_log_off。SESSION_VARIABLES_ADMIN權限是SYSTEM_VARIABLES_ADMIN和SUPER權限的子集。擁有其中任何一個權限的使用者也被允許設定受限的 Session 變數,實際上具有SESSION_VARIABLES_ADMIN的隱含權限,不需要明確授予SESSION_VARIABLES_ADMIN。另請參閱第 7.1.9.1 節〈系統變數權限〉。
允許在執行檢視或儲存程式時設定有效授權 ID。具有此權限的使用者可以為
CREATE PROCEDURE、CREATE FUNCTION、CREATE TRIGGER、CREATE EVENT、ALTER EVENT、CREATE VIEW和ALTER VIEW指定任何帳戶為DEFINER屬性。沒有此權限,只能指定有效的驗證 ID。儲存程式會以指定帳戶的權限執行,因此請確保您遵循第 27.7 節「儲存物件存取控制」中列出的風險最小化準則。
允許使用者存取所有儲存常式(儲存程序和函式)的定義和屬性,即使使用者未被指定為常式的
DEFINER。此存取包括:Information Schema
ROUTINES表格的內容。
SHOW_ROUTINE可以作為具有更受限範圍的權限授予,允許存取常式定義。(也就是說,管理員可以撤銷不需要它的使用者的全域SELECT,並改為授予SHOW_ROUTINE。)這允許帳戶備份儲存常式,而不需要廣泛的權限。具有此權限的使用者發出的查詢不受
Rewriter外掛程式重寫(請參閱第 7.6.4 節「Rewriter 查詢重寫外掛程式」)。此權限應授予發出不應重寫的管理或控制陳述式的使用者,以及用於套用來自複寫來源的陳述式的
PRIVILEGE_CHECKS_USER帳戶(請參閱第 19.3.3 節「複寫權限檢查」)。SYSTEM_USER權限區分系統使用者和一般使用者。具有
SYSTEM_USER權限的使用者是系統使用者。沒有
SYSTEM_USER權限的使用者是一般使用者。
SYSTEM_USER權限會影響給定使用者可以將其其他權限套用至哪些帳戶,以及使用者是否受到其他帳戶的保護。系統使用者可以修改系統和一般帳戶。也就是說,具有對一般帳戶執行給定操作的適當權限的使用者,在擁有
SYSTEM_USER的情況下,也可以對系統帳戶執行該操作。只有具有適當權限的系統使用者才能修改系統帳戶,一般使用者則不能。具有適當權限的一般使用者可以修改一般帳戶,但不能修改系統帳戶。具有適當權限的系統和一般使用者都可以修改一般帳戶。
這也表示具有
SYSTEM_USER權限的使用者所建立的資料庫物件,不能由沒有此權限的使用者修改或刪除。這也適用於定義者具有此權限的常式。如需更多資訊,請參閱第 8.2.11 節「帳戶類別」。
SYSTEM_USER權限賦予系統帳戶的保護,使其免受一般帳戶修改,這不適用於對mysql系統綱要具有權限的一般帳戶,因此可以直接修改該綱要中的授權表格。為了獲得充分的保護,請勿授予一般帳戶mysql綱要權限。請參閱保護系統帳戶免受一般帳戶的操縱。如果正在使用
audit_log外掛程式(請參閱第 8.4.5 節「MySQL Enterprise Audit」),則具有SYSTEM_USER權限的帳戶會自動被指派AUDIT_ABORT_EXEMPT權限,這允許它們的查詢即使在篩選器中設定的 「中止」項目會阻止它們的情況下也能執行。因此,具有SYSTEM_USER權限的帳戶可用於在稽核錯誤設定後重新取得系統存取權。影響下列操作和伺服器行為
啟用執行階段的系統變數變更
啟用使用
SET GLOBAL和SET PERSIST對全域系統變數進行伺服器組態變更。如果使用者也具有
PERSIST_RO_VARIABLES_ADMIN,則允許伺服器透過SET PERSIST_ONLY變更全域系統變數的組態。允許設定需要特殊權限的受限 Session 系統變數。實際上,
SYSTEM_VARIABLES_ADMIN暗示SESSION_VARIABLES_ADMIN,而不需要明確授予SESSION_VARIABLES_ADMIN。
另請參閱第 7.1.9.1 節〈系統變數權限〉。
啟用全域交易特性的變更 (請參閱第 15.3.7 節〈SET TRANSACTION 陳述式〉)。
當
table_encryption_privilege_check啟用時,允許使用者覆寫預設的加密設定;請參閱為架構和一般表空間定義加密預設值。啟用遙測日誌設定。此權限由
telemetry_log外掛程式定義,該外掛程式透過 AWS 上的 HeatWave 部署。啟用以特權連線連接至伺服器。當達到
thread_pool_max_transactions_limit所定義的限制時,除非被thread_pool_longrun_trx_limit覆寫,否則不允許建立新的連線。特權連線會忽略交易限制,並允許連接至伺服器以提高交易限制、移除限制或終止正在執行的交易。預設情況下,此權限不會授予任何使用者。若要建立特權連線,發起連線的使用者必須擁有TP_CONNECTION_ADMIN權限。當達到
thread_pool_max_transactions_limit所定義的限制時,特權連線可以執行陳述式並開始交易。特權連線會放置在Admin線程群組中。請參閱特權連線。在複製來源伺服器上將
gtid_next系統變數設定為AUTOMATIC:或TAGUUID:時是必要的。此外,還需要至少TAG:NUMBERSYSTEM_VARIABLES_ADMIN、SESSION_VARIABLES_ADMIN或REPLICATION_APPLIER其中之一,才能在來源上將gtid_next設定為這些值之一。REPLICATION_CHECKS_APPLIER也必須擁有此權限以及REPLICATION_APPLIER權限,才能將gtid_next設定為AUTOMATIC:。這會在啟動複製套用程式線程時檢查。TAG設定
gtid_purged伺服器系統變數也需要此權限。如需有關使用標記 GTID 的詳細資訊,請參閱
gtid_next的說明,以及第 19.1.4 節,〈在線上伺服器上變更 GTID 模式〉。啟用版本 Token 函數的執行。此權限由
version_tokens外掛程式定義;請參閱第 7.6.6 節,〈版本 Token〉。啟用執行
XA RECOVER陳述式;請參閱第 15.3.8.1 節,〈XA 交易 SQL 陳述式〉。在 MySQL 9.0 之前,任何使用者都可以執行
XA RECOVER陳述式,以找出未完成的已準備 XA 交易的 XID 值,這可能會導致由啟動它的使用者以外的其他使用者認可或回滾 XA 交易。在 MySQL 9.0 中,XA RECOVER只允許具有XA_RECOVER_ADMIN權限的使用者使用,預期只會將此權限授予有需要使用的管理使用者。舉例來說,對於 XA 應用程式的管理員,如果應用程式崩潰且需要找出應用程式啟動的未完成交易以便可以回滾,這可能是適用的情況。此權限需求可防止使用者找出他們自己以外的其他未完成已準備 XA 交易的 XID 值。它不會影響 XA 交易的正常認可或回滾,因為啟動它的使用者知道其 XID。
只將帳戶需要的權限授予該帳戶是一個好主意。在授予 FILE 和管理權限時,您應特別謹慎。
FILE可能會被濫用,以將 MySQL 伺服器可以在伺服器主機上讀取的所有檔案讀取到資料庫表格中。這包括所有可世界讀取的檔案和伺服器資料目錄中的檔案。然後可以使用SELECT來存取該表格,以將其內容傳輸到用戶端主機。GRANT OPTION允許使用者將他們的權限授予其他使用者。兩個具有不同權限和GRANT OPTION權限的使用者可以合併權限。ALTER可能會被用來透過重新命名表格來顛覆權限系統。SHUTDOWN可能會被濫用,透過終止伺服器來完全拒絕其他使用者的服務。PROCESS可用於檢視目前正在執行的陳述式的純文字,包括設定或變更密碼的陳述式。SUPER可用於終止其他工作階段或變更伺服器的運作方式。針對
mysql系統資料庫本身授予的權限可用於變更密碼和其他存取權限資訊。
MySQL 支援靜態權限和動態權限。
靜態權限內建於伺服器中。它們始終可用於授予使用者帳戶,並且無法取消註冊。
動態權限可以在執行階段註冊和取消註冊。這會影響它們的可用性:尚未註冊的動態權限無法授予。
例如,SELECT 和 INSERT 權限是靜態的,而且始終可用,而動態權限只有在啟用實作它的元件時才會變成可用。
本節的其餘部分說明動態權限在 MySQL 中的運作方式。討論會使用「「元件」」一詞,但同樣適用於外掛程式。
伺服器管理員應注意哪些伺服器元件定義了動態權限。對於 MySQL 發行版本,定義動態權限的元件文件會說明這些權限。
第三方元件也可能定義動態權限;管理員應了解這些權限,且不應安裝可能與伺服器運作衝突或損害伺服器運作的元件。例如,如果兩個元件都定義了同名的權限,則一個元件會與另一個元件衝突。元件開發人員可以透過選擇具有基於元件名稱的前置詞的權限名稱來降低這種情況發生的可能性。
伺服器會在內部記憶體中維護已註冊動態權限的集合。取消註冊會在伺服器關閉時發生。
通常,定義動態權限的元件會在安裝時(在其初始化順序期間)註冊它們。當解除安裝時,元件不會取消註冊其已註冊的動態權限。(這是目前的做法,而不是要求。也就是說,元件可以隨時取消註冊它們註冊的權限,但實際上並不會這樣做。)
嘗試註冊已註冊的動態權限時,不會發生警告或錯誤。請考慮以下陳述式順序
INSTALL COMPONENT 'my_component';
UNINSTALL COMPONENT 'my_component';
INSTALL COMPONENT 'my_component';第一個 INSTALL COMPONENT 陳述式會註冊元件 my_component 定義的任何權限,但 UNINSTALL COMPONENT 不會取消註冊它們。對於第二個 INSTALL COMPONENT 陳述式,它註冊的元件權限會發現已註冊,但不會發生警告或錯誤。
動態權限僅適用於全域層級。伺服器會將動態權限目前指派給使用者帳戶的相關資訊儲存在 mysql.global_grants 系統表格中。
伺服器會在伺服器啟動期間自動註冊
global_grants中命名的權限(除非給定--skip-grant-tables選項)。global_grants中列出的動態權限指派是持續性的。它們不會在伺服器關閉時移除。
範例:以下陳述式將控制複本(包括群組複寫)和修改系統變數所需的權限授予使用者 u1。
GRANT REPLICATION_SLAVE_ADMIN, GROUP_REPLICATION_ADMIN, BINLOG_ADMIN
ON *.* TO 'u1'@'localhost';授予的動態權限會出現在 SHOW GRANTS 陳述式和 INFORMATION_SCHEMA USER_PRIVILEGES 表格的輸出中。
對於全域層級的 GRANT 和 REVOKE,會針對目前已註冊的動態權限集檢查任何未被識別為靜態的具名權限,如果找到則會授予。否則,會發生錯誤,指出未知的權限識別碼。
對於 GRANT 和 REVOKE,全域層級 ALL [PRIVILEGES] 的含義包括所有靜態全域權限,以及所有目前已註冊的動態權限。
全域層級的
GRANT ALL會授予所有靜態全域權限和所有目前已註冊的動態權限。GRANT陳述式執行後註冊的動態權限不會追溯授予任何帳戶。全域層級的
REVOKE ALL會撤銷所有已授予的靜態全域權限和所有已授予的動態權限。
SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER';GRANT BINLOG_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'u1'@'localhost'; REVOKE SUPER ON *.* FROM 'u1'@'localhost';