The MySQL grant system takes stored routines into account as follows:
-
The
CREATE ROUTINEprivilege is needed to create stored routines. -
The
ALTER ROUTINEprivilege is needed to alter or drop stored routines. This privilege is granted automatically to the creator of a routine if necessary, and dropped from the creator when the routine is dropped. -
The
EXECUTEprivilege is required to execute stored routines. However, this privilege is granted automatically to the creator of a routine if necessary (and dropped from the creator when the routine is dropped). Also, the defaultSQL SECURITYcharacteristic for a routine isDEFINER, which enables users who have access to the database with which the routine is associated to execute the routine. -
If the
automatic_sp_privilegessystem variable is 0, theEXECUTEandALTER ROUTINEprivileges are not automatically granted to and dropped from the routine creator. -
The creator of a routine is the account used to execute the
CREATEstatement for it. This might not be the same as the account named as theDEFINERin the routine definition. -
The account named as a routine
DEFINERcan see all routine properties, including its definition. The account thus has full access to the routine output as produced by:-
The contents of the Information Schema
ROUTINEStable. -
The
SHOW CREATE FUNCTIONandSHOW CREATE PROCEDUREstatements. -
The
SHOW FUNCTION CODEandSHOW PROCEDURE CODEstatements. -
The
SHOW FUNCTION STATUSandSHOW PROCEDURE STATUSstatements.
-
-
For an account other than the account named as the routine
DEFINER, access to routine properties depends on the privileges granted to the account:-
With the
SHOW_ROUTINEprivilege or the globalSELECTprivilege, the account can see all routine properties, including its definition. -
With the
CREATE ROUTINE,ALTER ROUTINEorEXECUTEprivilege granted at a scope that includes the routine, the account can see all routine properties except its definition.
-