SQL Server-Identitätswechsel Ausführen
Was ist der diffrence zwischen...
execute as user = 'testuser'
UND
execute as login = 'testuser'
Bin ich der Ausführung einer cross-Datenbank-Prozedur unter diesen Anmeldungen und es funktioniert mit der exececute da anmelden, aber nicht das ausführen als Benutzer. Es ist nämlich der Serverprinzipal "testuser" ist in nt in der Lage, den Zugriff auf die Datenbank "xxx" unter der securty Kontext.
Wenn ich SELECT SYSTEM_USER
nachdem beide Befehle ich sehen, dass es eingestellt ist 'testuser'
Du musst angemeldet sein, um einen Kommentar abzugeben.
execute as login
bietet Identitätswechsel auf den gesamten server, da logins auf server-Ebene. Da die Benutzer definiert sind pro Datenbankexecute as user
Identitätswechsel bezieht sich nur auf eine bestimmte Datenbank, die ist, warum Sie sehen die Fehler, wenn Sie cross-Datenbanken.Beispiel Ausführen, Wie:
CREATE PROCEDURE dbo.MyProcedure
MIT EXECUTE AS OWNER
In diesem Fall werden Sie die Identität des Eigentümers des Moduls aufgerufen wird.
Sie können auch imitieren sich SELBST, ODER der Benutzer das Modul erstellt oder ändert ODER...
imperonate ANRUFER , die es ermöglichen die module zu nehmen auf die permissionsof den aktuellen Benutzer, ODER...
impersonate-BESITZER, die auf die Erlaubnis des Eigentümers der Prozedur aufgerufen wird, ODER...
imitieren, 'user_name', die die Identität eines bestimmten Benutzers ODER einer...
imitieren 'login_name', mit der die Identität eines bestimmten login.
Einstellung die Berechtigung auf Objekte wie gespeicherter Prozeduren können durchgeführt werden, mit "GRANT EXECUTE ON . zu ;
Allerdings können Sie auch wollen, zu gewähren Sicherheit Rechte bei der sowohl die login-und Benutzer-Ebene. Sie bestimmen wollen, und erteilen Sie NUR die notwendigen Rechte
für die Objekte zugreifen müssen (beispielsweise die Ausführung). Betrachten Sie die Verwendung von "AUSFÜHREN ALS" Fähigkeit, die es ermöglicht, die Identitätswechsel eines anderen Benutzers
zum überprüfen der Berechtigungen, die erforderlich sind, um den code auszuführen, OHNE zu gewähren, alle erforderlichen Rechte, um alle zugrunde liegenden Objekte (z.B. Tabellen).
Die EXECUTE-WIE Hinzugefügt werden kann, um gespeicherte Prozeduren, Funktionen, Trigger, etc.
MEISTEN der Zeit, werden Sie nur brauchen, um grant EXECUTE-Rechte für gespeicherte Prozeduren und dann die Rechte erteilt werden, für alle referenzierten Objekte innerhalb der stored proc.
Auf diese Weise, Sie brauchen nicht zu geben, implizite Rechte (Beispiel: um die Daten zu aktualisieren oder rufen Sie zusätzliche procs). Besitzverkettung übernimmt dies für Sie.
Dies ist besonders hilfreich, wenn dynamische sql-oder wenn Sie benötigen, zu erstellen, die erhöhte Sicherheit Aufgaben wie das ERSTELLEN der TABELLE. EXECUTE AS ist ein handliches Werkzeug für diese.
Diesem Beispiel kann helfen, zu klären, alle diese:
Erstellen Sie einen Benutzer mit dem Namen NoPrivUser mit öffentlichen Zugriff auf eine Datenbank (z.B. dbadb)
USE [master]
GEHEN
CREATE LOGIN [NoPrivUser] WITH PASSWORD=N'ABC5%', DEFAULT_DATABASE=[dbadb], CHECK_EXPIRATION=AUF, CHECK_POLICY=AUF
GEHEN
VERWENDEN Sie [DBAdb]
GEHEN
CREATE USER [NoPrivUser] ZUM LOGIN [NoPrivUser]
GEHEN
HINWEIS: der ERSTELLER ODER EIGENTÜMER DIESES VERFAHREN ERFORDERT, dass die CREATE TABLE-RECHTE der innerhalb der Ziel-Datenbank.
verwenden DBAdb
gehen
CREATE PROCEDURE dbo.MyProcedure
MIT EXECUTE AS OWNER
ALS
IF not EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].MyTable') UND Typ (N 'U'))
CREATE TABLE MyTable (PKid int column1 char(10))
INSERT INTO MyTable
VALUES (1,'ABCDEF')
GEHEN
GRANT EXEC ON dbo.MyProcedure ZU NoPrivUser;
GEHEN
-- Nun loggen Sie sich in Ihr Datenbank-server als NoPrivUser und führen Sie den folgenden.
verwenden dbadb
gehen
EXEC dbo.MyProcedure
(1 Zeile(N) betroffen)
Versuchen Sie jetzt, wählen Sie aus der neuen Tabelle, während angemeldet als NoPrivuser.
Erhalten Sie Folgendes:
select * from MyTable
gehen
Meldung 229, Ebene 14, Status 5, Zeile 1
Die SELECT-Berechtigung verweigert wurde, auf das Objekt 'MyTable', Datenbank 'DBAdb", schema' dbo'.
Erwartet wird, da Sie nur lief die Prozedur im Sicherheitskontext des Besitzers während der Anmeldung als NoPrivUser.
NoPrivUser wie keine Rechte, um tatsächlich Lesen Sie die Tabelle. Nur, um die Prozedur auszuführen, die erstellt und fügt die Zeilen.
Mit der EXECUTE AS-Klausel der gespeicherten Prozedur ausgeführt, die im Kontext des objektbesitzers. Dieser code erfolgreich erstellt dbo.MyTable und Zeilen eingefügt werden, erfolgreich.
In diesem Beispiel wird der Benutzer "NoPrivUser" hat absolutey keine Rechte an der Tabelle ändern, oder Lesen oder ändern von Daten in dieser Tabelle.
Es dauert nur auf der Rechte erforderlich diese spezifische Aufgabe, kodiert im Zusammenhang mit diesem Verfahren.
Diese Methode zum erstellen von gespeicherten Prozeduren, die Aufgaben, die erfordern erhöhte Sicherheit Rechte, ohne permanent die Zuordnung dieser Rechte zu kommen, sehr hilfreich sein.
Login-Bereich ist auf der server-Ebene beim Benutzer-Bereich ist in der aktuellen Datenbank-Ebene
http://msdn.microsoft.com/en-us/library/ms181362.aspx