數(shù)據(jù)庫(kù)權(quán)限分配探討

沈云,資深工程師惭载,微軟解決方案專家

SQL Server如何指定用戶單獨(dú)權(quán)限

上周, 有位朋友給我提出了需求:

為公司應(yīng)用提供用戶分配數(shù)據(jù)訪問(wèn)權(quán)限。順便總結(jié)了下有如下要求:

給某個(gè)用戶查詢所有數(shù)據(jù)庫(kù)的權(quán)限

給某個(gè)用戶只有備份數(shù)據(jù)庫(kù)的權(quán)限

給一個(gè)用戶只有指定數(shù)據(jù)庫(kù)的權(quán)限

給一個(gè)用戶只有某個(gè)表的權(quán)限

要進(jìn)行以上任務(wù)心例,首先我們先了解下數(shù)據(jù)庫(kù)的權(quán)限相關(guān)的內(nèi)容

主體

“主體” 是可以請(qǐng)求 SQL Server 資源的實(shí)體。 與 SQL Server 授權(quán)模型的其他組件一樣鞋囊,主體也可以按層次結(jié)構(gòu)排列止后。 主體的影響范圍取決于主體定義的范圍(Windows、服務(wù)器或數(shù)據(jù)庫(kù))以及主體是否不可分或是一個(gè)集合。 例如译株,Windows 登錄名就是一個(gè)不可分主體瓜喇,而 Windows 組則是一個(gè)集合主體。 每個(gè)主體都具有一個(gè)安全標(biāo)識(shí)符 (SID)歉糜。

Windows級(jí)別的主體

Windows域登錄名

Windows本地登錄名

SQL Server-級(jí)的主體

SQL Server登錄名

服務(wù)器角色

數(shù)據(jù)庫(kù)級(jí)的主體

數(shù)據(jù)庫(kù)用戶

數(shù)據(jù)庫(kù)角色

應(yīng)用程序角色

SQL Server sa登錄名

SQL Server sa登錄名是服務(wù)器級(jí)的主體乘寒。 默認(rèn)情況下,該登錄名是在安裝實(shí)例時(shí)創(chuàng)建的匪补。

public數(shù)據(jù)庫(kù)角色

每個(gè)數(shù)據(jù)庫(kù)用戶都屬于 public數(shù)據(jù)庫(kù)角色伞辛。 當(dāng)尚未對(duì)某個(gè)用戶授予或拒絕對(duì)安全對(duì)象的特定權(quán)限時(shí),則該用戶將繼承授予該安全對(duì)象的public角色的權(quán)限夯缺。

INFORMATION_SCHEMA和sys

每個(gè)數(shù)據(jù)庫(kù)都包含兩個(gè)實(shí)體:INFORMATION_SCHEMA和sys蚤氏,它們都作為用戶出現(xiàn)在目錄視圖中。 這兩個(gè)實(shí)體是SQL Server所必需的踊兜。 它們不是主體竿滨,不能修改或刪除它們。

基于證書(shū)的SQL Server登錄名

名稱由雙井號(hào) (##)括起來(lái)的服務(wù)器主體僅供內(nèi)部系統(tǒng)使用捏境。 下列主體是在安裝SQL Server時(shí)從證書(shū)創(chuàng)建的姐呐,不應(yīng)刪除。

##MS_SQLResourceSigningCertificate##

##MS_SQLReplicationSigningCertificate##

##MS_SQLAuthenticatorCertificate##

##MS_AgentSigningCertificate##

##MS_PolicyEventProcessingLogin##

##MS_PolicySigningCertificate##

##MS_PolicyTsqlExecutionLogin##

guest用戶

每個(gè)數(shù)據(jù)庫(kù)包括一個(gè)guest典蝌。 授予guest用戶的權(quán)限由對(duì)數(shù)據(jù)庫(kù)具有訪問(wèn)權(quán)限曙砂,但在數(shù)據(jù)庫(kù)中沒(méi)有用戶帳戶的用戶繼承。 不能刪除guest用戶骏掀,但可通過(guò)撤消該用戶的CONNECT權(quán)限將其禁用鸠澈。 可以通過(guò)在master或tempdb以外的任何數(shù)據(jù)庫(kù)中執(zhí)行REVOKE CONNECT FROM GUEST來(lái)撤消CONNECT權(quán)限。

客戶端和數(shù)據(jù)庫(kù)服務(wù)器

根據(jù)定義截驮,客戶端和數(shù)據(jù)庫(kù)服務(wù)器是安全主體笑陈,可以得到保護(hù)。 在建立安全的網(wǎng)絡(luò)連接前葵袭,這些實(shí)體之間可以互相進(jìn)行身份驗(yàn)證涵妥。 SQL Server支持Kerberos身份驗(yàn)證協(xié)議,該協(xié)議定義客戶端與網(wǎng)絡(luò)身份驗(yàn)證服務(wù)交互的方式坡锡。

創(chuàng)建數(shù)據(jù)庫(kù)用戶

SQL 2016 中支持11種用戶類型:

用戶基于登錄名在master這是最常見(jiàn)的用戶類型蓬网。

基于登錄名基于的 Windows Active Directory 帳戶的用戶。 CREATE USER [Contoso\Fritz];

基于 Windows 組的登錄名的用戶鹉勒。 CREATE USER [Contoso\Sales];

基于使用 SQL Server 身份驗(yàn)證的登錄名的用戶帆锋。 CREATE USER Mary;

在數(shù)據(jù)庫(kù)進(jìn)行身份驗(yàn)證的用戶建議以幫助使你的數(shù)據(jù)庫(kù)可移植性。

始終允許在 SQL Database禽额。 中包含的數(shù)據(jù)庫(kù)中只允許存在 SQL Server锯厢。

基于無(wú)登錄名的 Windows 用戶的用戶皮官。 CREATE USER [Contoso\Fritz];

基于無(wú)登錄名的 Windows 組的用戶。 CREATE USER [Contoso\Sales];

中的用戶 SQL Database 或 SQL 數(shù)據(jù)倉(cāng)庫(kù) 基于 Azure Active Directory 的用戶实辑。 CREATE USER [Contoso\Fritz] FROM EXTERNAL PROVIDER;

擁有密碼的包含數(shù)據(jù)庫(kù)用戶捺氢。 (在中不可用 SQL 數(shù)據(jù)倉(cāng)庫(kù)。) CREATE USER Mary WITH PASSWORD = '********';

基于Windows主體通過(guò)Windows組登錄名進(jìn)行連接的用戶

基于無(wú)登錄名但可通過(guò) Windows 組中的成員身份連接到數(shù)據(jù)庫(kù)引擎的 Windows 用戶的用戶剪撬。 CREATE USER [Contoso\Fritz];

基于無(wú)登錄名但可通過(guò)其他 Windows 組中的成員身份連接到數(shù)據(jù)庫(kù)引擎的 Windows 組的用戶摄乒。 CREATE USER [Contoso\Fritz];

無(wú)法進(jìn)行身份驗(yàn)證的用戶這些用戶無(wú)法登錄到 SQL Server 或 SQL Database。

沒(méi)有登錄名的用戶婿奔。 不能登錄,但可以被授予權(quán)限问慎。 CREATE USER CustomApp WITHOUT LOGIN;

基于證書(shū)的用戶萍摊。 不能登錄,但可以被授予權(quán)限如叼,也可以對(duì)模塊進(jìn)行簽名冰木。 CREATE USER TestProcess FOR CERTIFICATE CarnationProduction50;

基于非對(duì)稱密鑰的用戶。 不能登錄笼恰,但可以被授予權(quán)限踊沸,也可以對(duì)模塊進(jìn)行簽名。 CREATE User TestProcess FROM ASYMMETRIC KEY PacificSales09;

下面的圖片顯示了創(chuàng)建數(shù)據(jù)庫(kù)用戶需要的選項(xiàng)的含義:



創(chuàng)建用戶可以使用界面完成:





也可以使用T-SQL 來(lái)進(jìn)行創(chuàng)建

-- 創(chuàng)建登錄名:Test? 密碼是: '123456'.

CREATE LOGIN Test

WITH PASSWORD = '123456';

GO

上面說(shuō)完了用戶社证,下面說(shuō)下數(shù)據(jù)庫(kù)的角色和權(quán)限

服務(wù)器級(jí)別的權(quán)限

SQL Server提供服務(wù)器級(jí)角色以幫助你管理服務(wù)器上的權(quán)限逼龟。 這些角色是可組合其他主體的安全主體。 服務(wù)器級(jí)角色的權(quán)限作用域?yàn)榉?wù)器范圍追葡。 (“角色”類似于Windows操作系統(tǒng)中的“組”腺律。)

SQL Server提供了九種固定服務(wù)器角色。 無(wú)法更改授予固定服務(wù)器角色的權(quán)限宜肉。 從SQL Server 2012開(kāi)始匀钧,您可以創(chuàng)建用戶定義的服務(wù)器角色,并將服務(wù)器級(jí)權(quán)限添加到用戶定義的服務(wù)器角色谬返。

你可以將服務(wù)器級(jí)主體(SQL Server登錄名之斯、Windows帳戶和Windows組)添加到服務(wù)器級(jí)角色。 固定服務(wù)器角色的每個(gè)成員都可以將其他登錄名添加到該同一角色遣铝。 用戶定義的服務(wù)器角色的成員則無(wú)法將其他服務(wù)器主體添加到角色佑刷。

下表顯示了服務(wù)器級(jí)的固定角色及其權(quán)限



下表顯示了固定數(shù)據(jù)庫(kù)角色及其能夠執(zhí)行的操作。 所有數(shù)據(jù)庫(kù)中都有這些角色酿炸。 無(wú)法更改分配給固定數(shù)據(jù)庫(kù)角色的權(quán)限



無(wú)法更改分配給固定數(shù)據(jù)庫(kù)角色的權(quán)限项乒。 下圖顯示了分配給固定數(shù)據(jù)庫(kù)角色的權(quán)限:



SQL 2016有一些數(shù)據(jù)庫(kù)的特殊權(quán)限

msdb角色

msdb數(shù)據(jù)庫(kù)中包含下表顯示的特殊用途的角色。



使用R Services

SQL Server(從SQL Server vNext開(kāi)始)

安裝R Services時(shí)梁沧,其他數(shù)據(jù)庫(kù)角色可用于管理包



下面講如何實(shí)現(xiàn)文章前面說(shuō)的需求:

給某個(gè)用戶查詢所有數(shù)據(jù)庫(kù)的權(quán)限

給某個(gè)用戶只有備份數(shù)據(jù)庫(kù)的權(quán)限

給一個(gè)用戶只有指定數(shù)據(jù)庫(kù)的權(quán)限

給一個(gè)用戶只有某個(gè)表的權(quán)限

給某個(gè)用戶查詢所有數(shù)據(jù)庫(kù)的權(quán)限

創(chuàng)建一個(gè)用戶

USE [master]

GO

CREATE LOGIN [Test1] WITH PASSWORD=N'password@123'

使用Test1連接數(shù)據(jù)庫(kù)實(shí)例



可以看到數(shù)據(jù)庫(kù)列表檀何, 但是無(wú)法訪問(wèn)數(shù)據(jù)庫(kù),



賦予test1對(duì)FinaceDemo的讀取權(quán)限

USE [FinaceDemo]

GO

CREATE USER [Test1] FOR LOGIN [Test1]

ALTER ROLE [db_datareader] ADD MEMBER [Test1]

GO





這樣就可以給test1用戶對(duì)finacedemo的讀取權(quán)限

給某個(gè)用戶只有備份數(shù)據(jù)庫(kù)的權(quán)限

Test1對(duì)于finacedemo無(wú)備份權(quán)限



賦予備份權(quán)限

ALTER ROLE [db_backupoperator] ADD MEMBER [Test1]



給一個(gè)用戶只有指定數(shù)據(jù)庫(kù)的權(quán)限

我們需要Test1只能看到FinanceDemo,其他所有數(shù)據(jù)庫(kù)都不能看到

執(zhí)行下面腳本

USE [master]

Deny VIEW any DATABASE TO Test1;

go

運(yùn)行后的效果



執(zhí)行:

ALTER AUTHORIZATION ON DATABASE::FinanceDemo TO test1

完成后結(jié)果:



給一個(gè)用戶只有某個(gè)表的權(quán)限

創(chuàng)建測(cè)試用戶test3

USE [master]

GO

CREATE LOGIN [Test3] WITH PASSWORD=N'password@123'

-----賦予test2可以登錄testDB

USE [testdb]

GO

CREATE USER [Test3] FOR LOGIN [Test3]

GO

賦予test3對(duì)于t2表的updateselect權(quán)限

grant update on dbo.t2 to test3

grant select on dbo.t2 to test3

use testDB

查看test3用戶獲得的權(quán)限

exec sp_helprotect @username = 'test3'



執(zhí)行select * from t2



執(zhí)行插入操作失敗频鉴。



以上實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)權(quán)限很細(xì)致的管理栓辜,更加詳細(xì)的控制可以參考technet上面的信息。

權(quán)限管理非常復(fù)雜垛孔,以上只是做了簡(jiǎn)單的介紹藕甩。需要更加詳細(xì)的內(nèi)容,需要自己去研究周荐。在technet上可以找到更加詳細(xì)的信息狭莱。

立即訪問(wèn)http://market.azure.cn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市概作,隨后出現(xiàn)的幾起案子腋妙,更是在濱河造成了極大的恐慌,老刑警劉巖讯榕,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骤素,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡愚屁,警方通過(guò)查閱死者的電腦和手機(jī)济竹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)霎槐,“玉大人送浊,你說(shuō)我怎么就攤上這事∏鸬” “怎么了罕袋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碍岔。 經(jīng)常有香客問(wèn)我浴讯,道長(zhǎng),這世上最難降的妖魔是什么蔼啦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任榆纽,我火速辦了婚禮,結(jié)果婚禮上捏肢,老公的妹妹穿的比我還像新娘奈籽。我一直安慰自己,他們只是感情好鸵赫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布衣屏。 她就那樣靜靜地躺著,像睡著了一般辩棒。 火紅的嫁衣襯著肌膚如雪狼忱。 梳的紋絲不亂的頭發(fā)上膨疏,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音钻弄,去河邊找鬼佃却。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窘俺,可吹牛的內(nèi)容都是我干的饲帅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瘤泪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灶泵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起对途,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赦邻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后掀宋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體深纲,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仲锄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年劲妙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儒喊。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡镣奋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怀愧,到底是詐尸還是另有隱情侨颈,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布芯义,位于F島的核電站哈垢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扛拨。R本人自食惡果不足惜耘分,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绑警。 院中可真熱鬧求泰,春花似錦、人聲如沸计盒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)北启。三九已至卜朗,卻和暖如春拔第,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聊替。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工楼肪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惹悄。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓春叫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親泣港。 傳聞我的和親對(duì)象是個(gè)殘疾皇子暂殖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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