sp_setapprole (Transact-SQL)

Gilt für:SQL ServerAzure 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.

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_setapproleaktiviert wurde, wird die Rolle erneut Standard aktiv, bis der Benutzer entweder die Verbindung vom Server trennt oder ausgeführt wirdsp_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 AsDeF00MbXXaktiviert, 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

Im folgenden Beispiel wird die Sales11 -Anwendungsrolle mit dem Kennwort fdsd896#gfdbfdkjgh700mMaktiviert, 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