SQL Server 2008的使用者架構分離

iSQlServer發表於2008-11-25

在 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)不能準確反映的複雜關係引入系統後設資料中。在此示例中,使用者 ID 與由 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 作為預設架構。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-503154/,如需轉載,請註明出處,否則將追究法律責任。

相關文章