例: SQL SECURITY—INVOKERの指定 - Teradata Database - Teradata Vantage NewSQL Engine - 例: SQL SECURITY—INVOKERの指定、CREATE PROCEDURE(SQL形式)およびREPLACE PROCEDURE(SQL形式)のSQL文

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

INVOKERロジックは、現在最上位にある許可スタックを使用して権限をチェックします。また、スタックの最上位にある許可識別子は、プロシージャのSQL文内で修飾されていないすべてのオブジェクト参照の暗黙的修飾用のデフォルトの修飾子として使用されます。SQL SECURITY INVOKERを指定する場合、Teradata Databaseはスタックの最上位にある権限を使用します。

静的SQL

静的SQLの場合、Teradata Databaseはプロシージャの作成時にプロシージャを呼び出したユーザーの権限をチェックします。

事例 Teradata Databaseが検証する権限とその意味
コンパイル 作成者には、SYSLIBデータベースに対するCREATE PROCEDURE権限があります。

参照されるオブジェクトに対して作成者に必要な権限。ただし、警告のみが生成され、ストアド プロシージャの作成は可能です。

実行

呼び出し元のEXECUTE PROCEDURE権限。

参照されるオブジェクトに対して呼び出し元に必要な権限。権限がない場合、実行は失敗します。

例えば、DBCユーザーは次のようにデータベース、テーブル、ユーザーを作成します。

     CREATE DATABASE db1 AS PERM = 1e6;
     CREATE DATABASE db2 AS PERM = 1e6;

     CREATE TABLE db1.tab1(a INT, b INT);
     CREATE TABLE db2.tab1(a INT, b INT);

     CREATE DATABASE testdb1 AS PERM = 1e6;

     CREATE USER User1 AS PERM = 1e6 PASSWORD = User1;

     GRANT CREATE PROCEDURE ON testdb1 TO User1;
     GRANT EXECUTE PROCEDURE ON testdb1 TO User1;
次のように、テキスト エディタを使用してストアド プロシージャを作成します。
     sp1.spl
     -------
     REPLACE PROCEDURE testdb1.sp1() 
     SQL SECURITY INVOKER 
     BEGIN 
     delete from db1.tab1; 
     insert into db1.tab1 select * from  db2.tab1;
     END;

次に、User1は、ストアド プロシージャをコンパイルします。次のような警告とともにストアド プロシージャが正常に作成されます。

     .compile file = sp1.spl

     *** Procedure has been created. 2 Errors/Warnings. 
     *** Warning: 5527 Stored Procedure Created with Warnings.
     *** Total elapsed time was 1 second.

     Warnings reported during compilation
     ------------------------------------
     SPL5000:W(L4), E(3523):The user does not have DELETE access to db1.tab1.
     SPL5000:W(L5), E(3523):The user does not have SELECT access to db2.tab1.

SHOW PROCEDURE文を使用して、プロシージャの作成を検証します。

SHOW PROCEDURE testdb1.sp1;

 *** Text of DDL statement returned. 
 *** Total elapsed time was 1 second.

----------------------------------------------
REPLACE PROCEDURE testdb1.sp1() 
SQL SECURITY INVOKER 
BEGIN 
delete from db1.tab1; 
insert into db1.tab1 select * from  db2.tab1;
END;

INVOKERの権限が実行時にチェックされ、必要な権限がない場合は失敗します。

Call testdb1.sp1();
 *** Failure 3523 SP1:The user does not have DELETE access to db1.tab1.
 *** Total elapsed time was 1 second.

動的SQL

動的SQLの場合、プロシージャの作成時にチェックされる権限はありません。Teradata Databaseは、オブジェクトが存在しない場合にのみ、警告メッセージを生成します。システムは、プロシージャの実行時にすべての権限をチェックします。

次に、動的SQLのINVOKERの場合の例を示します。この例では、user_1がSYSLIBデータベースにプロシージャdyn_dmlを作成し、user_2がSYSLIB.dyn_dmlを呼び出しています。

この例では、Teradata Databaseは次の権限を検証します。

事例 Teradata Databaseが検証する権限とその意味
コンパイル user_1には、SYSLIBデータベースに対するCREATE PROCEDURE権限があります。
実行 user_2には、SQLプロシージャSYSLIB.dyn_dmlに対するEXECUTE PROCEDURE権限があります。

user_2には、テーブルuser_2.t1に対するINSERT権限があります。

     .LOGON user_1,user_1
     .COMPILE FILE sp.spl
     /* sp.spl file
     CREATE PROCEDURE SYSLIB.dyn_dml()
     SQL SECURITY INVOKER
     BEGIN
       CALL dbc."sysexecsql" ('INSERT INTO t1 (1,1);');
     END;
     /*
     .LOGON user_2,user_2
     CALL SYSLIB.dyn_dml();