共用方式為


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

更新: November 2007

SQL Server 安全性的核心概念是物件的擁有者具有不可撤銷的物件管理權限。您無法移除物件擁有者的權限,而使用者只要擁有資料庫中的物件,就無法將其從資料庫卸除。在 SQL 2000 中,如果使用者在建立物件時未指定擁有者,該使用者就會成為該物件的擁有者。物件擁有者具有不可撤銷的物件管理權限,所以如果有多個使用者擁有物件,就可能會造成問題。讓單一擁有者擁有所有的資料庫物件,可以利用擁有權鏈結而簡化 SQL Server 2000 中的權限管理,如 SQL Server 中的授權和權限 (ADO.NET)所述。

注意事項:

sysadmin 固定伺服器角色和 db_owner 固定資料庫角色的成員,也對資料庫中的所有物件具有不可撤銷的擁有權權限。

SQL Server 2005 之前的 SQL Server 版本則使用下列的四部分 (Four-Part) 命名語法來參考物件。

Server.Database.ObjectOwner.DatabaseObject

如果資料庫使用者 Bob 和 Sue 都各自建立 Table1,則您需要使用完整的名稱。如果系統管理員或資料庫擁有者建立物件,則該物件是由 dbo 使用者帳戶而不是個別的使用者擁有。

SELECT col1 FROM Bob.Table1
SELECT col1 FROM Sue.Table1
SELECT col1 FROM dbo.Table1
注意事項:

在參考 dbo 所擁有的物件時,並不需要使用 ObjectOwner.DatabaseObject 語法,雖然這麼做比較有效率。如果未提供擁有者名稱,則 SQL Server 2000 會先檢查物件是否存在於目前使用者的名稱之下,然後再檢查該物件是否由 dbo 擁有。提供雙部分 (Two-Part) 名稱可以節省額外的步驟。

使用者結構描述分隔

SQL Server 2005 引進了使用者結構描述分隔,此功能可讓資料庫物件權限的管理更有彈性。「結構描述」(Schema) 是資料庫物件的命名容器,可讓您將物件分隔到不同的命名空間 (Namespace) 中。例如,AdventureWorks 範例資料庫包含 Production、Sales 和 HumanResources 的結構描述。

參考物件的四部分命名語法會指定結構描述名稱。

Server.Database.DatabaseSchema.DatabaseObject

結構描述擁有者和權限

結構描述可以由任何資料庫主體所擁有,而單一的主體可以擁有多個結構描述。您可以將安全性規則套用至結構描述,而結構描述中的所有物件都會繼承這些規則。一旦設定結構描述的存取權限之後,就會在新物件加入至結構描述時自動套用這些權限。您可以為使用者指派預設的結構描述,而多個資料庫使用者可以共用相同的結構描述。

根據預設,當開發人員建立結構描述中的物件時,這些物件會由擁有該結構描述的安全性主體,而非開發人員所擁有。物件擁有權可以使用 ALTER AUTHORIZATION Transact-SQL 陳述式轉移。結構描述也可以包含由不同使用者所擁有的物件,且具備比指派給該結構描述更多的細微權限,但因為這樣會增加權限管理的複雜度,我們並不建議這麼做。您可以在結構描述之間移動物件,也可以在主體之間轉移結構描述擁有權。您可以卸除資料庫使用者,而不影響結構描述。

內建結構描述

SQL Server 隨附十個預先定義的結構描述,其名稱與內建的資料庫使用者及角色相同。這些主要是為了回溯相容性 (Backward Compatibility) 而提供。如果不需要這些與固定資料庫角色具有相同名稱的結構描述,您可以加以卸除,但下列結構描述是不能卸除的:

  • dbo

  • guest

  • sys

  • INFORMATION_SCHEMA

如果將這些結構描述從模型資料庫卸除,它們就不會出現在新資料庫中。

注意事項:

sys 和 INFORMATION_SCHEMA 結構描述是保留給系統物件使用。您無法在這些結構描述中建立物件,也無法加以卸除。

dbo 結構描述

dbo 結構描述是新建立資料庫的預設結構描述。dbo 結構描述是由 dbo 使用者帳戶所擁有。依預設,使用 CREATE USER Transact-SQL 命令所建立的使用者都會將 dbo 當做預設的結構描述。

被指派 dbo 結構描述的使用者並不會繼承 dbo 使用者帳戶的權限。使用者不會從結構描述繼承權限;結構描述權限是由結構描述中包含的資料庫物件所繼承。

注意事項:

當資料庫物件在 SQL Server 2005 中是使用單一部分名稱來參考時,SQL Server 會先在使用者的預設結構描述中搜尋。如果在該處找不到物件,SQL Server 接著會在 dbo 結構描述中尋找。如果在 dbo 結構描述中也找不到物件,就會傳回錯誤。

外部資源

如需有關物件擁有權和結構描述的詳細資訊,請參閱下列資源。

資源

描述

使用者結構描述分隔 (英文),《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 應用程式的安全