MySQL 授權系統會以下列方式將預存常式納入考量
需要
CREATE ROUTINE
權限才能建立預存常式。需要
ALTER ROUTINE
權限才能變更或刪除預存常式。如果必要,此權限會自動授予常式的建立者,並在刪除常式時從建立者移除。需要
EXECUTE
權限才能執行預存常式。但是,如果必要,此權限會自動授予常式的建立者 (並在刪除常式時從建立者移除)。此外,常式的預設SQL SECURITY
特性是DEFINER
,這使得能夠存取與常式相關聯的資料庫的使用者可以執行常式。如果
automatic_sp_privileges
系統變數為 0,則不會自動將EXECUTE
和ALTER ROUTINE
權限授予常式建立者,也不會從常式建立者移除。常式的建立者是執行其
CREATE
陳述式的帳戶。這可能與常式定義中命名為DEFINER
的帳戶不同。在常式
DEFINER
中命名的帳戶可以看到所有常式屬性,包括其定義。因此,該帳戶可以完全存取由以下項目產生的常式輸出:Information Schema
ROUTINES
表格的內容。
對於除了在常式
DEFINER
中命名的帳戶之外的帳戶,存取常式屬性取決於授予該帳戶的權限有了
SHOW_ROUTINE
權限或全域SELECT
權限,帳戶可以看到所有常式屬性,包括其定義。在包含常式的範圍中授予
CREATE ROUTINE
、ALTER ROUTINE
或EXECUTE
權限,帳戶可以看到所有常式屬性,但其定義除外。