共用方式為


SQL Server 中的授權和權限 (ADO.NET)

更新: November 2007

當您建立資料庫物件時,必須明確地授與權限,讓使用者能夠存取這些物件。每個安全性實體物件都具有可利用權限陳述式來授與主體的權限。

最小權限的原則

使用最小權限使用者帳戶 (LUA) 方法來開發應用程式是抵禦安全性威脅之深入防禦策略中很重要的一部分。LUA 方法可確保使用者遵循最小權限的原則而且永遠以受限制的使用者帳戶進行登入。管理工作是使用固定伺服器角色區分的,而且 sysadmin 固定伺服器角色的使用方式嚴格受限。

授與權限給資料庫使用者時,請務必遵守最小權限的原則。請授與完成指定工作所需的最小權限給使用者或角色。

安全性注意事項:

使用 LUA 方法來開發和測試應用程式會對開發程序造成某種程度的困難。就建立物件和撰寫程式碼而言,以系統管理員或資料庫擁有者的身分登入會比使用 LUA 帳戶更方便。不過,當最小權限的使用者嘗試執行需要更高權限才能正常運作的應用程式時,使用高權限帳戶來開發應用程式可能會模糊化縮減功能的影響。授與過高權限給使用者以便重新取得喪失的功能可能會讓應用程式容易遭受攻擊。以 LUA 帳戶登入並設計、開發和測試應用程式會對安全性規劃強制執行規範的方法,進而排除不愉快的意外情況以及授與更高權限當做快速修正的誘惑。即使您的應用程式必須使用 Windows 驗證進行部署,您還是可以使用 SQL Server 登入進行測試。

以角色為基礎的權限

授與權限給角色而非使用者可簡化安全性管理作業。指派給角色的權限集合會由該角色的所有成員繼承。在某個角色中加入或移除使用者會比針對個別使用者重新建立不同的權限集合更容易。雖然角色可以巢狀化,但是巢狀層級過多可能會降低效能。此外,您也可以將使用者加入至固定資料庫角色,以便簡化指派權限的作業。

從 SQL Server 2005 開始,您就可以在結構描述層級授與權限。使用者會自動繼承在該結構描述中建立之所有新物件的權限。您不需要在建立新物件時授與權限。

透過程序性程式碼授與權限

透過預存程序 (Stored Procedure) 和使用者定義函式等模組來封裝資料存取會對應用程式提供額外的保護層。您可以單獨授與預存程序或函式的權限而拒絕基礎物件 (例如資料表) 的權限,藉以防止使用者直接與資料庫物件進行互動。SQL Server 可透過擁有權鏈結達到此目的。

權限陳述式

下表將描述三個 Transact-SQL 權限陳述式。

權限陳述式

描述

GRANT

授與權限。

REVOKE

撤銷權限。這是新物件的預設狀態。從某個使用者或角色中撤銷的權限仍然可以繼承自被指派主體的其他群組或角色。

DENY

DENY 會撤銷權限,讓它無法被繼承。DENY 的優先順序高於所有權限,但是 DENY 無法套用至物件擁有者或 sysadmin 的成員。如果您針對 public 角色拒絕 (DENY) 某個物件的權限,就會一併拒絕所有使用者和角色,但物件擁有者和 sysadmin 成員除外。

  • GRANT 陳述式可以指派權限給某個群組或角色,而資料庫角色可以繼承這些權限。不過,DENY 陳述式的優先順序高於所有其他權限陳述式。因此,已經被拒絕某個權限的使用者無法從另一個角色繼承該權限。
注意事項:

sysadmin 固定伺服器角色的成員和物件擁有者無法被拒絕權限。

擁有權鏈結

SQL Server 會確保只有已經被授與權限的主體才能存取物件。當多個資料庫物件彼此存取時,這個序列 (Sequence) 便稱為鏈結。當 SQL Server 周遊鏈結中的連結時,它評估權限的方式與個別存取每個項目時的處理方式不同。透過鏈結存取物件時,SQL Server 會先比較物件的擁有者與呼叫物件的擁有者 (鏈結中的上一個連結)。如果這兩個物件具有相同的擁有者,系統就不會檢查參考物件的權限。只要某個物件存取具有不同擁有者的另一個物件,擁有權鏈結就會中斷而且 SQL Server 必須檢查呼叫端的安全性內容。

程序性程式碼和擁有權鏈結

假設某位使用者被授與從資料表中選取資料之預存程序的執行權限。如果此預存程序與資料表具有相同的擁有者,使用者就不需要被授與資料表的任何權限,甚至可以被拒絕權限。不過,如果此預存程序與資料表具有不同的擁有者,SQL Server 就必須檢查使用者對資料表擁有的權限,然後再允許存取資料。

注意事項:

在動態 SQL 陳述式的情況中,擁有權鏈結並不適用。為了呼叫執行 SQL 陳述式的程序,呼叫端必須被授與基礎資料表的權限,因而讓應用程式容易遭受 SQL 插入式攻擊。SQL Server 2005 引進了不需要授與基礎資料表之權限的全新機制,例如模擬以及使用憑證來簽署模組。這些機制也可以搭配 CLR 預存程序使用。

外部資源

如需詳細資訊,請參閱下列資源。

資源

描述

權限 (英文),《SQL Server 2008 線上叢書》

包含說明權限階層、目錄檢視以及固定伺服器與資料庫角色之權限的主題。

權限擁有權鏈結,《SQL Server 2005 線上叢書》

說明權限階層、目錄檢視以及固定伺服器與資料庫角色之權限的主題。

管理權限使用擁有權鏈結 (英文),《SQL Server 2000 線上叢書》

說明授權與管理權限的主題。

請參閱

概念

SQL Server 中的應用程式安全性案例 (ADO.NET)

SQL Server 中的驗證 (ADO.NET)

SQL Server 中的伺服器和資料庫角色 (ADO.NET)

SQL Server 中的擁有權和使用者結構描述分隔 (ADO.NET)

其他資源

保護 ADO.NET 應用程式的安全