Lorsqu'une application oblige les utilisateurs à s'authentifier pour DriverManager.getConnection(String nom_utilisateur, String mot_de_passe) ou DataSource.getConnection() et que l'application exécute des instructions SQL en mode dynamique, les utilisateurs doivent posséder les privilèges requis sur les objets de base de données que les instructions référencent. Sinon, ils ne peuvent pas exécuter les instructions SQL dans ces objets.
Lorsqu'une application utilise ces méthodes et exécute des instructions SQL en mode statique, les utilisateurs doivent posséder le privilège EXECUTE sur les packages qui contiennent les instructions SQL. Lorsqu'un utilisateur possède le privilège EXECUTE sur un package, l'utilisateur peut exécuter toutes les instructions SQL du package. Par exemple, un utilisateur peut posséder des privilèges sur un seul objet de base de données référencé par un groupe d'instructions SQL. Si vous définissez l'accès de ces instructions SQL dans un package avec d'autres instructions et que vous accordez à l'utilisateur le privilège EXECUTE sur le package, l'utilisateur peut maintenant exécuter toutes les instructions dans le package, et non plus seulement celles faisant référence à la base de données d'objet pour laquelle l'utilisateur possédait des privilèges.
Par conséquent, pendant l'installation de l'application, le propriétaire de l'application ou l'administrateur de base de données doit choisir d'accorder ou non le privilège EXECUTE sur les packages nécessaires à tous les utilisateurs possédant les privilèges requis pour exécuter les instructions SQL en mode dynamique. Si le propriétaire ou l'administrateur de base de données accorde le privilège EXECUTE aux utilisateurs en cours, certains utilisateurs peuvent ensuite exécuter les instructions SQL qu'ils ne pouvaient pas exécuter précédemment. Si le propriétaire ou l'administrateur de base de données n'accorde pas le privilège EXECUTE à un utilisateur, cet utilisateur ne peut pas exécuter les instructions SQL qu'il ne pouvait pas déjà exécuter précédemment.
Si plusieurs applications utilisent le même objet DataSource et oblige les utilisateurs à s'authentifier, un utilisateur capable d'exécuter les instructions SQL de l'une de ces applications peut exécuter les instructions SQL d'applications utilisant cet objet DataSource. Des utilisateurs malveillants peuvent pirater une nouvelle application utilisant l'optimisation client pour exécuter les instructions SQL en mode statique qui sont émises par les applications partageant cet objet DataSource. Par conséquent, si des utilisateurs individuels doivent posséder l'accès à des applications spécifiques ou à des instructions SQL spécifiques de l'ensemble d'applications, ce niveau de sécurité doit être traité par le serveur d'applications ou un autre conteneur.
Pour ces applications, l'autorisation est gérée par le serveur d'applications ou un autre conteneur. Les utilisateurs possédant un accès à une application peuvent l'utiliser quel que soit le mode d'exécution (dynamique ou statique) des instructions SQL.
Après avoir configuré l'application afin de l'exécuter avec l'optimisation client et avoir défini les accès des instructions SQL, vous pouvez révoquer les privilèges sur les objets de base de données de l'utilisateur spécifié dans l'objet DataSource. Vous pouvez également attribuer à ce même utilisateur le privilège EXECUTE sur les packages DB2 de l'application. Par conséquent, tous les utilisateurs possédant un accès à l'application peuvent exécuter toutes les instructions SQL qui se trouvent dans ces packages.