使用者結構描述分隔

更新: 2006 年 12 月 12 日

從 SQL Server 2005 開始,每個物件都屬於資料庫結構描述。資料庫結構描述是與資料庫使用者分開的個別命名空間。您可以將結構描述視為物件的容器。您可以在資料庫中建立和更改結構描述,而且可以將結構描述的存取權授與使用者。任何使用者都可以擁有結構描述,而此結構描述擁有權是可轉移的。

ms190387.note(zh-tw,SQL.90).gif附註:
資料庫結構描與 XML 結構描述不同。如需 XML 結構描述的詳細資訊,請參閱<管理伺服器上的 XML 結構描述集合>。

如需建立資料庫物件結構描述的詳細資訊,請參閱<CREATE SCHEMA (Transact-SQL)>。

新的行為

在舊版 SQL Server 中,資料庫使用者和結構描述在概念上是相同的物件。不過,從 SQL Server 2005 開始,使用者和結構描述就有所分別了,而且結構描述會當做物件的容器使用。

結構描述擁有權的分隔具有重要的含意。在下列各方面,資料庫結構描述對於資料庫物件的安全性提供了更多控制權:

  • 相較於舊版,可以更精確地管理結構描述及結構描述所含安全性實體上的權限。如需詳細資訊,請參閱<GRANT 結構描述權限 (Transact-SQL)>和<GRANT 物件權限 (Transact-SQL)>。
  • 結構描述的擁有權以及結構描述範圍內的安全性實體是可轉移的。如需詳細資訊,請參閱<ALTER AUTHORIZATION (Transact-SQL)>。
  • 物件可以在結構描述之間移動。如需詳細資訊,請參閱<ALTER SCHEMA (Transact-SQL)>。
  • 單一結構描述可以包含由多個資料庫使用者所擁有的物件。
  • 多個資料庫使用者可以共用單一的預設結構描述。
  • 結構描述可由任何資料庫主體擁有。這包括角色和應用程式角色。
  • 不需卸除對應結構描述中的物件,即可卸除資料庫使用者。

資料庫結構描述從之前版本導入其他重要的安全性變更。

  • 如果針對舊版 SQL Server 所撰寫的程式碼假設結構描述等同於資料庫使用者,則這個程式碼可能會傳回不正確的結果。
  • 針對舊版 SQL Server 所設計的目錄檢視可能傳回不正確的結果。這包括 sysobjects
  • 擁有權鏈結和使用者內容切換的行為方式已有所不同,因為使用者可以擁有一個以上的結構描述。如需擁有權鏈結的詳細資訊,請參閱<擁有權鏈結>和<權限階層>。如需內容切換的詳細資訊,請參閱<內容切換>。
  • 在 SQL Server 2000 中,資料庫物件是由使用者所擁有。在 SQL Server 2000 中,資料庫物件的四部分參考為 [DatabaseServer].[DatabaseName].[ObjectOwner].[DatabaseObject]。不過,從 SQL Server 2005 開始,資料庫物件的四部分參考則為 [DatabaseServer].[DatabaseName].[DatabaseSchema].[DatabaseObject]

物件擁有權變更

下列物件的擁有者屬性會參考結構描述,而非使用者:

  • CREATE TABLE
  • ALTER TABLE
  • CREATE VIEW
  • ALTER VIEW
  • CREATE INDEX
  • ALTER INDEX
  • CREATE FUNCTION
  • ALTER FUNCTION
  • DROP FUNCTION
  • VIEW_TABLE_USAGE
  • VIEW_COLUMN_USAGE
  • TABLE_CONSTRAINTS
  • REFERENTIAL_CONSTRAINTS
  • KEY_COLUMN_USAGE
  • CONSTRAINT_TABLE_USAGE
  • CONSTRAINT_COLUMN_USAGE
  • CHECK_CONSTRAINTS
  • COLUMN_DOMAIN_USAGE
  • COLUMNS
  • DOMAIN_CONSTRAINTS
  • ROUTINE_COLUMNS

如需哪些資料行會傳回使用者中繼資料與結構描述中繼資料的詳細資訊,請參閱下面的<結構描述目錄檢視與函數>一節。

系統資料表取代成目錄檢視與函數

SQL Server 2005 導入了 250 個以上的新目錄檢視,其中某些檢視會處理資料庫使用者和結構描述物件,而這些檢視取代了 SQL Server 2000 系統資料表。我們強烈建議您使用新的目錄檢視來存取中繼資料。如需詳細資訊,請參閱<目錄檢視 (Transact-SQL)>。

下表將顯示 SQL Server 2000 系統資料表與對等 SQL Server 2005 目錄檢視之間的對應:

SQL Server 2000 系統資料表 SQL Server 2005 目錄檢視

Sysusers

sys.database_principals (Transact-SQL)

sys.schemas (Transact-SQL)

Syslogins

sys.server_principals (Transact-SQL)

預設結構描述

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

在 SQL Server 2005 中,每位使用者都會被指派預設的結構描述。預設結構描述可以使用 CREATE USER 或 ALTER USER 陳述式的 DEFAULT_SCHEMA 選項來設定和變更。如果尚未定義 DEFAULT_SCHEMA,SQL Server 2005 將會假設 dbo 結構描述是預設結構描述。

ms190387.note(zh-tw,SQL.90).gif附註:
透過 Windows 驗證群組連接的使用者將不會擁有預設的結構描述關聯。如果這類使用者建立未以結構描述限定的物件,就會建立新的結構描述、將結構描述的名稱設定為目前使用者的名稱,而且會在這個新的使用者名稱命名空間中建立資料表物件。

新的資料定義語言 (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
ms190387.Caution(zh-tw,SQL.90).gif注意:
您必須在任何用到下列任一 DDL 陳述式的資料庫中使用新的目錄檢視:CREATE/ALTER/DROP SCHEMA;CREATE/ALTER/DROP USER;CREATE/ALTER/DROP ROLE;CREATE/ALTER/DROP APPROLE;ALTER AUTHORIZATION。

結構描述目錄檢視與函數

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

下表將顯示 SQL Server 2005 中結構描述的目錄檢視、中繼資料和函數:

如需詳細資訊 請參閱

一般結構描述中繼資料

sys.schemas (Transact-SQL)

資訊結構描述檢視表

資訊結構描述檢視 (Transact-SQL)

INFORMATION_SCHEMA.SCHEMATA 檢視所傳回的資料行定義

SCHEMATA (Transact-SQL)

範例

A. 建立結構描述並將擁有權指派給使用者

下列範例會將名為 Marjorie 的 SQL Server 登入和使用者以及名為 Auditing 的新結構描述加入至 AdventureWorks 資料庫。Marjorie 會被指派成 Auditing 結構描述的擁有者。

CREATE LOGIN Marjorie
    WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks;
CREATE USER Marjorie FOR LOGIN Marjorie
GO
CREATE SCHEMA Auditing AUTHORIZATION Marjorie;
GO

B. 將另一個結構描述的權限授與使用者

下列範例會將 AdventureWorks 資料庫中 Purchasing 結構描述的 SELECT 權限授與名為 Marjorie 的使用者。

USE AdventureWorks;
GO
GRANT SELECT ON SCHEMA::Purchasing TO Marjorie;
GO

C. 變更結構描述的擁有權

在下列範例中,會在 AdventureWorks 資料庫中建立新的使用者 Jon。然後,Jon 會被授與 AdventureWorks 資料庫中 Auditing 結構描述的擁有權。之後,會從 AdventureWorks 資料庫中卸除名為 Marjorie 的使用者。

USE AdventureWorks;
GO
/* Create a new user in the database */
CREATE LOGIN Jon
    WITH PASSWORD = '1fdKJl3$nlNv3049jsBB';
USE AdventureWorks;
CREATE USER Jon FOR LOGIN Jon
GO
ALTER AUTHORIZATION ON SCHEMA::Auditing TO Jon;
GO
/* Removes the user from the system */
DROP LOGIN Marjorie;
GO
DROP USER Marjorie;
GO

D. 顯示結構描述的擁有權

下列範例會顯示 AdventureWorks 資料庫中 Auditing 結構描述的擁有者。

USE AdventureWorks;
GO
/* This method uses the INFORMATION_SCHEMA views */
SELECT * 
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'Auditing';
GO

/* This method uses the sys.schemas catalog and links
   the names of the database users and server logins */
SELECT s.name AS 'Schema Name'
, db.name AS 'Database User Name'
, svr.name AS 'SQL Server Login Name'
FROM sys.schemas s
/* Obtains the name of the database user */
   INNER JOIN sys.database_principals db
      ON s.principal_id = db.principal_id
/* Obtains the name of the server login */
      INNER JOIN sys.server_principals svr
         ON db.sid = svr.sid
WHERE s.name = 'Auditing'
ORDER BY s.name

請參閱

概念

權限階層
主體

其他資源

CREATE SCHEMA (Transact-SQL)
ALTER SCHEMA (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
DROP SCHEMA (Transact-SQL)
sys.schemas (Transact-SQL)
CREATE USER (Transact-SQL)
ALTER USER (Transact-SQL)
對發行集資料庫進行結構描述變更

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

變更的內容:
  • 加入新的範例、使用結構描述的詳細資訊,以及新的連結。

2006 年 7 月 17 日

變更的內容:
  • 內容已大幅重組的主題。