共用方式為


sp_setapprole (Transact-SQL)

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

主題連結圖示Transact-SQL 語法慣例

語法

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)

傳回碼值

0 (成功) 和 1 (失敗)

備註

利用 sp_setapprole 啟動應用程式角色之後,該角色會保持作用中,直到使用者從伺服器中斷連接或執行 sp_unsetapprole。只能利用直接 Transact-SQL 陳述式執行 sp_setapprolesp_setapprole 無法在其他預存程序內或在使用者自訂交易內執行。

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

安全性注意事項安全性注意事項

若要保護透過網路傳輸的應用程式角色密碼,您一定要在啟用應用程式角色時使用加密的連接。

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

權限

需要 public 中的成員資格,且需要知道角色的密碼。

範例

A. 在不使用 encrypt 選項的情況下啟動應用程式角色

下列範例會啟動一個名為 SalesAppRole 的應用程式角色,其純文字密碼為 AsDeF00MbXX,而且是利用專門針對目前的使用者使用之應用程式設計的權限來建立的。

EXEC sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO

下列範例會啟動含有密碼 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