SQL SECURITY OWNERを指定すると、Vantageはプロシージャの所有者の権限を検証して適用します。これは、それを含むデータベースまたはユーザーの権限を意味しています。
別のデータベースにSQLプロシージャを作成することを許可するCREATE OWNER PROCEDURE権限が付与されていない限り、SQLプロシージャを作成するときにSQL SECURITY OWNER句を指定することはできません。CREATE OWNER PROCEDUREは、ユーザーまたはデータベースに明示的に付与する必要のある明示権限です。
Vantageは、プロシージャのSQL文内で修飾されていないすべてのオブジェクトの参照を暗黙のうちに修飾するため、所有者識別子をデフォルトの修飾子として使用します。
次に、静的SQLのOWNERの場合の例を示します。この例ではuser_1がSYSLIBデータベースにSQLプロシージャdyn_dmlを作成し、user_2がSYSLIB.dyn_dmlを呼び出しています。
この静的SQLの例では、Vantageは次の権限を検証します。
事例 | Vantageが検証する権限とその意味 |
---|---|
コンパイル | user_1には、SYSLIBデータベースに対するCREATE OWNER PROCEDURE権限があります。 SYSLIBデータベースには、SYSLIB.t1テーブルに対するINSERT権限があります。 |
実行 | user_2には、SQLプロシージャSYSLIB.dyn_dmlに対するEXECUTE PROCEDURE権限があります。 SYSLIBデータベースには、SYSLIB.t1テーブルに対するINSERT権限があります。 |
.LOGON user_1,user_1 .COMPILE FILE sp.spl /* sp.spl file CREATE PROCEDURE SYSLIB.static_dml() SQL SECURITY OWNER BEGIN INSERT INTO t1 SELECT 1,1; END; /* .LOGON user_2,user_2 CALL SYSLIB.static_dml;
動的SQLの場合、Vantageは次の権限を検証します。
事例 | Vantageが検証する権限とその意味 |
---|---|
コンパイル | user_1は、SYSLIBデータベースに対するCREATE OWNER PROCEDURE権限またはCREATE PROCEDURE権限のいずれかの権限があります。 |
実行 | user_2には、SQLプロシージャSYSLIB.dyn_dmlに対するEXECUTE PROCEDURE権限があります。 SYSLIBデータベースには、SYSLIB.t1テーブルに対するINSERT権限があります。 |
.LOGON user_1,user_1 .COMPILE FILE sp.spl /* sp.spl file CREATE PROCEDURE syslib.dyn_dml() SQL SECURITY OWNER BEGIN CALL dbc."sysexecsql" ('INSERT INTO t1 (1,1);'); END; /* .LOGON user_2,user_2 CALL SYSLIB.dyn_dml();