熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL Server 安全性管理的途徑

2013-11-15 14:48:24  來源: SQL Server 

  當在服務器上運行SQL Server 時我們總是要想方設法去使SQL Server 免遭非法用戶的侵入拒絕其訪問數據庫保證數據的安全性SQL Server 提供了強大的內置的安全性和數據保護來幫助實現這種理所當然的要求從前面的介紹中我們可以看出SQL Server 提供了從操作系統SQL ServerE 數據庫到對象的多級別的安全保護其中也涉及到角色數據庫用戶權限等多個與安全性有關的概念現在我們面臨的問題就是如何在SQL Server 內把這些不同的與安全性有關的組件結合起來充分地利用各種組件的優點考慮到其可能存在的缺點來揚長避短制定可靠的安全策略使SQL Server 更健壯更為“不可侵犯”

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

   使用視圖作為安全機制

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

  通過使用不同的視圖並對用戶授予不同的權限不同的用戶可以看到不同的結果集可以實現行級或列級的數據安全性下面的幾個例子說明了視圖是如何實現數據安全性

   使用了行級列級別安全性的視圖

  例 在該例中某一銷售點只能查看它自己的銷售信息我們使用pubs 數據庫中的sales 表

  首先創建視圖

   視圖與權限結合

  如果將訪問視圖的權限授予給用戶這樣即使該用戶不具有訪問視圖所引用的基本表的權限但其仍可以從中查看相應的數據信息

  視圖與權限相結合究竟能帶來什麼好處呢?下面我們舉一個例子來進行說明首先假設用戶A 對sales 表的payterms 列沒有SELECT 權限對其它列有且僅有SELECT 權限如果要查看其它銷售信息不能使用這樣的語句

  select * from sales

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

  很簡單如果創建一個視圖view 該視圖包含除payterms 列外的所有列並且將 SELECT 權限授予用戶A 這樣用戶A 就可以執行語句select * from view 從而查看到銷售信息

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

  如果用戶不具有訪問視圖和表的權限那麼通過存儲過程仍能夠讓其查詢相應的數據信息實現的方法很簡單只要讓該用戶具有存儲過程的EXEC 權限就可以了當然要確保該存儲過程中包含了查詢語句比如可創建下面的存儲過程

  create procedure selsales as

  select * from sales

  然後將存儲過程的EXEC 權限授予用戶當用戶執行該存儲過程時就可以查看到相應信息

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

  小結

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


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22355.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.