Bei so hoher Granularität der nötigen Zugriffsrechte solltest du dir eine Mehrschichtarchitektur überlegen.
Die
DBMS sind nicht dafür gedacht so genau die Zugriffsrechte zu vergeben.
Das sehe ich nicht so. Was nimmt die Zwischenschicht Dir da ab? Und was, wenn mehrere Systeme mit der
DB arbeiten? DBServer sind genau dafür gedacht, es gibt schon länger Berechtigungsverfahren auf Feldebene, die das Problem des TE direkt lösen. Das kostet u.U. extra bzw. ist leider nicht unbedingt standardisiert.
Code:
GRANT SELECT[,UPDATE,..] ON dbo.[myTable] (Field01, Field03, Field17) TO <user|role>;
Im Sinne der Aufgaben eines DBServers ist die Verwendung sogar empfehlenswert, besonders(?) im Mehrschichtumfeld. Die einzige Möglichkeit, Missbrauch oder Fehlzugriff, -Programmierung systematisch zu verhindern, liegt auf
DB Server Seite.
Und:
Auch wenn für die Lösung des Problems evtl. gar kein View gebraucht wird, sollte die Verwendung gerade hier eine Selbstverständlichkeit sein. Ja, man muss eine oder zwei Zeilen mehr für das Create und das Grant schreiben, aber man hat dadurch ein klares Interface.
Wenn man dann noch gegen Rollen granted, statt gegen User um so besser.