Wie kann ich in SQL Server 2008 einen vollständigen Active Directory-Gruppensicherheitszugriff zuweisen?

40

Ich möchte die integrierte Sicherheit für meine interne Anwendung verwenden, die sich ausschließlich in einer Domäne befindet. Leider habe ich das noch nie gut hinbekommen. Ich möchte einer gesamten Exchange-Gruppe (Active Directory) in SQL Server eine Rolle für den Lese- / Schreibzugriff auf bestimmte Tabellen zuweisen. Auf diese Weise müsste ich keinen Operator erstellen, wenn jemand eingestellt wird, oder einen Operator löschen, wenn jemand entlassen wird. Ist das möglich? Welche Schritte würde ich unternehmen, um dies zu tun?

Michael Hedgpeth
quelle

Antworten:

48
  • Legen Sie die AD-Gruppe als Login fest. Und "Login" bedeutet Server-Level-Login, nicht das AD-Konzept von Benutzer / Login. In SQL Server ist dies ein Prinzipal auf Serverebene
  • Erstellen Sie einen zugeordneten Benutzer in. Sie sollten einen Benutzer nicht direkt für Tabellen berechtigen. Und "Benutzer" bedeutet, dass der Datenbankbenutzer nicht das AD-Konzept des Benutzers ist: In SQL Server ist dies ein Prinzip auf Datenbankebene.
  • Benutzer zur Rolle hinzufügen (auch ein "Principal auf Datenbankebene")
  • GRANT-Berechtigungen für die Rollen in den Tabellen (eine Tabelle oder ein Prozess usw. ist "sicherbar")

Beispielskript

USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO

sp_addrolememberist ab SQL Server 2012 veraltet und ALTER ROLEsollte stattdessen verwendet werden.

gbn
quelle
3
Es wäre hilfreich zu erklären, warum Sie Rollen anstelle von SQL-Benutzern (in diesem Fall AD-Gruppen) Berechtigungen zuweisen sollten.
Drew Chapin
Vielleicht meinst du "Benutzer [...] für Login erstellen ", anstatt "von Login"?
Agostino
BENUTZER ERSTELLEN ... FÜR LOGIN ...; und CREATE USER ... FROM LOGIN ...; beide arbeiten für mich (MSSQL2016). Nicht sicher, ob es einen Unterschied gibt?
Reverse Engineer
4

Das Gewähren der Berechtigungen in SQL Server für eine AD-Gruppe ist relativ einfach. Dies kann entweder über T-SQL oder Management Studio erfolgen.

Wenn Sie beispielsweise eine AD-Gruppe aufgerufen haben MYDOMAIN\APPLICATION SUPPORT, würden Sie die Anmeldung auf Serverebene erstellen und dann Zuordnungen zu einzelnen Datenbanken verwenden, um etwas detailliertere Berechtigungen wie Datenleser zu erteilen.

Im Idealfall sollte der gesamte Anwendungszugriff über gespeicherte Prozeduren * erfolgen, sodass nur Berechtigungen für die in dieser Datenbank gespeicherten Prozeduren erforderlich sind.

* Um einem bestimmten Benutzer das Anzeigen bestimmter Daten zu ermöglichen, können Sie aus Sicherheitsgründen eine Prozedur erstellen und dem Benutzer die Ausführungsberechtigung für diese Prozedur erteilen . Das direkte Abfragen durch den Benutzer würde bedeuten, dass für alle betroffenen Tabellen eine Auswahlberechtigung erteilt wird. Es ist auch einfacher, mit Prozeduren zu arbeiten und leichter zu debuggen.

Gespeicherte Prozeduren extrahieren den Tabellenzugriff und begrenzen den Zugriff. Für DBA-Typen bedeutet dies: "Lassen Sie mich alle Ihre Instanzvariablen anzeigen: Ich möchte keine Methoden, Getter oder Setter verwenden."

Peter Schofield
quelle
3

Von marc_s Antwort "So fügen Sie eine Active Directory-Benutzergruppe als Login in SQL Server hinzu" :

Gehen Sie in SQL Server Management Studio zu Object Explorer > (your server) > Security > Loginsund klicken Sie mit der rechten Maustaste New Login:

Bildbeschreibung hier eingeben

Wählen Sie dann Groupsim daraufhin angezeigten Dialogfeld die Arten von Objekten aus, die Sie sehen möchten ( standardmäßig deaktiviert - markieren Sie diese Option!), Und wählen Sie den Ort aus, an dem Sie nach Ihren Objekten suchen möchten (z. B. Verwendung Entire Directory), und suchen Sie dann Ihre AD-Gruppe .

Bildbeschreibung hier eingeben

Sie haben jetzt eine reguläre SQL Server-Anmeldung - genau wie beim Erstellen einer für einen einzelnen AD-Benutzer. Geben Sie diesem neuen Login die Berechtigungen für die Datenbanken, die es benötigt, und los geht's!

Jedes Mitglied dieser AD-Gruppe kann sich jetzt bei SQL Server anmelden und Ihre Datenbank verwenden.

Sogar Mien
quelle
2
Das Verknüpfen mit dieser SO-Antwort ist wahrscheinlich nützlich, aber Sie fügen dem Beitrag nichts Neues hinzu, oder? Du hättest den Link einfach als Kommentar posten können.
Andriy M
2
Die Antwort enthält einen schönen Screenshot zum Überprüfen von Gruppen unter Objekttyp, da dies fehlte, als ich versuchte, dies zu tun. Ein Link zeigt es meiner Meinung nach nicht so nützlich. Ich versuche nur, der nächsten Person zu helfen ...
Sogar Mien
Was meinst du? Normalerweise ist ein Link dazu da, um ihm zu folgen, und jeder, der dem Link folgt, würde den netten Screenshot sehen, über den Sie sprechen, sowie alles andere, was Sie hier neu gepostet haben. Ich werde mich jedoch nicht streiten, nur um Sie wissen zu lassen, dass meine Meinung unverändert ist: Ein Link (in einem Kommentar) würde genauso gut funktionieren.
Andriy M
4
Meine Meinung ist auch unverändert. Ein Link in einem Kommentar enthält nicht die gleichen Informationen wie ein tatsächliches Bild auf einer Webseite. "Zeigen Sie, erzählen Sie nicht."
Auch Mien
1

Wenn der Benutzer Mitglied einer DOMAIN \ SecurityGroup ist, die über die Berechtigung Sysadmin in SQL verfügt, wird dies beim Zugriff auf Datenbanken verwendet. Andernfalls müssen Sie prüfen, welche DOMAIN \ SecurityGroup (s) in jeder Datenbank Berechtigungen erhalten haben. Wenn der Benutzer Mitglied von 2 Sicherheitsgruppen ist, wobei SecGroupA die Berechtigung zum Auswählen und SecGroupB die Berechtigung zum Einfügen hat, kann der Benutzer auswählen und einfügen.

Piyush Agrawal
quelle