系統變數可以有影響整個伺服器操作的全域值、僅影響目前工作階段的工作階段值,或兩者都有。
對於動態系統變數,可以使用
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
。某些全域系統變數受到持久性限制(請參閱第 7.1.9.4 節,「不可持久化和持久性限制的系統變數」)。要持久化這些變數,請使用
SET PERSIST_ONLY
陳述式,這需要先前描述的權限。此外,您必須使用加密連線連線到伺服器,並提供 SSL 憑證,其 Subject 值由persist_only_admin_x509_subject
系統變數指定。
若要從 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
的帳戶,而不是透過角色的方式。