ここでの課題は、データベースアクセスが抽象化によって管理されることです。ユーザーが自分で接続する代わりに、ユーザーは基本的に、一般化されたアプリケーションロールのIDを引き継ぎます。個々の接続の可視性が失われるだけでなく、すべての個々のユーザーに対して異なるタイプのアクセスを定義する粒度も失われます。
このアプローチを使用する主な理由は単純さです。多くのアプリケーションは、アプリケーションのユーザーがデータベースの知識を持たないように設計されています。特にアプリケーションが独自の内部セキュリティを管理している場合、彼らは本当にそれを必要としません。ほとんどの個々のユーザーはデータベースに直接接続することはないので、明示的なログインを定義する必要はありません。
データベースにセキュリティを管理させることを考慮する必要があるのは、データベースに直接接続するユーザーがいる場合のみです。これは、彼らがあなたのアプリケーションを迂回していることを意味し、それ自体ではセキュリティを強制することができません。ここでの利点は、セキュリティをより詳細に定義できることです。欠点は、ユーザーとそのアクセス許可を管理するためのオーバーヘッドが高いことです。
この種のアクセスの必要性を感じている場合は、役割ベースのアクセス制御を使用します。データベース内で必要なアクセス許可の種類に基づいてロールを定義し、それらのロールの下で個々のユーザーをグループ化する必要があります。これにより、セキュリティモデルの監査と制御が向上し、直接アクセスを管理するときに制御不能になります。
これにはハイブリッドアプローチがあります。データベースによってセキュリティを部分的に管理する場合は、複数のアプリケーションユーザーを作成し、各ユーザーをロールで定義し、それらのユーザーが果たすロールに基づいてそれらのユーザーに明示的にアクセスを許可します。つまり、セキュリティモデルの一部でデータベースエンジンを活用できますが、それでもアプリケーション内で何らかの管理が必要です。これにより、アプリケーションのユーザーモデルの複雑さが増しますが、使用中のさまざまなログインの粒度が細かくなります。