標籤:
SQL查詢是參考資料表時,需要為其制定模式名。 在資料庫的術語中,模式就是名稱空間。這種方式可以把相同特性的對象組合到一個共同的名稱空間中。模式也可以保護對象,所以DBA可以給模式授予顯示許可權。 例如,DBA可以給使用者授予模式的SELECT許可權,這樣,使用者就可以從該模式的任意表或視圖中選擇行了。
SQL Server資料庫中的每個對象都用由4部分組成的名字來標識。該名字的形式是 Server.DataBase.Schema.Object。表中的列並不是真正的對象,而是對象的屬性。SELECT子句不指定伺服器,只制定資料庫、模式、對象和屬性,而FROM子句要求制定伺服器。四部分名字中的一些部分是可選的,如果省略了伺服器名,SQL Server就假定查詢運行在當前的伺服器串連上。資料庫也是如此, SQL Server假定當前設定的伺服器環境就是對象所在的資料庫。
在SQL Server中,每個使用者都被賦予一個預設模式或名稱空間。模式是構成名稱空間的資料庫物件的一個指定集合。名稱空間由單個使用者擁有。在名稱空間中,對象不能重名。但不同名稱空間或不同模式中的對象可以重名。
http://blog.sina.com.cn/s/blog_7952e89001010jlj.html :
資料庫的初學者往往會對關係型資料庫模式(schema)、資料庫(database)、表(table)、使用者(user)之間感到迷惘,總感覺他們的關係千絲萬縷,但又不知道他們的聯絡和區別在哪裡,對一些問題往往說不出個所以然來。下面,我們就以SQL Server為核心,對其模式(schema)、資料庫(database)、表(table)、使用者(user)之間的關係展開討論。
首先,我們先弄清楚什麼是模式。
先明確一點,SQL Server中模式(schema)這個概念是在2005的版本裡才提出來的,因此SQL Server2000不支援模式這個概念(本人曾在此處吃過虧)。
模式又稱架構,架構的定義是形成單個命名空間的資料庫實體的集合。命名空間是一個集合,其中每個元素的名稱都是唯一的。在這裡,我們可以將架構看成一個存放資料庫中對象的一個容器。
上面的文字描述過於晦澀,舉個簡單的例子,平時要在電腦硬碟存放東西時,我們不會把所有的東西都存在一個檔案夾裡,而是會把不同的檔案按照某一個標準分門別類,放到不同的檔案夾裡。而在資料庫中,起到這個作用的就是架構,資料庫物件(表、視圖、預存程序,觸發器等)按照一定的標準,存放在不同的架構裡。有過java編程經驗的同學都知道,命名空間名其實就是檔案夾名,因此我們非常明確一點:一個對象只能屬於一個架構,就像一個檔案只能存放於一個檔案夾中一樣。與檔案夾不同的是,架構是不能嵌套的,如此而已。因此,架構的好處非常明顯——便於管理。
那麼,現在我們來看看使用者和模式(schema,即架構)有什麼關係。
通過上面的分析,我們知道,一個架構可以容納多個資料庫物件,但並不是所有的使用者都能訪問某一個架構裡的內容的,這就是所謂的許可權。看下面一張表:
|
User1 |
User2 |
User3 |
User4 |
Schema1 |
Y |
Y |
N |
N |
Schema2 |
N |
Y |
N |
Y |
Schema3 |
Y |
N |
Y |
N |
通過這張表,我們可以看出,使用者1可以訪問架構1和架構3,使用者2可以訪問架構1和架構2,以此類推。
在sql server2000中,使用者和架構是不分離的,到了2005才分離。其實2000中的使用者和架構概念就是為使用者指派固定的模式,即如下表:
|
User1 |
User3 |
User3 |
Schema1 |
Y |
— |
— |
Schema2 |
|
Y |
— |
Schema3 |
— |
— |
Y |
綜合上面所述,使用者和構架的關係是多對多的——一個架構可以對應多個使用者,一個使用者也可以對應多個架構。
現在,我們來討論一下,資料庫(database)和模式(schema)有什麼關係。
舉個很淺顯的例子,我們可以把資料庫看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,於是乎,在不同的房間裡,我們可以放不同的東西——有的放食物,有的放衣物……而這些不同的東西,就對應著我們資料庫裡的對象。
因此,我們可以看到,資料庫與模式時一對多的關係。
總結一下,其實我們的資料庫就是一個資料的大倉庫,而裡面建立了很多很多模式,分別放著不同的資料庫物件(包括表),而不同的模式有不同的許可權,於是,不同的使用者就有不同的存取權限來訪問某個模式裡的資料庫物件。
參考資料:
http://tech.ddvip.com/2009-01/1231832216105719.html
http://tech.ddvip.com/2009-01/1231832308105720.html
使用者架構分離的好處:
將架構與資料庫使用者分離對管理員和開發人員而言有下列好處:
- 多個使用者可以通過角色成員資格或 Windows 群組成員資格擁有一個架構。這擴充了允許角色和組擁有對象的使用者熟悉的功能。
- 極大地簡化了刪除資料庫使用者的操作。
- 刪除資料庫使用者不需要重新命名該使用者架構所包含的對象。因而,在刪除建立架構所含對象的使用者後,不再需要修改和測試顯式引用這些對象的應用程式。
- 多個使用者可以共用一個預設架構以進行統一名稱解析。
- 開發人員通過共用預設架構可以將共用Object Storage Service在為特定應用程式專門建立的架構中,而不是 DBO 架構中。
- 可以用比早期版本中的粒度更大的粒度管理架構和架構包含的對象的許可權。
SQL Server Schema