例: SQL SECURITY—OWNERの指定 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ncd1596241368722.ditamap
dita:ditavalPath
ja-JP/ncd1596241368722.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

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();