sp_setapprole (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank
Aktiviert die Berechtigungen, die mit einer Anwendungsrolle in der aktuellen Datenbank verknüpft sind.
Transact-SQL-Syntaxkonventionen
Syntax
sp_setapprole
[ @rolename = ] N'rolename'
, [ @password = ] N'password'
[ , [ @encrypt = ] 'encrypt' ]
[ , [ @fCreateCookie = ] fCreateCookie ]
[ , [ @cookie = ] cookie OUTPUT ]
[ ; ]
Argumente
[ @rolename = ] N'rolename'
Der Name der in der aktuellen Datenbank definierten Anwendungsrolle. @rolename ist "sysname" ohne Standard. @rolename muss in der aktuellen Datenbank vorhanden sein.
[ @password = ] { encrypt N'password' }
Das zum Aktivieren der Anwendungsrolle erforderliche Kennwort. @password ist "sysname" ohne Standard. @password können mithilfe der ODBC-Funktion encrypt
verschleiert werden. Wenn Sie die encrypt
Funktion verwenden, muss das Kennwort in eine Unicode-Zeichenfolge konvertiert werden, indem sie vor dem ersten Anführungszeichen platziert N
wird.
Die Verschlüsselungsoption wird für Verbindungen, die SqlClient verwenden, nicht unterstützt.
Wichtig
Die ODBC-Funktion encrypt
stellt keine Verschlüsselung bereit. Sie sollten sich nicht auf diese Funktion verlassen, um Kennwörter zu schützen, die über ein Netzwerk übertragen werden. Wenn diese Informationen über ein Netzwerk übertragen werden, verwenden Sie TLS oder IPSec.
[ @encrypt = ] { 'none' | 'odbc' }
Gibt den Verschlüsselungstyp an, bevor das Kennwort an die SQL Server-Datenbank-Engine gesendet wird. @encrypt ist varchar(10) und kann einer dieser Werte sein.
Wert | Beschreibung |
---|---|
none (Standardwert) |
Gibt an, dass keine Verschleierung verwendet wird. Das Kennwort wird als Nur-Text an SQL Server übergeben. |
odbc |
Gibt an, dass ODBC das Kennwort mithilfe der ODBC-Funktion encrypt verschleiert, bevor das Kennwort an die SQL Server-Datenbank-Engine gesendet wird. Dieser Wert kann nur angegeben werden, wenn Sie entweder einen ODBC-Client oder den OLE DB-Anbieter für SQL Server verwenden. |
[ @fCreateCookie = ] { 'true' | 'false' }
Gibt an, ob ein Cookie erstellt werden soll. @fCreateCookie ist bit, mit einem Standardwert von 0
.
true
wird implizit in 1
. false
wird implizit in 0
.
[ @cookie = ] Cookie OUTPUT
Gibt einen Ausgabeparameter an, in dem das Cookie enthalten sein soll. @cookie ist ein OUTPUT-Parameter vom Typ varbinary(8000). Das Cookie wird nur generiert, wenn der Wert von @fCreateCookie ist true
.
Hinweis
Obwohl die aktuelle Implementierung varbinary(50) zurückgibt, sollten Anwendungen das dokumentierte varbinary(8000)-Element reservieren, damit die Anwendung weiterhin ordnungsgemäß funktioniert, wenn die Cookie-Rückgabegröße in einer zukünftigen Version zunimmt.
Rückgabecodewerte
0
(Erfolg) und 1
(Fehler).
Hinweise
Nachdem eine Anwendungsrolle mithilfe sp_setapprole
aktiviert wurde, bleibt die Rolle aktiv, bis der Benutzer entweder die Verbindung vom Server trennt oder ausgeführt wird sp_unsetapprole
. Sie können nicht in einer anderen gespeicherten Prozedur, in einem Trigger oder innerhalb einer benutzerdefinierten Transaktion verwendet werden sp_setapprole
. Sie kann nur als direkte Transact-SQL-Anweisungen ausgeführt werden.
Eine Übersicht über Anwendungsrollen finden Sie unter Application Roles.
Sie sollten beim Aktivieren einer Anwendungsrolle immer eine verschlüsselte Verbindung verwenden, um das Anwendungsrollenkennwort zu schützen, wenn Sie sie über ein Netzwerk übertragen.
Die Microsoft ODBC-Option encrypt
wird von SqlClient nicht unterstützt. Wenn Sie Anmeldeinformationen speichern müssen, verschlüsseln Sie sie mit den CryptoAPI-Funktionen. Der Parameter @password wird als unidirektionales Hash gespeichert. Um die Kompatibilität mit früheren Versionen von SQL Server beizubehalten, sp_addapprole
erzwingt die Kennwortkomplexitätsrichtlinie nicht. Verwenden Sie CREATE APPLICATION ROLE, um die Richtlinie zur Kennwortkomplexität zu erzwingen.
Berechtigungen
Erfordert die Mitgliedschaft in der öffentlichkeit und kenntnisse des Kennworts für die Rolle.
Beispiele
A. Aktivieren einer Anwendungsrolle ohne die Verschlüsselungsoption
Im folgenden Beispiel wird eine Anwendungsrolle mit dem Namen SalesAppRole
"Nur-Text"-Kennwort AsDeF00MbXX
aktiviert, die mit Berechtigungen erstellt wurde, die für die Anwendung erstellt wurden, die vom aktuellen Benutzer verwendet wird.
EXEC sys.sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO
B. Aktivieren einer Anwendungsrolle mit einem Cookie und anschließendes Zurücksetzen auf den ursprünglichen Kontext
Im folgenden Beispiel wird die Sales11
-Anwendungsrolle mit dem Kennwort fdsd896#gfdbfdkjgh700mM
aktiviert, und es wird ein Cookie erstellt. Im Beispiel wird der Name des aktuellen Benutzers zurückgegeben, und der Kontext wird anschließend durch Ausführen von sp_unsetapprole
auf den ursprünglichen Kontext zurückgesetzt.
DECLARE @cookie VARBINARY(8000);
EXEC sys.sp_setapprole 'Sales11',
'fdsd896#gfdbfdkjgh700mM',
@fCreateCookie = true,
@cookie = @cookie OUTPUT;
Die Anwendungsrolle ist jetzt aktiv. USER_NAME()
gibt den Namen der Anwendungsrolle zurück, Sales11
.
SELECT USER_NAME();
Aufheben der Anwendungsrolle.
EXEC sys.sp_unsetapprole @cookie;
GO
Die Anwendungsrolle ist nicht mehr aktiv. Der ursprüngliche Kontext wird wiederhergestellt. USER_NAME()
gibt den Namen des ursprünglichen Benutzers zurück.
SELECT USER_NAME();
GO