アプリケーションがユーザーに DriverManager.getConnection(String username, String password) または DataSource.getConnection() に対する認証を要求し、アプリケーションが SQL ステートメントを動的に実行する場合、ユーザーはステートメントが参照するデータベース・オブジェクトに対する必要な特権を持っていなければなりません。 そうでない場合、ユーザーはそれらのオブジェクトに対して SQL ステートメントを実行できません。
アプリケーションがこれらのメソッドを使用して SQL ステートメントを静的に実行する場合、ユーザーは SQL ステートメントを含むパッケージに対する EXECUTE 特権を持っていなければなりません。 ユーザーがパッケージに対する EXECUTE 特権を持っている場合、ユーザーはそのパッケージ内にあるすべての SQL ステートメントを実行できます。 例えば、ユーザーは、SQL ステートメントのグループにより参照される 1 つのデータベース・オブジェクトだけに対する特権を持つ場合があります。 これらの SQL ステートメントを他のステートメントとともにパッケージにバインドし、ユーザーにそのパッケージに対する EXECUTE 特権を付与した場合、ユーザーは、もともと特権を持っていた 1 データベース・オブジェクトを参照するステートメントだけでなく、パッケージ内のすべてのステートメントを実行できるようになります。
したがって、アプリケーションのインストール中に、アプリケーションの所有者または DBA は、SQL ステートメントを動的に実行するために必要な特権を既に持っているすべてのユーザーに、必要なパッケージに対する EXECUTE 特権を付与するかどうかを判断しなければなりません。 所有者または DBA が EXECUTE を現行ユーザーに付与する場合、一部のユーザーは、以前には実行できなかった SQL ステートメントを実行できるようになる場合があります。 所有者または DBA が EXECUTE をユーザーに付与しない場合、ユーザーは以前には実行できた SQL ステートメントを実行できなくなります。
複数のアプリケーションが同じ DataSource オブジェクトを使用し、ユーザーに認証を要求する場合、それらのアプリケーションの 1 つに対して SQL ステートメントを実行できるユーザーは、その DataSource を使用するどのアプリケーションからでも SQL ステートメントを実行できるようになります。 悪意あるユーザーは、pureQuery JDBC クライアント・オプティマイザーを使用する新規アプリケーションをハッキングし、DataSource オブジェクトを共用するすべてのアプリケーションにより発行されるどの SQL ステートメントでも静的に実行できるようになります。 したがって、個々のユーザーが特定のアプリケーション、またはアプリケーションのセット内の特定の SQL だけにアクセスを持つようにする場合、そのレベルのセキュリティーは、アプリケーション・サーバーまたは他のコンテナーにより扱われなければなりません。
このようなアプリケーションの場合、許可はアプリケーション・サーバーまたは他のコンテナーにより管理されます。 それが SQL ステートメントを動的または静的のどちらで実行するとしても、アプリケーションに対するアクセスがあるユーザーはそれを使用できます。
アプリケーションを pureQuery JDBC クライアント・オプティマイザーを使用して実行するように構成し、SQL ステートメントをバインドした後に、DataSource オブジェクトで指定されたユーザーから、データベース・オブジェクトに対する特権を取り消すことができます。 さらに、その同じユーザーに対して、アプリケーションの DB2 パッケージに対する EXECUTE 特権を付与することもできます。 したがって、アプリケーションへのアクセスがあるすべてのユーザーは、それらのパッケージ内にあるすべての SQL ステートメントを実行できます。