列レベルの特権を実装するように要求されました。たとえば、次のようになります。
GRANT UPDATE("column1") ON "TABLE" TO ROLE;
しかし、クライアント アプリケーション (Delphi+ODAC 内) は常に次のような SQL 更新を発行することがわかりました。
update TABLE set column1=:column1,column2=:column2,column3=:column3,...etc
where id_c=:id_c;
column1 のみが変更された場合でも、Oracle が常にORA-01031: 不十分な権限をスローする原因は何ですか。明らかな解決策は、クライアント アプリケーションを変更して、変更された列のみで SQL 更新を発行するようにすることですが、これは非常に多くのコーディングのように見えます。
もっとエレガントな解決策はありますか?
編集: 私の Delphi ソースには、かなりの数のハードコーディングされた挿入/更新クエリがあることを忘れていました。この場合、ODAC は役に立ちません。