すべてに同じログインを使用してデータベースに接続しないでください。
少なくとも、このアーキテクチャには 3 つのログインを使用 する必要があります。
- テーブルなどを作成するための開発レベルのログイン
- アプリケーションを実行するためにアプリケーションで使用されるログイン
- ユーザー指定のクエリを実行するために使用されるログイン
つまり、アプリケーションのログインには、必要なテーブルの読み取りまたは書き込みのみが許可され、すべてのテーブルに対してすべてを実行するわけではありません。たとえば、アプリケーションのログインは、テーブルを作成または削除できる必要はありません。
これにより、コードの間違いによる影響が制限されるだけでなく、誰かがシステムをハッキングできる範囲(SQL インジェクション攻撃など) も制限されます。
また、ユーザー固有のクエリを実行するためのログインには、SELECT 権限のみを付与する必要があり、使用できるテーブル/ビュー/関数に対してのみ付与する必要があることも意味します。彼らが権限を持っていない INSERT または DELETE を実行しようとした場合、エラーをキャッチしてvery naughty boy
、RDBMS がユーザーに何かを損傷させないことを念頭に置いて安全であることをユーザーに伝えることができます。あなたがまだ彼らに許可を与えていないこと。
つまり、RDBMS には既にログイン権限のアーキテクチャがあります。これらを使用して、コードのさまざまな側面の権限と機能を制限します。
私はこの車輪を再発明しようとはしません。アプリケーションの脆弱性を明らかにする、見逃したトリックやハックがある可能性が非常に高いです。これが面倒だとおっしゃるのもありがたく思いますが、実際にはこれが正しい方法であり、信頼できる唯一の方法です。申し訳ありませんが、これがデータ セキュリティへの標準的なアプローチであることには理由があります。
(そして、私を信じてください。誰もあなたのシステムをハッキングしようとしていないとしても、最終的には誰かがスクリューボール クエリを入力するでしょう。誤ってセキュリティをバイパスし、データベースの豚の耳を作ってしまいます.)