天天看點

SQLSERVER 2005架構詳解

SQLSERVER 2005架構詳解

 在sqlserver 2005中,可能大家在工作或學習的時候會經常發現這樣一些問題,你使用一個賬戶在資料庫中建立了一張表,卻發現你自己建立的表卻沒有修改和查詢的權限,這是一件很郁悶的事情,在sqlserver2000中卻不存在這樣的問題,那為什麼在2005中會出現這樣的事情,這樣的設定可以帶來哪些好處?其實導緻這一問題的原因主要在于2005中多了一個新的概念—架構。

         首先我們來看一下msdn中對架構的定義:架構(Schema)是形成單個命名空間的資料庫實體的集合。命名空間是一個集合,其中每個元素的名稱都是唯一的。在這裡,我們可以将架構看成一個存放資料庫中對象的一個容器。

架構實際上在sqlserver2000中就已經存在,當我們使用查詢分析器去查詢一個表的時候,一個完整的表的名稱應該包括伺服器名.資料庫名.使用者名.對象名,而在sqlserver2005中一個表的完全限定名稱應該為伺服器名.資料庫名.架構名.對象名

在2000中,假如有一個賬戶tt在test資料庫中建立了一張表table1的時候,在伺服器上對查詢的語句應為select * from test.tt.table1,也就是說,在sqlserver 2000中一張表所屬的架構預設就是表的建立者的登入名稱,使用者可以和修改他所建立的所有資料庫對象。但在2005中已經将使用者和其建立對象所屬架構的關聯取消了,而加入了一個全新的架構體系,這樣做的優點主要在于下面幾個方面:

1.          多個使用者可以通過角色(role)或組(Windows groups)成員關系擁有同一個架構。在2005中,每個資料庫中的固定資料庫角色都有一個屬于自己的架構,如果我們建立一個表,給它指定的架構名稱為db_ddladmin,那麼任何一個屬于db_ddladmin中的使用者都是可以去查詢、修改和删除屬于這個架構中的表,但是其它不屬于這個組的使用者是不行的,有一點必須注意,db_dbdatareader組的成員可以檢視所有資料庫中的表,db_dbdatawriter組成員可以修改所有資料庫中的表,db_owner組成員可以對資料庫所有表進行所有操作,這幾個組的成員可以通過角色擷取到在資料庫中的特殊權限。

2.         删除資料庫使用者變得極為簡單。在 SQL Server 2000 中,使用者(User)和架構是隐含關聯的,即每個使用者擁有與其同名的架構。是以要删除一個使用者,必須先删除或修改這個使用者所擁有的所有資料庫對象,就比如一個員工要離職要删除他的賬戶的時候,還得将他所建立的表和視圖等都删除,影響過大。将架構和對象者分離後就不在存在這樣的問題,删除使用者的時候,對資料庫對象是沒有任何影響的。

3.         共享預設架構使得開發人員可以為特定的應用程式建立特定的架構來存放對象,這比僅使用管理者架構(DBO schema)要好。

4.         在架構和架構所包含的對象上設定權限(permissions)比以前的版本擁有更高的可管理性。

5.         區分不同業務處理需要的對象,例如,我們可以把公共的表設定成pub的架構,把銷售相關的設定為sales,這樣管理和通路起來更容易.

大多數使用者在建立對象的時候習慣直接輸入對象名而将對象的架構名稱省略,在2005中,會給使用者建立的這樣的表加上一個預設的架構,使用者如果沒有對自己的預設架構做設定,那預設架構就是dbo,也就是說,如果一個db_ddladmin的成員在資料庫中建立一個沒有加上架構名稱的表,這個表在資料庫中的完整名稱應該是dbo.表名,建立者在資料庫中如果不是屬于其它特殊組的成員,是不能對自己建立的表進行任何修改和查詢的,那就相當于把自己賺的錢存進了别人的銀行卡,自己卻取不出來。

     本文轉自ttzztt 51CTO部落格,原文連結:http://blog.51cto.com/tianzt/156847,如需轉載請自行聯系原作者