Ich suche nach der besten Möglichkeit, den Zugriff auf sys.tables
/ Information Schema
für einen Benutzer / eine Gruppe in SQL Server zu deaktivieren .
Ich habe diesen Thread von 2008 gefunden
Es zeigt einen Weg, wie man den Zugriff auf [sys].[something]
so verweigert :
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
Aber keine Möglichkeit, den Zugriff auf die zu deaktivieren Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Das scheint nicht zu funktionieren.
Wie kann ich den Zugriff auf information_schema deaktivieren?
Und gibt es eine einfachere Möglichkeit, den Zugriff auf alle sys
/ zu deaktivieren information_schema
?
Update: Eigentlich kann ich nicht beide der folgenden Anweisungen ausführen:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
Ich habe versucht, sie auf der spezifischen Datenbank auszuführen, auf der der Benutzer vorhanden ist, und ich habe auch versucht, sie auf dem "Master" auszuführen.
Ich kann immer noch rennen:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> liefert weiterhin Ergebnisse
SELECT * from
sys.TABLES
-> keine Ergebnisse mehr
Das Einbeziehen SCHEMA::
in die Abfrage ermöglichte das Erstellen der Sicherheitselemente
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
Aber jetzt kann ich noch alle Informationen aus der DB auswählen.
Ich habe mir die Registerkarte "Securables" im Eigenschaftsfenster des Benutzers in Management Studio 2008 angesehen. Sie sieht folgendermaßen aus:
Eintrag, der die Auswahl von sys.tables blockiert
Schema: sys, Name: tables, Typ: View
Berechtigungen für sys.tables: Berechtigung: Auswählen, Erteiler: dbo, Verweigern ist aktiviert
Eintrag, der keine Auswahl blockiert
Schema :, Name: INFORMATION_SCHEMA, Typ: Schema
Berechtigungen für INFORMATION_SCHEMA: Berechtigung: Auswählen, Erteiler: dbo, Verweigern ist NICHT aktiviert (Ich habe versucht, dies zu überprüfen, aber keine Chance.)
Berechtigung: Auswählen, Erteiler: INFORMATION_SCHEMA, Verweigern ist aktiviert
Ich habe versucht, die Berechtigungen über die GUI festzulegen, aber dann erhalte ich den gleichen Fehler, dass das Festlegen von Berechtigungen nur für die Master-DB möglich wäre. Ich habe jedoch nicht den Benutzer / Login zur Sicherheit der Master-DB hinzugefügt.
Lösung:
Die einzige Möglichkeit, die deny
Arbeit für die information_schema
zu erledigen, bestand darin , den Benutzer zur master-db hinzuzufügen und die deny select
auf dem master auszuführen :
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
Und wie in diesem Code kann es nur für einzelne Tabellen ausgeführt werden.
Antworten:
Sie sollten in der Lage sein, Berechtigungen für das gesamte Schema
sys
und das gesamteinformation_schema
Schema zu verweigern :Dies sollte im Grunde nur verhindern, dass der Benutzer in diesen beiden Schemata Auswahlen vornimmt.
quelle
Erstens haben Sie insofern Recht, als die (leicht kontraintuitive) Möglichkeit, den Zugriff auf die Schemas [sys] und [INFORMATION_SCHEMA] zu verhindern, darin besteht, zunächst sicherzustellen, dass die Anmeldung (also Prinzipal auf Serverebene) als Benutzer (erm, Principal auf Datenbankebene) in der master-Datenbank.
Angenommen, Sie haben der Einfachheit halber eine SQL-Anmeldung:
Legen Sie nun einen entsprechenden Benutzer in der Master-Datenbank an:
Jetzt möchten Sie verhindern, dass diese Anmeldung auf eine der Tabellen in den vom System bereitgestellten Schemata zugreift - [sys] und [INFORMATION_SCHEMA].
Offenbar gab es eine Verhaltensänderung zwischen SQL Server 2008 R2 und SQL Server 2012:
In SQL Server 2012 (und vermutlich in späteren Versionen) funktioniert das Ausführen der folgenden Befehle in der [master] -Datenbank wie erwartet:
In SQL Server 2008 R2 (und vermutlich in früheren Versionen) scheinen die Stock Grant-Anweisungen, die Mitgliedern von [public] Zugriff auf Objekte in diesen Schemata gewähren, die obigen DENY-Anweisungen zu überschreiben, was für mich wie ein riesiger Haufen von Fehlern erscheint. Folglich müssen Sie auf 2008 R2 [öffentlich] für jede GEWÄHRUNG ausdrücklich VERWEIGERN. Hier ist ein Skript, um das zu tun:
Führen Sie das Obige in der master-Datenbank aus, und Sie haben den Zugriff auf den Inhalt dieser Schemas entfernt.
Anmerkungen:
Wenn Sie im obigen Skript die folgenden zwei Zeilen auskommentieren:
Dies hat zur Folge, dass ALLE Standard-GRANTs für die Öffentlichkeit rückgängig gemacht werden. Dies verhindert den Zugriff auf z. B. sys.sp_tables und unterbricht so die Fähigkeit von z. B. Microsoft Access, die Tabellen überhaupt aufzulisten. In Szenarien mit hoher Sicherheit ist es jedoch nützlich, dies zu tun, damit die Benutzer nur Zugriff erhalten, wenn Sie dies ausdrücklich gewährt haben es.
quelle
Ich bin mir nicht sicher, wann dieser Trick verfügbar wurde - da niemand ihn erwähnt hat -, aber es scheint, dass er mindestens seit SQL Server 2008 funktioniert.
Das oben Genannte funktioniert, ohne dass der Benutzer der
master
Datenbank hinzugefügt werden muss, wie in einigen anderen Antworten erwähnt.quelle