sp_setapprole (Transact-SQL)

Aktiviert die Berechtigungen, die mit einer Anwendungsrolle in der aktuellen Datenbank verknüpft sind.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

sp_setapprole [ @rolename = ] 'role',
    [ @password = ] { encrypt N'password' } 
      |
        'password' [ , [ @encrypt = ] { 'none' | 'odbc' } ]
        [ , [ @fCreateCookie = ] true | false ]
    [ , [ @cookie = ] @cookie OUTPUT ]

Argumente

  • [ @rolename = ] 'role'
    Der Name der in der aktuellen Datenbank definierten Anwendungsrolle. role ist vom Datentyp sysname und hat keinen Standardwert. role muss in der aktuellen Datenbank vorhanden sein.

  • [ @password = ] { encrypt N'password' }
    Das Kennwort, das zum Aktivieren der Anwendungsrolle erforderlich ist. password ist vom Datentyp sysname und hat keinen Standardwert. password kann mit der ODBC-Funktion encrypt verborgen werden. Wenn Sie die encrypt-Funktion verwenden, muss das Kennwort in eine Unicode-Zeichenfolge konvertiert werden, indem N vor dem ersten Anführungszeichen platziert wird.

    Die encrypt-Option wird für Verbindungen, die SqlClient verwenden, nicht unterstützt.

    Wichtiger HinweisWichtig

    Die ODBC-Funktion encrypt stellt keine Verschlüsselung bereit. Diese Funktion ist zum Schützen von Kennwörtern, die über ein Netzwerk übertragen werden, nicht empfehlenswert. Verwenden Sie SSL oder IPSec, um diese Informationen über ein Netzwerk zu übertragen.

  • @encrypt = 'none'
    Gibt an, dass keine Verbergung verwendet wird. Das Kennwort wird als Nur-Text an SQL Server übergeben. Dies ist die Standardeinstellung.

  • @encrypt= 'odbc'
    Gibt an, dass ODBC das Kennwort mithilfe der ODBC-Funktion encrypt verbirgt, bevor das Kennwort an SQL Server Database Engine (Datenbankmodul) gesendet wird. Dies ist nur mit einem ODBC-Client oder dem OLE DB-Anbieter für SQL Server möglich.

  • [ @fCreateCookie = ] true | false
    Gibt an, ob ein Cookie erstellt werden soll. true wird implizit in 1 konvertiert, false wird implizit in 0 konvertiert.

  • [ @cookie = ] @cookie OUTPUT
    Gibt einen Ausgabeparameter an, in dem das Cookie enthalten sein soll. Das Cookie wird nur generiert, wenn @fCreateCookie den Wert true aufweist. Der Datentyp ist varbinary(8000).

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Hinweise

Nachdem eine Anwendungsrolle mithilfe von sp_setapprole aktiviert wurde, bleibt die Rolle aktiv, bis der Benutzer die Verbindung mit dem Server trennt oder sp_unsetapprole ausführt. sp_setapprole kann nur durch direkte Transact-SQL-Anweisungen ausgeführt werden. sp_setapprole kann nicht innerhalb einer anderen gespeicherten Prozedur oder innerhalb einer benutzerdefinierten Transaktion ausgeführt werden.

Eine Übersicht über Anwendungsrollen finden Sie unter Anwendungsrollen.

SicherheitshinweisSicherheitshinweis

Verwenden Sie immer eine verschlüsselte Verbindung, wenn Sie die Anwendungsrolle aktivieren, um das Kennwort für die Anwendungsrolle zu schützen, wenn es über ein Netzwerk übertragen wird.

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 unidirektionaler Hash gespeichert. Aus Gründen der Kompatibilität mit früheren Versionen von SQL Server wird die Richtlinie für Kennwortkomplexität nicht von sp_addapprole erzwungen. Sie können die Richtlinie für Kennwortkomplexität erzwingen, indem Sie CREATE APPLICATION ROLE verwenden.

Berechtigungen

Erfordert die Mitgliedschaft in der public-Rolle und Kenntnis des Kennworts für die Rolle.

Beispiele

A. Aktivieren einer Anwendungsrolle ohne die encrypt-Option

Im folgenden Beispiel wird eine Anwendungsrolle namens SalesAppRole mit dem Nur-Text-Kennwort AsDeF00MbXX sowie mit den Berechtigungen aktiviert, die speziell für die vom aktuellen Benutzer verwendete Anwendung entworfen wurden.

EXEC sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO

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 sp_setapprole 'Sales11', 'fdsd896#gfdbfdkjgh700mM'
    , @fCreateCookie = true, @cookie = @cookie OUTPUT;
-- The application role is now active.
SELECT USER_NAME();
-- This will return the name of the application role, Sales11.
EXEC sp_unsetapprole @cookie;
-- The application role is no longer active.
-- The original context has now been restored.
GO
SELECT USER_NAME();
-- This will return the name of the original user. 
GO