web-dev-qa-db-ja.com

別のユーザーがdb2ストアドプロシージャのシーケンスを変更する方法

Linux(x86_64)でDB2 LUWバージョン10.5.0.5を使用しています。特定の番号で再起動するようにシーケンスを変更する手順を書いています。プロシージャは、パラメータとして再起動するシーケンス名と番号を受け取ります。プロシージャは正常に作成されました。開発者にデータベースへの接続アクセス権とプロシージャの実行アクセス権を付与しました。ただし、プロシージャを実行すると、SQL -551(シーケンスの変更sqlの権限の問題)が発生します。作成テーブルは、作成テーブルへのアクセス権を持たないユーザーによってプロシージャで実行された場合、完全に正常に機能します。なぜ変更が機能しないのですか?開発者がシーケンス自体への変更アクセスを許可せずにデータベースのシーケンスを変更できるようにする方法はありますか?

1
Neha

動的SQLでのDYNAMICRULESバインドオプションの効果

ルーチンの動的SQLステートメントをルーチン作成者権限で実行するには、ルーチンの作成前にDYNAMICRULESバインドオプションをBINDに設定する必要があります。それ以外の場合は、ルーチンを実行するユーザーの許可を得て実行されます。
これは、同じセッションでCREATE OR REPLACE PROCEDUREステートメントの前に次のステートメントを呼び出すことで実行できます。

CALL SET_ROUTINE_OPTS('DYNAMICRULES BIND')

ただし、Table 2. Definitions of Dynamic SQL Statement Behaviorsで説明されているようなバインドオプションを使用して、次のステートメントを動的に実行することはできません。

GRANT, REVOKE, ALTER, CREATE, DROP, COMMENT ON, RENAME, SET INTEGRITY, and SET EVENT MONITOR STATE

つまり、呼び出し元とは異なる承認を使用して動的にALTER SEQUENCEを実行することはできません。
問題を解決するために、シーケンスに対するALTER権限を開発者に付与できます。

2
Mark Barinstein