1. 程式人生 > >SQL 使用者,架構, 角色,許可權

SQL 使用者,架構, 角色,許可權

1、如果在刪除使用者的時候出現無法刪除使用者,此使用者擁有架構。那麼是因為當前這個使用者隸屬於某個架構,我們在建立使用者的時候預設隸屬於dbo架構的,如果你指定了非dbo架構那麼就必須解除架構的繫結才能刪除這個使用者,隸屬於dbo架構除外。

2、我們在軟體或者系統開發的過程中,可能有很多的人對資料庫進行操作,難免會出現某個人對資料的誤操作,那麼怎麼避免這種情況呢?

通過建立指定的使用者,然後給於使用者指定角色並對角色賦予相應的許可權即可避免其他的誤操作。

a、建立角色

Create Role TestRole

b、給予角色賦予相應的許可權

Grant create table,create procedure,create view to TestRole--建立表 檢視 儲存過程的許可權

Grant Select,insert,execute,alter to TestRole--查詢,新增,執行儲存過程,修改儲存過程、檢視、表

c、建立登陸

Create Login TestLogin with password='123456'

d、建立使用者

Create User TestUser for Login TestLogin --一般我們設定登入名和使用者名稱一致,這裡為了區分,不一致

e、新增使用者到角色中

exec sp_addrolemember 'TestRole','TestUser'

至此使用者建立結束,我們開啟SSMS,在登入名輸入TestUser,密碼為123456即可進入到管理介面

在查詢分析器執行Update Table set ceshi='1' 會出現什麼錯誤呢?

訊息 229,級別 14,狀態 5,第 1 行
拒絕了對物件 'Table' (資料庫 'Study',架構 'dbo')的 UPDATE 許可權。

因為我們沒有給予這個使用者update的許可權,只給了select 、insert 、execute 、alter

當然許可權還有很多,比如賦予角色的執行評估計劃的許可權

Grant showplan to TestRole

3、關於架構和使用者

我記得有個網友對架構和使用者的關係有個很好的比喻:資料庫中有表、儲存過程、檢視、觸發器等很多的物件,就像一個網站中有網頁、指令碼、資料夾等物件一樣,暫稱之為網站物件。我們都知道網站中的物件我們都是很有條理的放在不同的資料夾下面,所以資料庫物件也不能都放在一堆。那麼相對於網站的物件資料庫物件的架構是什麼意思呢?很明顯就是檔案夾了。

那是不是架構和資料夾完全相同呢?答案是:不是。資料夾可以多次巢狀,架構卻不可以。一個物件只能屬於一個架構,就像一個檔案只能存放於一個資料夾。

我們訪問一個數據庫物件應該是:"架構名。物件名"

列出資料所有的架構

select sys.objects.name,sys.schemas.name
     from   sys.objects,sys.schemas
    where sys.objects.type='U' and   sys.objects.schema_id=sys.schemas.schema_id

架構-使用者:一對多的關係

架構-角色:多對多的關係

     a.一個架構中不能包含相同名稱的物件,相同名稱的物件可以在不同的架構中存在。

     b.一個架構只能有一個所有者,所有者可以是使用者, 資料庫角色, 應用程式角色。

     c.一個用資料庫角色可以可以擁有一個預設架構,和多個架構。

     d.多個數據庫使用者可以共享單個預設架構。

     e.由於架構與使用者獨立,刪除使用者不會刪除架構中的物件。

4.架構所有者和許可權

任何資料庫主體都可以擁有架構,並且一個主體可擁有多個架構。您可以對架構應用安全規則,安全規則將由架構中的所有物件繼承。如果設定了對架構的訪問許可權,則當新物件新增到架構時,新物件會自動應用這些許可權。可以為使用者分配一個預設的架構,且多個數據庫使用者可以共享同一架構。

預設情況下,當開發人員在架構中建立物件時,該物件由擁有架構的安全主體而不是開發人員擁有。可以使用 ALTER AUTHORIZATION Transact-SQL 語句轉移物件所有權。雖因架構會增大管理許可權的複雜度而不建議使用,但架構仍然可以包含由不同使用者擁有的物件並可具有比分配給架構的許可權更加細化的許可權。物件可以在架構之間移動,架構所有權也可以在主體之間轉移。可以在不影響架構的情況下刪除資料庫使用者。

5. 內建架構

SQL Server 隨附了十個預定義的架構,它們與內建資料庫使用者和角色具有相同的名稱。這些架構主要用於向後相容性。如果您不需要與固定資料庫角色具有相同名稱的架構,則可以刪除它們。您不能刪除下列架構:

  • dbo

  • guest

  • sys

  • INFORMATION_SCHEMA

如果從模型資料庫中刪除這些架構,它們將不會顯示在新資料庫中。sys 和 INFORMATION_SCHEMA 架構是為系統物件而保留的。您不能在這些架構中建立物件,而且不能刪除它們。

6.dbo 架構

dbo 是新建立的資料庫的預設架構。 dbo 架構由 dbo 使用者帳戶擁有。預設情況下,使用 CREATE USER Transact-SQL 命令建立的使用者的預設架構為 dbo

分配了 dbo 架構的使用者不繼承 dbo 使用者帳戶的許可權。使用者不從架構繼承許可權;架構許可權由架構中包含的資料庫物件繼承。

當使用部分名稱來引用資料庫物件時,SQL Server 首先在使用者的預設架構中查詢。如果在此處未找到該物件,則 SQL Server 其次將在 dbo 架構中查詢。如果物件不在 dbo 架構中,則會返回一個錯誤。

7.  架構體系



使用圖形表示,這樣我們更能方便的瞭解架構,和她在安全物件中所處的位置及與其他安全物件的關係。

找到一張,如圖,資料庫引擎 許可權層次結構之間的關係圖



,這能幫助我們理解架構。


1.一個架構中不能包含相同名稱的物件,相同名稱的物件可以在不同的架構中存在。

2.一個架構只能有一個所有者,所有者可以是使用者, 資料庫角色, 應用程式角色。

3.一個用資料庫角色可以可以擁有一個預設架構,和多個架構。

4.多個數據庫使用者可以共享單個預設架構。

5.由於架構與使用者獨立,刪除使用者不會刪除架構中的物件。