歴史的/監査可能なデータベースに対する@PerformanceDBAの回答を読んで、彼は次の声明を出しました:
実際の (標準 ISO/IEC/ANSI SQL) データベースでは、ユーザーに INSERT/UPDATE/DELETE パーミッションを付与しません。GRANT SELECT と REFERENCES のみ (選択したユーザーに対して) すべての INSERT/UPDATE/DELETE は、ストアド プロシージャを意味するトランザクションでコード化されます。次に、各ストアド プロシージャの GRANT EXEC を選択したユーザーに付与します (ROLES を使用して管理を軽減します)。
これは本当ですか?INSERT/UPDATE を動的に生成する ORM ツールとどのように連携しますか?
アップデート
では、例を示します。AdminとUserの 2 つのインターフェイスを備えた Web アプリケーションがあります。管理者側は、数千とは言わないまでも数百の個別の SQL コマンドを動的に生成できる重いORM を使用します。
ユーザーとのやり取りははるかに簡単で、いくつかの投票ボタンの UPDATE/INSERT を処理する SP が 10 個ほどあります。明らかに、アプリケーションを実行するユーザーの権限セットは大きく異なります。管理者側では、ORM の DB ユーザーは関連するテーブルへの完全な CRUD アクセス権を持っています。このアプリケーションには SP はまったく使用されていません。また、ドメイン モデルのビジネス ロジックを経由せずにデータに触れることは考えられません。 . バルク データ インポートでさえ、ORM を通じて処理されます。ユーザー側の SP は、特殊なケースであるという理由だけで、この原則に対する小さな譲歩を考えています。
さて、元の質問の上記のステートメントはやや気がかりです。これは「実際の」データベースのようなものであるか、少なくともそれに近いものであると考えているからです。