MS SQL基礎教程:SQL Server安全性管理的途徑

iSQlServer發表於2010-03-19

當在伺服器上執行SQL Server 時,我們總是要想方設法去使SQL Server 免遭非法使用者的侵入,拒絕其訪問資料庫,保證資料的安全性。SQL Server 提供了強大的內建的安全性和資料保護,來幫助實現這種理所當然的要求。從前面的介紹中我們可以看出SQL Server 提供了從作業系統,SQL ServerE, 資料庫到物件的多級別的安全保護。其中也涉及到角色、資料庫使用者、許可權等多個與安全性有關的概念。在本書前面我們也暗示過儲存過程和觸發器在保護資料安全性上不可小視的作用。現在我們面臨的問題就是如何在SQL Server 內把這些不同的與安全性有關的元件結合起來,充分地利用各種元件的優點,考慮到其可能存在的缺點來揚長避短,制定可靠的安全策略。使SQL Server 更健壯,更為“不可侵犯”。

下面我們將介紹幾種安全性管理策略,您應該做的就是看懂並理解這些策略方法,然後將它們簡單地結合到一起就可以了。

14.6.1 使用檢視作為安全機制

在遊標和檢視一章我們已經提到檢視可以做為一種安全機制的主要原因在於檢視是一張虛表,而且它是由查詢語句來定義的,是一個資料結果集,通過檢視,使用者僅能查詢修改他所能看到的資料,其它的資料庫或表對於該使用者既不可見也無法訪問。通過檢視的許可權設定,使用者只具有相應的訪問檢視的許可權,但並不具有訪問檢視所引用的基本表的相應許可權。

通過使用不同的檢視並對使用者授予不同的許可權,不同的使用者可以看到不同的結果集,可以實現行級或列級的資料安全性。下面的幾個例子說明了檢視是如何實現資料安全性。

14.6.2 使用了行級、列級別安全性的檢視

例14-18: 在該例中某一銷售點只能檢視它自己的銷售資訊。我們使用pubs 資料庫中的sales 表。

首先建立檢視

 

14.6.3 檢視與許可權結合

如果將訪問檢視的許可權授予給使用者,這樣即使該使用者不具有訪問檢視所引用的基本表的許可權,但其仍可以從中檢視相應的資料資訊。

檢視與許可權相結合究竟能帶來什麼好處呢?下面我們舉一個例子來進行說明。首先假設使用者A 對sales 表的payterms 列沒有SELECT 許可權,對其它列有且僅有SELECT 許可權,如果要檢視其它銷售資訊不能使用這樣的語句:

select * from sales

而必須指出其餘列的列名。這就要求使用者瞭解表的結構,通常來說讓使用者瞭解表結構是一件很不聰明的事,那麼如何解決這一問題呢?

很簡單如果建立一個檢視view1, 該檢視包含除payterms 列外的所有列,並且將 SELECT 許可權授予使用者A, 這樣使用者A 就可以執行語句:select * from view1, 從而檢視到銷售資訊。

14.6.4 使用儲存過程作為安全機制

如果使用者不具有訪問檢視和表的許可權,那麼通過儲存過程仍能夠讓其查詢相應的資料資訊,實現的方法很簡單,只要讓該使用者具有儲存過程的EXEC 許可權就可以了。當然要確保該儲存過程中包含了查詢語句。比如可建立下面的儲存過程:

create procedure selsales as

select * from sales

然後將儲存過程的EXEC 許可權授予使用者,當使用者執行該儲存過程時就可以檢視到相應資訊。

使用儲存過程的優點在於不必對檢視和表的訪問許可權進行分配。

本章小結

本章主要討論了SQL Server 的安全性管理問題。涉及到資料庫使用者、角色、許可權等作為一名系統管理員或安全管理員,在進行安全屬性配置前,首先要確定應使用哪種身份認證模式。要注意恰當地使用guest 使用者和public 角色,並深刻了解應用角色對於實現資料查詢和處理的可控性所展示出的優點。


本文來自-程式設計入門網:http://www.bianceng.cn/database/SQLServer/200807/10945.htm

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-629910/,如需轉載,請註明出處,否則將追究法律責任。

相關文章