天天看點

《鋒利的SQL(第2版)》——2.5 架構管理

本節書摘來自異步社群出版社《鋒利的sql(第2版)》一書中的第2章,第2.5節,作者:張洪舉 王曉文,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

鋒利的sql(第2版)

前面提過,架構是資料庫中對象的容器,對于被集體管理的對象子集,通過架構可以簡化操作。使用者擁有架構和預設架構dbo,預設架構用于解析未使用其完全限定名稱引用的對象的名稱。這裡的意思是,在通路預設架構中的對象時,不需要指定架構的名稱。而對于非預設架構,則需要使用下面的格式進行通路,不過,微軟建議你一直使用下面的兩部分式對象名稱。

可以使用create schema語句建立架構,文法格式如下所示。其中的schema_element部分允許使用create table、create view、grant、revoke和deny語句來定義此架構包含的表和視圖,并可對單個語句中的任何安全對象授予、撤銷或拒絕授予權限。

schema_name

在資料庫内辨別架構的名稱,最大長度是128個字元。

authorization owner_name

指定将擁有架構的資料庫級主體的名稱。此主體還可以擁有其他架構,并且可以不使用目前架構作為其預設架構。

table_definition

指定在架構内建立表的create table語句。

view_definition

指定在架構内建立視圖的create view語句。

grant_statement

指定可對除新架構外的任何安全對象授予權限的grant語句。

revoke_statement

指定可對除新架構外的任何安全對象撤銷權限的revoke語句。

deny_statement

指定可對除新架構外的任何安全對象拒絕授予權限的deny語句。

例如,下面的語句将建立一個名為employees的架構,所有者為dbo。

又如,下面的語句建立由annik擁有的、包含表nineprongs的sprockets架構。此語句向mandar授予select權限,而對prasanna拒絕授予select權限。

在建立一個架構後,可以根據需要使用grant、revoke、deny語句對資料庫使用者進行授予、撤銷授予、拒絕權限設定。雖然我們這本書是講解sql的,但是對于此操作,使用sql server management studio會更友善一些,步驟如下。

在對象資料總管中,展開資料庫引擎執行個體。

展開“資料庫”節點,從中選擇一個資料庫并展開。

展開資料庫的“安全性”節點後,繼續展開“架構”節點,右鍵單擊要修改的架構并選擇“屬性”,打開架構的屬性視窗。

在架構的屬性視窗的“正常”頁面中,可以指定架構的名稱和所有者。要查找一個有效的資料庫級主體,可以單擊“搜尋”按鈕。

可以在架構的屬性視窗的“權限”頁面中設定架構的權限,步驟如下。

在“權限”頁面中單擊“添加”按鈕打開“選擇使用者或角色”對話框。

在“選擇使用者或角色”對話框的編輯框中輸入要選擇的使用者或角色名稱,并使用分号将名稱分割開。如圖2-3所示。

在添加完使用者或角色後,可以為其指定詳細的權限設定,如圖2-4所示。

《鋒利的SQL(第2版)》——2.5 架構管理
《鋒利的SQL(第2版)》——2.5 架構管理

下面的語句把對架構humanresources的insert權限授予guest使用者。

下面的語句則是撤銷guest使用者的insert權限。

在某些時候,可能需要移動對象到另一個容器中。但是,隻能将對象在同一資料庫之内的架構之間移動,在移動時,将會改變與對象相關聯的命名空間。是以,也将改變對象的查詢和通路方法。

将對象移入新架構時,将删除與該對象關聯的全部權限。如果已顯式設定對象所有者,則該所有者保持不變。移動對象應當使用alter schema語句,文法格式如下:

目前資料庫中的架構名稱,對象将移入其中。

object_name

要移入架構的對象名稱。

下面的語句将表address從架構person移動到humanresources架構中。

可以使用drop schema語句删除架構。要删除的架構不能包含任何對象。例如,下面的語句将删除employees架構:

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。