Zuordnung mehrerer Serveranmeldungen zu einem Datenbankbenutzer

11

Dies scheint eine dumme Frage zu sein, aber trotz einiger Nachforschungen konnte ich nur diesbezüglich keine Informationen finden (möglicherweise aufgrund der Verwendung der falschen Terminologie).

Ist es möglich, mehrere Serveranmeldungen (SQL Server-Authentifizierung) bei einem einzelnen Datenbankbenutzer zu protokollieren (dem Berechtigungen zugewiesen wurden, indem er Mitglied einer Datenbankrolle ist)?

Ich habe Dutzende von SQL-Anmeldungen (SQL Server-Authentifizierung), die eine Einstellung aus einer zentralen Datenbank lesen müssen, und ich möchte alle diese Anmeldungen lieber einem einzelnen DB-Benutzer in der Zieldatenbank zuordnen, als für jede Anmeldung einen eigenen DB-Benutzer zu erstellen.

Wenn ja, wie lautet die richtige T-SQL-Syntax?

Leepfrog
quelle
Wenn Sie "Serveranmeldungen" sagen, meinen Sie Windows-Konten oder SQL Server-Konten?
Phil Sumner
Ich spreche von SQL Server-Konten. Wird die Frage bearbeiten, um zu klären
Leepfrog
Wie wäre es, ROLEwenn Sie eine erstellen und dann Benutzer zur Rolle hinzufügen. Auf diese Weise erteilen Sie der Rolle nur Berechtigungen. Auf diese Weise können Sie die Sicherheit besser verwalten. Was ist die SQL Server-Version - 2008R2, 2012?
Kin Shah

Antworten:

19

Stellen Sie zunächst die Terminologie sicher. Ein Login ist ein Sicherheitsprinzipal auf Instanzebene ( sys.server_principals) und ein Benutzer ist ein Sicherheitsprinzipal auf Datenbankebene ( sys.database_principals). Sie sind durch eine SID (Security Identifier) ​​miteinander verbunden. Wenn Sie in den obigen Systemansichten nachsehen, können Sie sehen, wie sie durch SID in einem 1: 1-Format miteinander verbunden werden. Das ist 1 Login bei 1 Benutzer in einer Datenbank. Ein Login kann mehrere Benutzer haben, diese müssen sich jedoch in unterschiedlichen Datenbanken befinden.

Sie müssen also für jedes Login, auf das Sie Zugriff haben möchten, einen Benutzer in Ihrer Datenbank erstellen. Es ist ein Befehl, der einfach genug ist.

CREATE USER [UserName] FROM LOGIN [LoginName]

Von dort aus können Sie alle Benutzer in eine einzelne (oder mehrere) Rolle einordnen. Eine Rolle ist ein Container, der über Berechtigungen verfügt und diese Berechtigungen mit jedem Benutzer (für Datenbankrollen) oder Anmelden (zum Beispiel Rollen) teilt. Es gibt eine integrierte Datenbankrolle namens db_datareader, die Lesezugriff auf jede Tabelle und Ansicht in der Datenbank ermöglicht. Sie können alle Ihre Benutzer zu dieser Rolle hinzufügen. Eine bessere Idee wäre jedoch, eine neue Rolle zu erstellen und sie der db_datareaderRolle hinzuzufügen . Fügen Sie dann alle Ihre Benutzer zur neuen Rolle hinzu. Der Vorteil hierbei ist, dass Sie, wenn Sie der Gruppe zusätzliche Berechtigungen hinzufügen möchten, einfach die Berechtigungen für die Rolle ändern können.

Erstellen Sie die Rolle durch:

CREATE ROLE RoleName

Hinzufügen eines Benutzers zu einer Rolle (oder einer Rolle zu einer anderen)

EXEC sp_addrolemember 'RoleName','UserName'

oder wenn Sie im Jahr 2012 oder höher sind

ALTER ROLE [RoleName] ADD MEMBER [UserName]
Kenneth Fisher
quelle
Vielen Dank für die ausführliche Erklärung und für die Bereitstellung von Hintergrundinformationen, Kenneth. Was mir unklar war, war That's 1 Login to 1 User in a database.
Leepfrog