SQL Server 安全性管理的途徑
添加時間:2014-4-20 15:56:06
添加:
思海網(wǎng)絡(luò)
當(dāng)在服務(wù)器上運行SQL Server 時,我們總是要想方設(shè)法去使SQL Server 免遭非法用戶的侵入,拒絕其訪問數(shù)據(jù)庫,保證數(shù)據(jù)的安全性。SQL Server 提供了強大的內(nèi)置的安全性和數(shù)據(jù)保護(hù),來幫助實現(xiàn)這種理所當(dāng)然的要求。從前面的介紹中我們可以看出SQL Server 提供了從操作系統(tǒng),SQL ServerE, 數(shù)據(jù)庫到對象的多級別的安全保護(hù)。其中也涉及到角色、數(shù)據(jù)庫用戶、權(quán)限等多個與安全性有關(guān)的概念。在本書前面我們也暗示過存儲過程和觸發(fā)器在保護(hù)數(shù)據(jù)安全性上不可小視的作用。現(xiàn)在我們面臨的問題就是如何在SQL Server 內(nèi)把這些不同的與安全性有關(guān)的組件結(jié)合起來,充分地利用各種組件的優(yōu)點,考慮到其可能存在的缺點來揚長避短,制定可靠的安全策略。使SQL Server 更健壯,更為“不可侵犯”。
下面我們將介紹幾種安全性管理策略,您應(yīng)該做的就是看懂并理解這些策略方法,然后將它們簡單地結(jié)合到一起就可以了。
14.6.1 使用視圖作為安全機制
在游標(biāo)和視圖一章我們已經(jīng)提到視圖可以做為一種安全機制的主要原因在于視圖是一張?zhí)摫?而且它是由查詢語句來定義的,是一個數(shù)據(jù)結(jié)果集,通過視圖,用戶僅能查詢修改他所能看到的數(shù)據(jù),其它的數(shù)據(jù)庫或表對于該用戶既不可見也無法訪問。通過視圖的權(quán)限設(shè)置,用戶只具有相應(yīng)的訪問視圖的權(quán)限,但并不具有訪問視圖所引用的基本表的相應(yīng)權(quán)限。
通過使用不同的視圖并對用戶授予不同的權(quán)限,不同的用戶可以看到不同的結(jié)果集,可以實現(xiàn)行級或列級的數(shù)據(jù)安全性。下面的幾個例子說明了視圖是如何實現(xiàn)數(shù)據(jù)安全性。
14.6.2 使用了行級、列級別安全性的視圖
例14-18: 在該例中某一銷售點只能查看它自己的銷售信息。我們使用pubs 數(shù)據(jù)庫中的sales 表。
如果將訪問視圖的權(quán)限授予給用戶,這樣即使該用戶不具有訪問視圖所引用的基本表的權(quán)限,但其仍可以從中查看相應(yīng)的數(shù)據(jù)信息。
視圖與權(quán)限相結(jié)合究竟能帶來什么好處呢?下面我們舉一個例子來進(jìn)行說明。首先假設(shè)用戶A 對sales 表的payterms 列沒有SELECT 權(quán)限,對其它列有且僅有SELECT 權(quán)限,如果要查看其它銷售信息不能使用這樣的語句:
select * from sales
而必須指出其余列的列名。這就要求用戶了解表的結(jié)構(gòu),通常來說讓用戶了解表結(jié)構(gòu)是一件很不聰明的事,那么如何解決這一問題呢?
很簡單如果創(chuàng)建一個視圖view1, 該視圖包含除payterms 列外的所有列,并且將 SELECT 權(quán)限授予用戶A, 這樣用戶A 就可以執(zhí)行語句:select * from view1, 從而查看到銷售信息。
14.6.4 使用存儲過程作為安全機制
如果用戶不具有訪問視圖和表的權(quán)限,那么通過存儲過程仍能夠讓其查詢相應(yīng)的數(shù)據(jù)信息,實現(xiàn)的方法很簡單,只要讓該用戶具有存儲過程的EXEC 權(quán)限就可以了。當(dāng)然要確保該存儲過程中包含了查詢語句。比如可創(chuàng)建下面的存儲過程:
create procedure selsales as
select * from sales
然后將存儲過程的EXEC 權(quán)限授予用戶,當(dāng)用戶執(zhí)行該存儲過程時就可以查看到相應(yīng)信息。
使用存儲過程的優(yōu)點在于不必對視圖和表的訪問權(quán)限進(jìn)行分配。
下面我們將介紹幾種安全性管理策略,您應(yīng)該做的就是看懂并理解這些策略方法,然后將它們簡單地結(jié)合到一起就可以了。
14.6.1 使用視圖作為安全機制
在游標(biāo)和視圖一章我們已經(jīng)提到視圖可以做為一種安全機制的主要原因在于視圖是一張?zhí)摫?而且它是由查詢語句來定義的,是一個數(shù)據(jù)結(jié)果集,通過視圖,用戶僅能查詢修改他所能看到的數(shù)據(jù),其它的數(shù)據(jù)庫或表對于該用戶既不可見也無法訪問。通過視圖的權(quán)限設(shè)置,用戶只具有相應(yīng)的訪問視圖的權(quán)限,但并不具有訪問視圖所引用的基本表的相應(yīng)權(quán)限。
通過使用不同的視圖并對用戶授予不同的權(quán)限,不同的用戶可以看到不同的結(jié)果集,可以實現(xiàn)行級或列級的數(shù)據(jù)安全性。下面的幾個例子說明了視圖是如何實現(xiàn)數(shù)據(jù)安全性。
14.6.2 使用了行級、列級別安全性的視圖
例14-18: 在該例中某一銷售點只能查看它自己的銷售信息。我們使用pubs 數(shù)據(jù)庫中的sales 表。
首先創(chuàng)建視圖
create view specificsale as select ord_num,ord_date,qty,payterms,title_id from sales where stor_id='12'
14.6.3 視圖與權(quán)限結(jié)合如果將訪問視圖的權(quán)限授予給用戶,這樣即使該用戶不具有訪問視圖所引用的基本表的權(quán)限,但其仍可以從中查看相應(yīng)的數(shù)據(jù)信息。
視圖與權(quán)限相結(jié)合究竟能帶來什么好處呢?下面我們舉一個例子來進(jìn)行說明。首先假設(shè)用戶A 對sales 表的payterms 列沒有SELECT 權(quán)限,對其它列有且僅有SELECT 權(quán)限,如果要查看其它銷售信息不能使用這樣的語句:
select * from sales
而必須指出其余列的列名。這就要求用戶了解表的結(jié)構(gòu),通常來說讓用戶了解表結(jié)構(gòu)是一件很不聰明的事,那么如何解決這一問題呢?
很簡單如果創(chuàng)建一個視圖view1, 該視圖包含除payterms 列外的所有列,并且將 SELECT 權(quán)限授予用戶A, 這樣用戶A 就可以執(zhí)行語句:select * from view1, 從而查看到銷售信息。
14.6.4 使用存儲過程作為安全機制
如果用戶不具有訪問視圖和表的權(quán)限,那么通過存儲過程仍能夠讓其查詢相應(yīng)的數(shù)據(jù)信息,實現(xiàn)的方法很簡單,只要讓該用戶具有存儲過程的EXEC 權(quán)限就可以了。當(dāng)然要確保該存儲過程中包含了查詢語句。比如可創(chuàng)建下面的存儲過程:
create procedure selsales as
select * from sales
然后將存儲過程的EXEC 權(quán)限授予用戶,當(dāng)用戶執(zhí)行該存儲過程時就可以查看到相應(yīng)信息。
使用存儲過程的優(yōu)點在于不必對視圖和表的訪問權(quán)限進(jìn)行分配。
以上主要討論了SQL Server 的安全性管理問題。涉及到數(shù)據(jù)庫用戶、角色、權(quán)限等作為一名系統(tǒng)管理員或安全管理員,在進(jìn)行安全屬性配置前,首先要確定應(yīng)使用哪種身份認(rèn)證模式。要注意恰當(dāng)?shù)厥褂胓uest 用戶和public 角色,并深刻了解應(yīng)用角色對于實現(xiàn)數(shù)據(jù)查詢和處理的可控性所展示出的優(yōu)點。
關(guān)鍵字:SQL Server、服務(wù)器、數(shù)據(jù)庫
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解