SQL Server權(quán)限體系

權(quán)限兩個字碗殷,一個權(quán)力,一個限制桑阶。在軟件領(lǐng)域通俗的解釋就是哪些人可以對哪些資源哪些操作霜运。在SQL Server中,”哪些人”刻蟹,“哪些資源”,”哪些操作”則分別對應(yīng)SQL Server中的三個對象逗旁,分別為主體(Principals),安全對象(Securables)和權(quán)限(Permissions),而權(quán)力和限制則是對應(yīng)了SQL Server中的GRENT和DENY。對于主體片效,安全對象和權(quán)限的初步理解红伦,見下圖:

主體

“主體”是可以請求 SQL Server 資源的實體。主體可以是個體淀衣,組或者進(jìn)程昙读。主體可以按照作用范圍被分為三類:

  • Windows級別主體:包括Windows 域登錄名Windows 本地登錄名
  • 服務(wù)器級別主體:包括服務(wù)器登錄名服務(wù)器角色膨桥。
  • 數(shù)據(jù)庫級別主體:包括數(shù)據(jù)庫用戶蛮浑、數(shù)據(jù)庫角色、固定數(shù)據(jù)庫角色以及應(yīng)用程序角色只嚣。

可以看到主體包括登錄名以及角色沮稚。

角色

角色可以看成是權(quán)限的集合體,為了方便權(quán)限管理册舞,可以把一些常用權(quán)限賦予角色蕴掏,然后再把角色賦予相關(guān)用戶,則這些用戶就繼承了橘色中的所有權(quán)限调鲸。一般情況下盛杰,數(shù)據(jù)庫會內(nèi)置一些角色,用戶也可以創(chuàng)建自定義角色藐石。對角色進(jìn)行權(quán)限管理的方式與對用戶進(jìn)行權(quán)限管理的方式是相同的即供。
??角色在SQL Server中被分為三類,分別為:

  • 內(nèi)置角色----這類角色在服務(wù)器安裝時已經(jīng)默認(rèn)存在贯钩,其權(quán)限是固定的募狂,并且不能被刪除
  • 用戶自定義角色----這類角色由用戶按照需求自定義創(chuàng)建
  • 應(yīng)用程序角色----這類特殊角色用于管理應(yīng)用程序的數(shù)據(jù)訪問

角色也分為兩個方面:

  • 服務(wù)器級別的角色办素,用于數(shù)據(jù)庫服務(wù)器方面的控制權(quán)限
  • 數(shù)據(jù)庫級別的角色角雷,用于數(shù)據(jù)庫中數(shù)據(jù)的控制權(quán)限。

(1)服務(wù)器級別的角色

服務(wù)器級角色的權(quán)限作用域為服務(wù)器范圍性穿。例如創(chuàng)建勺三、修改、刪除數(shù)據(jù)庫需曾,管理磁盤文件吗坚,添加或刪除數(shù)據(jù)庫連接等等,都是需要服務(wù)器上的權(quán)限才能進(jìn)行操作呆万。
??固定服務(wù)器角色具有一組固定的權(quán)限商源,并且適用于整個服務(wù)器范圍。 它們專門用于管理 SQL Server谋减,且不能更改分配給它們的權(quán)限牡彻。 可以在數(shù)據(jù)庫中不存在用戶帳戶的情況下向固定服務(wù)器角色分配登錄。
??服務(wù)器級別的對象出爹,只能包含登錄名庄吼。定義了服務(wù)器角色缎除,你定義的登陸用戶就有了相應(yīng)的執(zhí)行權(quán)限。先來看一下服務(wù)器級別的固定角色:

服務(wù)器角色 含義
sysadmin 可以在服務(wù)器上執(zhí)行任何活動
serveradmin 可以更改服務(wù)器范圍的配置選項和關(guān)閉服務(wù)器
securityadmin 管理和審核登錄用戶总寻。具有 GRANT器罐、DENY 和 REVOKE 服務(wù)器和數(shù)據(jù)庫級別的權(quán)限。此外渐行,還可以重置 SQL Server 登錄名的密碼
processadmin 管理SQL Server運(yùn)行的進(jìn)程
setupadmin 可以使用 T-SQL 語句添加和刪除連接服務(wù)器轰坊,并可以執(zhí)行某些系統(tǒng)存儲過程(如 sp_serveroption)
bulkadmin 可以運(yùn)行 BULK INSERT 語句
diskadmin 用于管理磁盤文件
dbcreator 可以創(chuàng)建、更改祟印、刪除和還原任何數(shù)據(jù)庫
public public角色不同于其它角色在于其權(quán)限可以被修改衰倦,每個 SQL Server 登錄名都屬于 public 服務(wù)器角色。無法將用戶旁理、角色或組指派給它樊零,因為默認(rèn)情況下它屬于該角色,且public不能被刪除

(2)數(shù)據(jù)庫級別的角色

數(shù)據(jù)庫級角色的權(quán)限作用域為數(shù)據(jù)庫范圍孽文。例如可以訪問哪個數(shù)據(jù)庫驻襟,可以訪問哪個數(shù)據(jù)庫中的哪些數(shù)據(jù)表、哪些視圖芋哭、哪些存儲過程等等沉衣,都需要數(shù)據(jù)庫上的權(quán)限才能進(jìn)行操作。
??SQL Server存在兩種類型的數(shù)據(jù)庫級角色:數(shù)據(jù)庫中預(yù)定義的“固定數(shù)據(jù)庫角色”和可以創(chuàng)建的“用戶定義的數(shù)據(jù)庫角色”减牺。
??固定數(shù)據(jù)庫角色是SQL Server預(yù)定義的數(shù)據(jù)庫角色豌习,具有數(shù)據(jù)庫級別的管理權(quán)限,并且存在于每個數(shù)據(jù)庫中拔疚。db_owner 數(shù)據(jù)庫角色的成員可以管理固定數(shù)據(jù)庫角色成員身份肥隆。自定義數(shù)據(jù)庫角色是當(dāng)固定數(shù)據(jù)庫角色不能滿足要求時,可以自定義數(shù)據(jù)庫角色稚失。
??
數(shù)據(jù)庫級別的對象栋艳,只能包含數(shù)據(jù)庫用戶名。
先來看一下數(shù)據(jù)庫級別的固定角色:

數(shù)據(jù)庫角色 含義
db_owner 可以執(zhí)行數(shù)據(jù)庫中技術(shù)所有動作的用戶句各,執(zhí)行所有的配置活動和維護(hù)活動
db_securityadmin 管理數(shù)據(jù)庫安全吸占,可以修改角色成員身份和管理權(quán)限。向此角色中添加主體可能會導(dǎo)致意外的權(quán)限升級
db_accessadmin 可以為 Windows 登錄名凿宾、Windows 組和 SQL Server 登錄名添加或刪除數(shù)據(jù)庫訪問權(quán)限
db_backupoperator 可以備份數(shù)據(jù)庫
db_ddladmin 可以在數(shù)據(jù)庫中運(yùn)行任何數(shù)據(jù)定義語言 (DDL) 命令
db_datawriter 可以在所有用戶表中添加矾屯、刪除或更改數(shù)據(jù)
db_datareader 可以從所有用戶表中讀取所有數(shù)據(jù)
db_denydatawriter 不能添加、修改或刪除數(shù)據(jù)庫內(nèi)用戶表中的任何數(shù)據(jù)
db_denydatareader 不能讀取數(shù)據(jù)庫內(nèi)用戶表中的任何數(shù)據(jù)
public public角色不同于其它角色在于其權(quán)限可以被修改初厚,每個數(shù)據(jù)庫用戶件蚕、角色或組都屬于public數(shù)據(jù)庫角色。無法將用戶、角色或組指派給它骤坐,因為默認(rèn)情況下它屬于該角色绪杏,且public不能被刪除

登錄賬號和數(shù)據(jù)庫用戶

SQL Server的服務(wù)器和數(shù)據(jù)庫是兩個層次的概念,SQL Server的用戶也分為兩種纽绍,一種是服務(wù)器登陸賬號蕾久,另一種是數(shù)據(jù)庫用戶。
??一個人要操作SQL Server數(shù)據(jù)庫拌夏,首先要為其創(chuàng)建服務(wù)器登陸賬號僧著,使得他可以登錄到服務(wù)器上,然后還要在要操作的數(shù)據(jù)庫上創(chuàng)建和這個登陸賬號對應(yīng)的數(shù)據(jù)庫用戶障簿。
??可以給登陸賬號賦予相應(yīng)權(quán)限盹愚,使得這個賬號可以執(zhí)行指定的管理服務(wù)器的任務(wù)。也可以給數(shù)據(jù)庫用戶賦予相應(yīng)權(quán)限站故,使得這個數(shù)據(jù)庫用戶可以在這個數(shù)據(jù)庫中執(zhí)行指定的操作皆怕。
??服務(wù)器登陸賬號分為為Windows驗證及SQL Server驗證兩種。

  • Windows身份驗證模式:把Windows的操作系統(tǒng)用戶添加為SQL Server服務(wù)器登陸賬號西篓,SQL Server并不參與驗證愈腾。SQL Server完全相信Windows的驗證結(jié)果,所以用此方式登錄SQL Server時并不需要提供密碼岂津。
  • SQL Server和Windows身份驗證模式:這種模式即允許由Windows來驗證主體身份虱黄,又允許SQL Server來驗證主體身份,當(dāng)由SQL Server驗證主體身份時吮成,需要用戶名和密碼來確認(rèn)主體身份橱乱,和使用什么Windows賬戶半毛錢關(guān)系都沒有,是在服務(wù)器上創(chuàng)建的另外一種獨(dú)立賬號粱甫。

登錄名
??登錄名是服務(wù)器級別的主體泳叠,但無論是上述哪個層級的主體,因為需要登錄到SQL Server實例魔种,所以每一個層級的主體都需要一個與之對應(yīng)的登錄名析二。對于Windows級別的主體來說粉洼,Windows用戶會映射到登錄名节预。對于數(shù)據(jù)庫級別的主體來說,其用戶必須映射到登錄名中属韧。而登錄名可以不映射到數(shù)據(jù)庫用戶安拟,如圖所示登錄名的映射關(guān)系:


??在圖中實例層級的登錄名中,我們看到除了自定義添加的用戶之外宵喂,還有一些由系統(tǒng)添加的登錄名糠赦。

  • 以”##”開頭和結(jié)尾的用戶是SQL Server內(nèi)部使用的賬戶,由證書創(chuàng)建,僅供內(nèi)部系統(tǒng)使用拙泽,不應(yīng)該被刪除淌山。
  • sa 登錄名是服務(wù)器級的主體。 默認(rèn)情況下顾瞻,該登錄名是在安裝實例時創(chuàng)建的泼疑。從 SQL Server 2005 開始,sa 的默認(rèn)數(shù)據(jù)庫為“master”荷荤。 sa賬戶可以認(rèn)為是超級管理員用戶退渗,擁有一切特權(quán),可以在SQL Server中為所欲為蕴纳,并且不能夠被刪除会油。因此sa作為分配權(quán)限的起點(也就是SA賬戶在最開始時給予了其他主體對于安全對象的權(quán)限)。因此對于Sa的密碼要設(shè)置的盡可能復(fù)雜古毛,否則Sa登錄名被盜取后果不堪設(shè)想翻翩。
  • NT AUTHORITY\NETWORK SERVICE和NT AUTHORITY\SYSTEM賬戶是和啟動SQL Server這個Windows服務(wù)的賬戶有關(guān),如果使用本地登錄賬戶或是網(wǎng)絡(luò)賬戶啟動SQL Server服務(wù)稻薇,請不要刪除這兩個賬戶体斩。
  • BUILDIN\Administrator賬戶是與本地管理員組關(guān)聯(lián)的登錄名,默認(rèn)屬于sysadmin角色颖低。這個賬戶使得任何屬于本地管理員的賬戶都可以獲得對SQL Server的完全控制權(quán)絮吵。

數(shù)據(jù)庫用戶
??數(shù)據(jù)庫用戶是數(shù)據(jù)庫級別的主體,被用于訪問數(shù)據(jù)庫層面的對象。每一個數(shù)據(jù)庫用戶都必須要一個與之對用的登錄名忱屑。數(shù)據(jù)庫用戶的信息存在數(shù)據(jù)庫中蹬敲,而登錄名存在實例級別的Master數(shù)據(jù)庫中(但SQL SERVER2012的Contained Database允許將登錄名也存在數(shù)據(jù)庫級別)。通常來說莺戒,數(shù)據(jù)庫層級的用戶可以和映射的登錄名不一致伴嗡,但由于這種做法會引起混淆,因此并不推薦从铲,如下圖所示瘪校。


??默認(rèn)情況下,每個數(shù)據(jù)庫都帶有4個內(nèi)置用戶名段,如下圖所示:

  • dbo用戶:dbo用戶是Database Owner的簡稱阱扬,如果說SA是實例級別的老大,那DBO就是數(shù)據(jù)庫級別的老大伸辟,是數(shù)據(jù)庫的擁有者麻惶。這個用戶也同樣不能被刪除,登錄名sa自動映射為數(shù)據(jù)庫用戶dbo信夫。每一個表創(chuàng)建時如果沒有指定Schema窃蹋,則默認(rèn)在dbo這個schema下卡啰。
  • guest 用戶:guest用戶是一個來賓賬戶,這個賬戶允許登錄名沒有映射到數(shù)據(jù)庫用戶的情況下訪問數(shù)據(jù)庫警没。默認(rèn)情況下guest用戶是不啟用的匈辱,但不能刪除∩奔#可通過撤消該用戶的 CONNECT 權(quán)限將其禁用梅誓。
--允許guest用戶連接權(quán)限
GRANT CONNECT TO guest
--收回guest的連接權(quán)限
REVOKE CONNECT TO guest
  • INFORMATION_SCHEMA 和 sys:它們都作為用戶出現(xiàn)在目錄視圖中。 這兩個實體是 SQL Server 所必需的佛南。 它們不是主體梗掰,不能修改或刪除它們。


安全對象

安全對象是SQL Server數(shù)據(jù)庫引擎授權(quán)系統(tǒng)控制對其訪問的資源嗅回。安全對象分別屬于3個層次:服務(wù)器及穗、數(shù)據(jù)庫、架構(gòu)绵载。
??不同的范圍包含不同的安全對象埂陆,詳見下圖。


安全對象

架構(gòu)(schema)及其管理

在SQL Server 2000中的構(gòu)架是和用戶綁定的娃豹,比如我新建用戶Jack焚虱,SQL Server自動分配一個叫Jack構(gòu)架,用戶Jack并不能改變這個選項懂版,而由Jack所建的任何對象都在Jack之下鹃栽。比如新建一個表,則為Jack.Table1躯畴。當(dāng)Jack如果離職時民鼓,這對管理來說簡直是一場噩夢。
??從SQL Server2005開始蓬抄,數(shù)據(jù)庫用戶不再等同于架構(gòu)丰嘉,允許用戶和構(gòu)架分離。而在Oracle中嚷缭,用戶與模式還是等同的(在Oracle中饮亏,schema一般翻譯為模式)。所以以往 SQL Server 內(nèi)的對象命名是“服務(wù)器.數(shù)據(jù)庫.用戶名.對象”阅爽,但如今的對象命名改為“服務(wù)器.數(shù)據(jù)庫.Schema.對象”
??架構(gòu)是與創(chuàng)建它的數(shù)據(jù)庫用戶無關(guān)的命名空間路幸,也可以說,架構(gòu)是數(shù)據(jù)庫對象的容器优床,獨(dú)立于創(chuàng)建它們的數(shù)據(jù)庫用戶而存在劝赔。架構(gòu)有一下特點:

  • 多個數(shù)據(jù)庫用戶可以共享一個默認(rèn)的架構(gòu);
  • 單個架構(gòu)可以包含多個數(shù)據(jù)庫用戶擁有的對象胆敞;
  • 架構(gòu)的所有權(quán)和架構(gòu)內(nèi)的安全對象可以轉(zhuǎn)移着帽;
  • 對象可以在不同的架構(gòu)之間移動;
  • 可以刪除數(shù)據(jù)庫用戶移层,而不刪除相應(yīng)架構(gòu)中的對象仍翰。

架構(gòu)所有者和權(quán)限
??通過用戶架構(gòu)分離,可實現(xiàn)管理數(shù)據(jù)庫對象權(quán)限的更大靈活性观话。予借,因為對象不再綁定到用戶賬號上,所以你根本不用擔(dān)心當(dāng)一個賬號被刪除時需要變換對象的擁有者频蛔。
??默認(rèn)情況下灵迫,當(dāng)開發(fā)人員創(chuàng)建了一個對象時,該對象并不屬于開發(fā)人員而屬于一個數(shù)據(jù)庫架構(gòu)晦溪。
??任何數(shù)據(jù)庫主體都可以擁有架構(gòu)瀑粥,并且一個主體可擁有多個架構(gòu)。每個架構(gòu)都有其所有者三圆,但是所有者和架構(gòu)名是不綁定的狞换。所以當(dāng)一個用戶擁有一個架構(gòu),并且這個用戶必須從數(shù)據(jù)庫中刪除時舟肉,可以不用破壞任何代碼而僅僅是將架構(gòu)的所有者變一下修噪。
??可以對架構(gòu)應(yīng)用安全規(guī)則,安全規(guī)則將由架構(gòu)中的所有對象繼承路媚。 如果設(shè)置了對架構(gòu)的訪問權(quán)限黄琼,則當(dāng)新對象添加到架構(gòu)時,新對象會自動應(yīng)用這些權(quán)限整慎。注意:用戶不從架構(gòu)繼承權(quán)限适荣,架構(gòu)權(quán)限由架構(gòu)中包含的數(shù)據(jù)庫對象繼承。

內(nèi)置架構(gòu)
??SQL Server創(chuàng)建了十個預(yù)定義的架構(gòu)院领,它們與內(nèi)置數(shù)據(jù)庫用戶和角色具有相同的名稱弛矛。這些架構(gòu)主要用于向后兼容性。如果您不需要與固定數(shù)據(jù)庫角色具有相同名稱的架構(gòu)比然,則可以刪除它們丈氓。您不能刪除下列架構(gòu):

  • dbo:dbo 是新創(chuàng)建的數(shù)據(jù)庫的默認(rèn)架構(gòu)。 dbo 架構(gòu)由 dbo 用戶帳戶擁有强法。 默認(rèn)情況下万俗,使用 CREATE USER命令創(chuàng)建的用戶的默認(rèn)架構(gòu)為 dbo,但是分配了 dbo 架構(gòu)的用戶不繼承 dbo 用戶帳戶的權(quán)限饮怯。
  • guest
  • sys:為系統(tǒng)對象而保留的闰歪。
  • INFORMATION_SCHEMA:為系統(tǒng)對象而保留的。
    如果從模型數(shù)據(jù)庫中刪除這些架構(gòu)蓖墅,它們將不會顯示在新數(shù)據(jù)庫中库倘。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末临扮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子教翩,更是在濱河造成了極大的恐慌杆勇,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饱亿,死亡現(xiàn)場離奇詭異蚜退,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)彪笼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門钻注,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人配猫,你說我怎么就攤上這事幅恋。” “怎么了章姓?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵佳遣,是天一觀的道長。 經(jīng)常有香客問我凡伊,道長零渐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任系忙,我火速辦了婚禮诵盼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘银还。我一直安慰自己风宁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布蛹疯。 她就那樣靜靜地躺著戒财,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捺弦。 梳的紋絲不亂的頭發(fā)上饮寞,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機(jī)與錄音列吼,去河邊找鬼幽崩。 笑死,一個胖子當(dāng)著我的面吹牛寞钥,可吹牛的內(nèi)容都是我干的慌申。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼理郑,長吁一口氣:“原來是場噩夢啊……” “哼蹄溉!你這毒婦竟也來了咨油?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤类缤,失蹤者是張志新(化名)和其女友劉穎臼勉,沒想到半個月后邻吭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體餐弱,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年囱晴,在試婚紗的時候發(fā)現(xiàn)自己被綠了膏蚓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡畸写,死狀恐怖驮瞧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枯芬,我是刑警寧澤论笔,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站千所,受9級特大地震影響狂魔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淫痰,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一最楷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧待错,春花似錦籽孙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓜客,卻和暖如春适瓦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忆家。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工犹菇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芽卿。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓揭芍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卸例。 傳聞我的和親對象是個殘疾皇子称杨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容