應用程式角色

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

應用程式角色是資料庫主體,可以讓應用程式以其自有、類似使用者的權限來執行。 利用應用程式角色,您可以只允許透過特定應用程式來連接的使用者存取特定的資料。 不像資料庫角色,應用程式角色不包含任何成員,且依預設是非使用中狀態。 應用程式角色是使用 sp_setapprole(需要有密碼) 予以啟用。 因為應用程式角色是資料庫層級主體,所以它們只可以透過那些資料庫中授與 guest的權限來存取其他資料庫。 因此,其他資料庫中的應用程式角色無法存取任何已停用 guest 的資料庫。

在 SQL Server 中,因為應用程式角色未與伺服器層級主體建立關聯,所以應用程式角色無法存取伺服器層級中繼資料。 若要停用這項限制,並藉此允許應用程式角色存取伺服器層級中繼資料,請使用 -T4616 或 DBCC TRACEON (4616, -1) 來設定全域追蹤旗標 4616。 如果不想啟用此追蹤旗標,可以使用認證簽署的預存程序來允許應用程式角色檢視伺服器狀態。 如需範例程式碼,請參閱 GitHub 上的此範例指令碼

與應用程式角色連接

下列步驟是應用程式角色切換安全性內容的程序:

  1. 使用者執行用戶端應用程式。

  2. 用戶端應用程式以使用者身分連線到 SQL Server 的執行個體。

  3. 接著,應用程式利用只有該應用程式知道的密碼執行 sp_setapprole 預存程序。

  4. 若應用程式角色的名稱與密碼是有效的,則會啟用該應用程式角色。

  5. 此時,連接會遺失使用者的權限,並假設應用程式角色的權限。

透過應用程式角色取得的權限在連接階段中仍為有效。

在舊版 SQL Server 中,使用者在啟動應用程式角色後要重新取得其原始資訊安全內容的唯一方式,就是中斷連線後再重新連線到 SQL Server。 從 SQL Server 2005 (9.x) 開始,sp_setapprole 有一個選項可建立 Cookie。 此 Cookie 包含在啟用應用程式角色之前的內容資訊。 然後,sp_unsetapprole 預存程序會使用 Cookie 將工作階段還原為其原始內容。 如需這個新選項的資訊及範例,請參閱 sp_setapprole (Transact-SQL)sp_unsetapprole (Transaction-SQL)

重要

SqlClient 不支援 ODBC [加密] 選項。 當您透過網路傳輸機密資訊時,請使用傳輸層安全性 (TLS) (先前稱為安全通訊端層 (SSL)) 或 IPsec 來加密該通道。 如果您必須將認證保存在用戶端應用程式中,請使用 Cypto API 函數來加密認證。 在 SQL Server 2005 (9.x) 和更新版本中,password 參數會儲存為單向雜湊。

Task 類型
建立應用程式角色。 建立應用程式角色CREATE APPLICATION ROLE (Transact-SQL)
改變應用程式角色。 ALTER APPLICATION ROLE (Transact-SQL)
刪除應用程式角色。 DROP APPLICATION ROLE (Transact-SQL)
使用應用程式角色。 sp_setapprole (Transact-SQL)

另請參閱

保護 SQL Server 的安全