sp_setapprole (Transact-SQL)

適用於:SQL ServerAzure SQL Database

啟動與目前資料庫中應用程式角色相關聯的許可權。

Transact-SQL 語法慣例

語法

sp_setapprole
    [ @rolename = ] N'rolename'
    , [ @password = ] N'password'
    [ , [ @encrypt = ] 'encrypt' ]
    [ , [ @fCreateCookie = ] fCreateCookie ]
    [ , [ @cookie = ] cookie OUTPUT ]
[ ; ]

引數

[ @rolename = ] N'rolename'

目前資料庫中定義的應用程式角色名稱。 @rolename為 sysname,沒有預設值。 @rolename必須存在於目前的資料庫中。

[ @password = ] { encrypt N'password' }

啟用應用程式角色所需的密碼。 @password為 sysname,沒有預設值。 @password可以使用 ODBC encrypt 函式來模糊化。 當您使用 函 encrypt 式時,必須將密碼轉換成 Unicode 字串,方法是放在 N 第一個引號之前。

使用 SqlClient 的連線不支援加密選項。

重要

ODBC encrypt 函式不提供加密。 您不應該依賴此函式來保護透過網路傳輸的密碼。 如果此資訊會透過網路傳輸,請使用 TLS 或 IPSec。

[ @encrypt = ] { 'none' |'odbc' }

指定加密類型,再將密碼傳送至 SQL Server 資料庫引擎。 @encrypt為 varchar(10),而且可以是下列其中一個值。

Description
none (預設值) 指定不使用混淆。 密碼會以純文本形式傳遞至 SQL Server。
odbc 指定 ODBC 在將密碼傳送至 SQL Server 資料庫引擎 之前,先使用 ODBC encrypt 函式模糊化密碼。 只有在您使用 ODBC 用戶端或 OLE DB Provider for SQL Server 時,才能指定此值。

[ @fCreateCookie = ] { 'true' |'false' }

指定是否要建立 Cookie。 @fCreateCookie為 bit,預設值為 0

true 會隱含轉換成 1false 會隱含轉換成 0

指定要包含 Cookie 的輸出參數。 @cookie是 varbinary(8000) 類型的 OUTPUT 參數。 只有當 @fCreateCookie 的值true時,才會產生Cookie。

注意

雖然目前的實作會 傳回 varbinary(50),但應用程式應該保留記載的 varbinary(8000),如此一來,如果 Cookie 傳回大小在未來版本中增加,應用程式會繼續正常運作。

傳回碼值

0 (成功)和 1 (失敗)。

備註

使用 sp_setapprole啟用應用程式角色之後,角色會保持作用中,直到用戶中斷與伺服器連線或執行 sp_unsetapprole為止。 您無法在另一個預存程式、觸發程式或使用者定義交易內使用 sp_setapprole 。 它只能以直接 Transact-SQL 語句的形式執行。

如需應用程式角色的概觀,請參閱 應用程式角色

啟用應用程式角色時,您應該一律使用加密連線,以在透過網路傳輸應用程式角色時保護應用程式角色密碼。

SqlClient 不支援 Microsoft ODBC encrypt 選項。 如果您必須儲存認證,請使用加密 API 函式來加密認證。 參數 @password 會儲存為單向哈希。 若要保留與舊版 SQL Server 的相容性, sp_addapprole 請勿強制執行密碼複雜度原則。 若要強制執行密碼複雜度原則,請使用 CREATE APPLICATION ROLE

權限

需要公開的成員資格,以及角色的密碼知識。

範例

A. 在沒有加密選項的情況下啟動應用程式角色

下列範例會使用純文本密碼AsDeF00MbXX來啟動名為 SalesAppRole的應用程式角色,此角色是以目前使用者所使用之應用程式所設計的許可權所建立。

EXEC sys.sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO

下列範例會 Sales11 使用密碼 fdsd896#gfdbfdkjgh700mM啟動應用程式角色,並建立 Cookie。 此範例會傳回目前使用者的名稱,然後執行 sp_unsetapprole來還原為原始內容。

DECLARE @cookie VARBINARY(8000);

EXEC sys.sp_setapprole 'Sales11',
    'fdsd896#gfdbfdkjgh700mM',
    @fCreateCookie = true,
    @cookie = @cookie OUTPUT;

應用程式角色現在為作用中。 USER_NAME()會傳回應用程式角色的名稱。 Sales11

SELECT USER_NAME();

取消設定應用程式角色。

EXEC sys.sp_unsetapprole @cookie;
GO

應用程式角色不再作用中。 原始內容會還原。 USER_NAME() 會傳回原始用戶的名稱。

SELECT USER_NAME();
GO