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