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)