系統變數可以具有影響整個伺服器運作的全域值、僅影響目前工作階段的工作階段值,或兩者都有
對於動態系統變數,可以使用
SET陳述式來變更其全域或工作階段執行階段值(或兩者),以影響目前伺服器執行個體的運作。(有關動態變數的資訊,請參閱第 7.1.9.2 節,「動態系統變數」。)對於某些全域系統變數,可以使用
SET將它們的值持續保存到資料目錄中的mysqld-auto.cnf檔案,以影響後續啟動的伺服器運作。(有關持久性系統變數和mysqld-auto.cnf檔案的資訊,請參閱第 7.1.9.3 節,「持久性系統變數」。)對於持久性全域系統變數,可以使用
RESET PERSIST從mysqld-auto.cnf中移除它們的值,以影響後續啟動的伺服器運作。
本節說明在執行階段將值指派給系統變數的操作所需的權限。這包括影響執行階段值的操作,以及持久性值的操作。
若要設定全域系統變數,請使用具有適當關鍵字的 SET 陳述式。這些權限適用
若要設定全域系統變數執行階段值,請使用
SET GLOBAL陳述式,這需要SYSTEM_VARIABLES_ADMIN權限(或已淘汰的SUPER權限)。若要將全域系統變數持久保存到
mysqld-auto.cnf檔案(並設定執行階段值),請使用SET PERSIST陳述式,這需要SYSTEM_VARIABLES_ADMIN或SUPER權限。若要將全域系統變數持久保存到
mysqld-auto.cnf檔案(而不設定執行階段值),請使用SET PERSIST_ONLY陳述式,這需要SYSTEM_VARIABLES_ADMIN和PERSIST_RO_VARIABLES_ADMIN權限。SET PERSIST_ONLY可用於動態和唯讀系統變數,但對於持久保存唯讀變數特別有用,因為唯讀變數無法使用SET PERSIST。某些全域系統變數是受限於持久化(persist-restricted)的(請參閱第 7.1.9.4 節,「不可持久化和受限持久化的系統變數」)。若要持久化這些變數,請使用
SET PERSIST_ONLY陳述式,這需要先前描述的權限。此外,您必須使用加密連線連線到伺服器,並提供具有persist_only_admin_x509_subject系統變數指定的主題(Subject)值的 SSL 憑證。
若要從 mysqld-auto.cnf 檔案中移除持久化的全域系統變數,請使用 RESET PERSIST 陳述式。這些權限適用
對於動態系統變數,
RESET PERSIST需要SYSTEM_VARIABLES_ADMIN或SUPER權限。對於唯讀系統變數,
RESET PERSIST需要SYSTEM_VARIABLES_ADMIN和PERSIST_RO_VARIABLES_ADMIN權限。對於受限持久化的變數,
RESET PERSIST不需要使用特定的 SSL 憑證來加密連線到伺服器。
如果全域系統變數對上述權限要求有任何例外情況,變數描述會指出這些例外情況。範例包括 default_table_encryption 和 mandatory_roles,它們需要額外的權限。這些額外的權限適用於設定全域執行階段值的操作,但不適用於持久化值的操作。
若要設定工作階段系統變數的執行階段值,請使用 SET SESSION 陳述式。與設定全域執行階段值相反,設定工作階段執行階段值通常不需要特殊權限,且任何使用者都可以執行以影響目前的工作階段。對於某些系統變數,設定工作階段值可能會在目前工作階段之外產生影響,因此這是一個受限制的操作,只有具有特殊權限的使用者才能執行。
所需的權限是
SESSION_VARIABLES_ADMIN。注意任何具有
SYSTEM_VARIABLES_ADMIN或SUPER的使用者實際上都隱含擁有SESSION_VARIABLES_ADMIN,因此不需要明確授予SESSION_VARIABLES_ADMIN。
如果工作階段系統變數受到限制,變數描述會指出該限制。範例包括 binlog_format 和 sql_log_bin。設定這些變數的工作階段值會影響目前工作階段的二進位記錄,但也可能對伺服器複寫和備份的完整性產生更廣泛的影響。
SESSION_VARIABLES_ADMIN 使管理員能夠最小化先前可能被授予 SYSTEM_VARIABLES_ADMIN 或 SUPER 的使用者權限,以便讓他們修改受限制的工作階段系統變數。假設管理員建立下列角色以賦予設定受限制工作階段系統變數的能力
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 而非透過角色的帳戶。