sp_setapprole (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
會隱含轉換成 1
。 false
會隱含轉換成 0
。
[ @cookie = ] Cookie OUTPUT
指定要包含 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
B. 使用 Cookie 啟動應用程式角色,然後還原為原始內容
下列範例會 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