I received a request to implement privileges at the column level, for example:
GRANT UPDATE("column1") ON "TABLE" TO ROLE;
But I found that client applications (in Delphi + ODAC) always emit SQL updates, for example:
update TABLE set column1=:column1,column2=:column2,column3=:column3,...etc where id_c=:id_c;
which forces Oracle to always throw ORA-01031: insufficient privileges, even if only column1 was modified. The obvious solution is to change the client application, so that it only emits SQL updates with the columns changed, but it looks like a lot of code.
Is there an even more elegant solution?
Edit: I forgot to mention that my Delphi sources have a significant number of hard-coded insert / update requests. ODAC cannot help in this case.
Juraj source share