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
權限,則該帳戶可以看到除了定義以外的所有常式屬性。