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