Ich glaube, ich brauche einige Hinweise zur Sicherheit in SQL Server. Ich versuche, einige unserer Endbenutzer daran zu hindern, auf bestimmte Spalten (z. B. SSN) in einer Tabelle zuzugreifen.
Ich dachte, ich könnte nur die Sicherheit auf Spaltenebene verwenden, um den Zugriff auf die Spalten einzuschränken. Dies verhinderte erfolgreich, dass Benutzer direkt auf die Tabelle zugreifen konnten, aber ich war überrascht, dass sie über eine Ansicht, die auf diese Tabelle zugegriffen hat, immer noch zu diesen Spalten gelangen konnten.
Ich habe die Tipps hier befolgt: http://www.mssqltips.com/sqlservertip/2124/filtering-sql-server-columns-using-column-level-permissions/ Diese waren sehr hilfreich, aber als ich am Ende eine Ansicht erstellte Der Praktikant konnte standardmäßig auf diese Spalte zugreifen
Ich habe gelesen, dass Ansichten der beste Weg sind, um dies zu erreichen, aber ich möchte wirklich nicht alle Ansichten und die ältere Front-End-Anwendung ändern. Ich würde es lieber nur einmal auf die Tabelle beschränken und wenn eine Ansicht versucht, auf diese Spalte zuzugreifen, würde es einfach fehlschlagen.
Ist das möglich oder verstehe ich falsch, wie Sicherheit in SQL Server funktioniert?
quelle
SELECT
Berechtigung für die Ansicht, verweigern Sie ihnen jedoch die Berechtigung für die zugrunde liegende TabelleAntworten:
Die Sicherheit auf Spaltenebene funktioniert nicht so. Mir ist kein Mechanismus bekannt, mit dem einem bestimmten Benutzer der Zugriff auf eine bestimmte Spalte global verweigert werden kann. GRANT / DENY funktioniert nur mit bestimmten Anweisungen wie SELECT, UPDATE usw. in Kombination mit einem bestimmten Objekt.
Wenn Sie in Ihrem Fall den Zugriff auf SELECT für Spalte X in Tabelle Y entfernt haben, kann der Benutzer weiterhin problemlos "select *" - Ansichten für diese Tabelle ausführen, da die Ansicht ein anderes Objekt ist und von dieser Sicherheitseinstellung nicht betroffen ist!
Die gute Nachricht ist, dass Sie Spaltenberechtigungen auch für Ansichten verwenden können. Es funktioniert genauso wie bei Tabellen, aber Sie müssen die Berechtigung für jede Ansicht festlegen, die die SSN-Spalte enthält.
quelle
Beachten Sie, dass es in SQL 2016+ eine Datenmaskierungsfunktion gibt, mit der die vollständigen Details bestimmter Spalten ausgeblendet werden können. Dies kann verhindern, dass Benutzer die tatsächlichen Werte bestimmter Spalten sehen, es sei denn, sie verfügen über bestimmte "Demaskierungs" -Berechtigungen.
Beachten Sie, dass Benutzer möglicherweise weiterhin indirekt Daten über WHERE-Klauseln finden. Selbst wenn beispielsweise "Gehalt" maskiert wäre, könnten Sie Benutzer mit einem Gehalt zwischen X und Y abfragen.
Zum Beispiel:
ALTER COLUMN [Social Security Number] ADD MASKED WITH (FUNCTION = 'partial(0,"XXX-XX-",4)')
Dokumentation: https://docs.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking?view=sql-server-2016
quelle