2016-05-04 15 views
1

DB2データベース(10.5バージョン)にストアドプロシージャを作成する際にスキーマが苦労しています。 私のユーザー名はXYZですが、スキーマABCのストアドプロシージャを作成する必要があります。DB2データベースのストアドプロシージャ作成中のエラー

Error:DB2 SQL error:SQLCODE:-551, SQLSTATE: 42501, SQLERRMC:XYZ;INSERT;ABC.One_Column_table

私の現在のスキーマが以前のXYZを見せていた:私は、作成手順のSQLを実行しようとしているとき は、私は、スキーマが

Create procedure ABC.customInsert(
    IN temp INTEGER 
) 
BEGIN 
     INSERT INTO ABC.One_Column_table VALUES (temp);  
END 

エラーメッセージを関連するように見えるエラーメッセージが表示されます。 (sysibm.sysdummy1からcurrent_Schemaを選択した結果)。 私はABCに変更しました。 (SET CURRENT SCHEMA ABCを使用して)。しかし、それと同じ問題です。

ABCスキーマにUDTなどを挿入、選択、作成できますが、問題はストアドプロシージャの作成中にのみ存在します。 私は何が間違っていると思いますか?

+2

アクションを実行する権限がないようです。ユーザーにロール/特権を与えてから、もう一度やり直してください[詳細はこちら](http://www-01.ibm.com/support/docview.wss?uid=swg21381783) –

答えて

1

エラーメッセージに基づいて、SQLCODE -551は、ユーザー "XYZ"がテーブル "ABC.One_Column_table"に対して "INSERT"特権を持たないことを意味します。

単純なINSERTステートメントを発行して、XYZとして接続するとテーブルに挿入できることを暗示しているので、グループメンバーシップを使用して間接的にINSERT特権を持つ可能性があります。 this IBM technoteで説明されているように、ストアド・プロシージャ、ファンクションまたはトリガーのSQL文では、グループ権限は無視されます。

  1. が直接ユーザーXYZABC.One_Column_tableに必要な権限を付与します。

    は、2つのオプションがあります。

  2. CREATE ROLEステートメントを使用して)ロールを作成し、そのロールにテーブル特権を与えてから、そのロールをユーザーに付与しますXYZ

好奇心が強い場合は、静的SQL文(ストアドプロシージャなど)がコンパイル中にのみチェックされ、追加の権限チェックなしでコンパイルされたコードを実行できることが原因です。グループは、オペレーティング・システムによってDB2データベースの外部で管理され、ストアド・プロシージャのコンパイル後およびデータベース・セキュリティ管理者の知識なしにグループ・メンバーシップが変更される可能性があります。グループ権限が静的SQLに対して有効であった場合、最初に特定のステートメントを実行する権限を持たない(つまり、コンパイル時に権限のあるグループのメンバーではなかった)ユーザーはこれらのステートメントを実行し、セキュリティ上のリスクが発生する可能性があります。

一方、ロールはデータベースセキュリティ管理者によってデータベース自体内で維持され、したがって同じセキュリティ環境の一部です。

+0

詳細な説明はありませんmustaccio。私は今日この事をチェックします:) – Raja

関連する問題