sp_setapprole (Transact-SQL)
啟動目前資料庫中,與應用程式角色相關聯的權限。
適用於:SQL Server (SQL Server 2008 至目前版本)。 |
語法
sp_setapprole [ @rolename = ] 'role',
[ @password = ] { encrypt N'password' }
|
'password' [ , [ @encrypt = ] { 'none' | 'odbc' } ]
[ , [ @fCreateCookie = ] true | false ]
[ , [ @cookie = ] @cookie OUTPUT ]
引數
[ @rolename = ] 'role'
目前資料庫所定義之應用程式角色的名稱。 role 是 sysname,沒有預設值。 role 必須存在目前的資料庫中。[ @password = ] { encrypt N'password' }
啟動應用程式角色所需的密碼。 password 是 sysname,沒有預設值。 其可以用 ODBC encrypt 函數模糊化 password。 當您使用 encrypt 函數時,必須在第一個引號之前放置 N,將密碼轉換成 Unicode 字串。不支援在使用 SqlClient 的連接上使用加密選項。
重要事項
ODBC encrypt 函數不提供加密。您不應該依賴這個函數來保護透過網路傳輸的密碼。若要透過網路傳輸這項資訊,請使用 SSL 或 IPSec。
@encrypt = 'none'
指定不使用模糊化。 密碼會以純文字格式傳遞至 SQL Server。 這是預設值。@encrypt= 'odbc'
指定 ODBC 在將密碼傳送至 SQL Server Database Engine 之前會利用 ODBC encrypt 函數來模糊化密碼。 只有在使用 ODBC 用戶端或 SQL Server 的 OLE DB Provider 時才可以作這項指定。[ @fCreateCookie = ] true | false
指定是否要建立 Cookie。 true 會隱含地轉換成 1。 false 會隱含地轉換成 0。[ @cookie = ] @cookie OUTPUT
指定輸出參數要包含該 Cookie。 僅當 @fCreateCookie 的值為 true 時,才會產生 Cookie。 varbinary(8000)注意
sp_setapprole 的 Cookie OUTPUT 參數目前記載成 varbinary(8000),是正確的長度上限。但目前的實作會傳回 varbinary(50)。應用程式應繼續保留 varbinary(8000),如此後續版本的 Cookie 傳回大小如有增加,應用程式才可繼續正常地運作。
傳回碼值
0 (成功) 和 1 (失敗)
備註
在使用 sp_setapprole 啟動應用程式角色之後,角色會保持使用中的狀態,直到使用者與伺服器中斷連接或執行 sp_unsetapprole 為止。 sp_setapprole 只可由直接 Transact-SQL 陳述式執行。 sp_setapprole 不可在其他預存程序或使用者定義的異動中執行。
如需應用程式角色的概觀,請參閱<應用程式角色>。
![]() |
---|
若要保護透過網路傳輸的應用程式角色密碼,您一定要在啟用應用程式角色時使用加密的連接。 SqlClient 不支援 Microsoft ODBC encrypt 選項。如果必須保存認證,請利用 crypto API 函數來加密認證。password 參數會儲存為單向雜湊。若要保留與舊版 SQL Server 的相容性,請勿利用 sp_addapprole 強制執行密碼複雜性原則。若要強制執行密碼複雜性原則,請使用 CREATE APPLICATION ROLE。 |
權限
需要 public 中的成員資格,且需要知道角色的密碼。
範例
A.不使用加密選項而啟動應用程式角色
下列範例會啟動一個名為 SalesAppRole 的應用程式角色,其純文字密碼為 AsDeF00MbXX,而且是利用專門針對目前的使用者使用之應用程式設計的權限來建立的。
EXEC sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO
B.啟動內含 Cookie 的應用程式角色,再還原成原始內容
下列範例會啟動含有密碼 fdsd896#gfdbfdkjgh700mM 的 Sales11 應用程式角色,然後建立 Cookie。 這個範例會傳回目前使用者的名稱,然後執行 sp_unsetapprole 來還原為原始內容。
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
請參閱
參考
CREATE APPLICATION ROLE (Transact-SQL)