文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式 Letter) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  系統變數權限

7.1.9.1 系統變數權限

系統變數可以具有影響整個伺服器運作的全域值、僅影響目前工作階段的工作階段值,或兩者都有

  • 對於動態系統變數,可以使用 SET 陳述式來變更其全域或工作階段執行階段值(或兩者),以影響目前伺服器執行個體的運作。(有關動態變數的資訊,請參閱第 7.1.9.2 節,「動態系統變數」。)

  • 對於某些全域系統變數,可以使用 SET 將它們的值持續保存到資料目錄中的 mysqld-auto.cnf 檔案,以影響後續啟動的伺服器運作。(有關持久性系統變數和 mysqld-auto.cnf 檔案的資訊,請參閱第 7.1.9.3 節,「持久性系統變數」。)

  • 對於持久性全域系統變數,可以使用 RESET PERSISTmysqld-auto.cnf 中移除它們的值,以影響後續啟動的伺服器運作。

本節說明在執行階段將值指派給系統變數的操作所需的權限。這包括影響執行階段值的操作,以及持久性值的操作。

若要設定全域系統變數,請使用具有適當關鍵字的 SET 陳述式。這些權限適用

若要從 mysqld-auto.cnf 檔案中移除持久化的全域系統變數,請使用 RESET PERSIST 陳述式。這些權限適用

如果全域系統變數對上述權限要求有任何例外情況,變數描述會指出這些例外情況。範例包括 default_table_encryptionmandatory_roles,它們需要額外的權限。這些額外的權限適用於設定全域執行階段值的操作,但不適用於持久化值的操作。

若要設定工作階段系統變數的執行階段值,請使用 SET SESSION 陳述式。與設定全域執行階段值相反,設定工作階段執行階段值通常不需要特殊權限,且任何使用者都可以執行以影響目前的工作階段。對於某些系統變數,設定工作階段值可能會在目前工作階段之外產生影響,因此這是一個受限制的操作,只有具有特殊權限的使用者才能執行。

如果工作階段系統變數受到限制,變數描述會指出該限制。範例包括 binlog_formatsql_log_bin。設定這些變數的工作階段值會影響目前工作階段的二進位記錄,但也可能對伺服器複寫和備份的完整性產生更廣泛的影響。

SESSION_VARIABLES_ADMIN 使管理員能夠最小化先前可能被授予 SYSTEM_VARIABLES_ADMINSUPER 的使用者權限,以便讓他們修改受限制的工作階段系統變數。假設管理員建立下列角色以賦予設定受限制工作階段系統變數的能力

CREATE ROLE set_session_sysvars;
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO set_session_sysvars;

任何被授予 set_session_sysvars 角色(且該角色處於啟用狀態)的使用者,都可以設定受限制的工作階段系統變數。但是,該使用者也可以設定全域系統變數,這可能是不可取的。

透過修改角色以擁有 SESSION_VARIABLES_ADMIN 而不是 SYSTEM_VARIABLES_ADMIN,可以將角色權限縮減為僅能設定受限制的工作階段系統變數,而沒有其他權限。若要修改角色,請使用以下陳述式

GRANT SESSION_VARIABLES_ADMIN ON *.* TO set_session_sysvars;
REVOKE SYSTEM_VARIABLES_ADMIN ON *.* FROM set_session_sysvars;

修改角色會立即生效:任何被授予 set_session_sysvars 角色的帳戶不再擁有 SYSTEM_VARIABLES_ADMIN,並且在未明確授予該權限的情況下,無法設定全域系統變數。類似的 GRANT/REVOKE 序列可以應用於任何直接被授予 SYSTEM_VARIABLES_ADMIN 而非透過角色的帳戶。