使用者結構描述分隔

結構描述的行為在 SQL Server 2005 中已改變。結構描述不再等於資料庫使用者;每一個結構描述現在都是獨立存在的相異命名空間,與建立它的資料庫使用者無關。換句話說,結構描述只是物件的容器。任何使用者都可以擁有結構描述,而它的擁有權是可轉移的。

新的行為

結構描述與擁有權的分開具有重要的含意:

  • 結構描述的擁有權以及結構描述範圍內的安全性實體是可轉移的。如需詳細資訊,請參閱<ALTER AUTHORIZATION (Transact-SQL)>。

  • 物件可以在結構描述之間移動。如需詳細資訊,請參閱<ALTER SCHEMA (Transact-SQL)>。

  • 單一結構描述可以包含由多個資料庫使用者所擁有的物件。

  • 多個資料庫使用者可以共用單一的預設結構描述。

  • 相較於舊版,可以更精確地管理結構描述及結構描述所含安全性實體上的權限。如需詳細資訊,請參閱<GRANT 結構描述權限 (Transact-SQL)>和<GRANT 物件權限 (Transact-SQL)>。

  • 結構描述可由任何資料庫主體擁有。這包括角色和應用程式角色。

  • 不需卸除對應結構描述中的物件,即可卸除資料庫使用者。

  • 如果針對舊版 SQL Server 所撰寫的程式碼假設結構描述等同於資料庫使用者,則這個程式碼可能會傳回不正確的結果。

  • 針對舊版 SQL Server 所設計的目錄檢視可能傳回不正確的結果。這包括 sysobjects。

新目錄檢視

從 SQL Server 2005 開始,結構描述就是反映在中繼資料內的明確實體;因此,結構描述只能有一位擁有者,但是單一使用者可以擁有多個結構描述。這種複雜的關係不會反映在 SQL Server 2000 系統資料表中,因此 SQL Server 2005 導入新的目錄檢視,以便準確反映新的中繼資料。

下表將顯示 SQL Server 2000 系統資料表與對等 SQL Server 2005 及更新版本目錄檢視之間的對應。

SQL Server 2000 系統資料表

SQL Server 2005 及更新版本的目錄檢視

sysusers

sys.database_principals

sys.schemas

syslogins

sys.server_principals

SQL Server 2005 導入了 250 個以上的新目錄檢視。我們強烈建議您使用新的目錄檢視來存取中繼資料。如需詳細資訊,請參閱<目錄檢視 (Transact-SQL)>。

新的 DDL 陳述式可能會使系統中繼資料變得複雜,而無法正確反映於舊版目錄檢視 (例如 sysobjects) 中。在此範例中,sysobjects 所傳回的使用者識別碼和結構描述名稱未同步,而且不會反映 SQL Server 2005 所導入之使用者和結構描述之間的差別。

use tempdb
go
create login u1 with password = 'Mdfjd$sakj943857l7sdfh##30'
create user u1 with default_schema = u1
go
grant create table to u1 
go
create schema sch1
go
create schema u1 authorization u1
go
execute as user = 'u1'
go
create table t1(c1 int)
go
revert
go
select user_name(uid) , * from sysobjects where name = 't1'
go
警告注意事項警告

您必須在任何用到下列任一 DDL 陳述式的資料庫中使用新的目錄檢視:CREATE/ALTER/DROP SCHEMA;CREATE/ALTER/DROP USER;CREATE/ALTER/DROP ROLE;CREATE/ALTER/DROP APPROLE;ALTER AUTHORIZATION。

預設結構描述

為了解析不完整的安全性實體名稱,SQL Server 2000 會使用名稱解析來檢查呼叫資料庫使用者所擁有的結構描述以及 dbo 所擁有的結構描述。

從 SQL Server 2005 開始,每位使用者都有預設結構描述。預設結構描述可以使用 CREATE USER 或 ALTER USER 陳述式的 DEFAULT_SCHEMA 選項來設定和變更。如果沒有定義 DEFAULT_SCHEMA,資料庫使用者將會使用 dbo 作為其預設的結構描述。