qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          SQL數據庫安全性

            許多Windows系統管理員,還兼職著微軟SQL Server數據庫管理員(DBA)的身份。另一方面,企業將許多機密的信息存儲到了SQL Server數據庫中。作為一名DBA新手,則需要了解SQL Server的安全模式和如何配置其安全設置,以保證“合法”用戶的訪問并阻止“非法”訪問。而在SQL Server中登陸、用戶、角色、權限提供了對數據庫訪問的權限,接下來在數據庫安全性上著重分析它們的關系。

            ● 安全層次和驗證模式

            一、安全層次

            SQL Server支持三級安全層次。在我們登陸到SQL Server時,其實我們是經過了三步的驗證。

            第一層次是用戶提供正確的賬號和密碼登錄到SQL Server,或者已經成功登陸了一個可以映射到SQL Server的windows賬號。但是在SQL Server登陸并不意味著能夠訪問數據庫,而是要經過第二層次的驗證。

            第二層次的權限允許用戶與一個或多個數據庫相連,這一層次的實現要在數據庫對象的用戶中綁定登陸賬戶。

            第三個層次的安全權限允許用戶擁有對指定數據庫中的對象的訪問權限,例如:可以指定用戶有權使用哪些表和視圖、運行哪些存儲過程。在第一層次中的windows賬號,其實是在我們裝機時給windows指定的自己登陸到windows系統的賬號,而作為windows系統管理員的我們其實也兼職了SQL Server的管理權,那我們如何設置才能保證只有我們指定的用戶才能訪問SQL數據庫呢?就是我們下面要說的驗證模式。

            二、SQL登陸驗證模式

            SQL的登陸驗證模式有兩種,一種是Windows的驗證模式,另一種是Windows和SQL Server混合驗證模式。如果我們選擇windows模式登陸并把windows賬號映射到SQL Server的登陸上,那么合法的windows用戶也就連接到了SQL Server中。

            Windows模式的登陸需要在SQL Server中設置。方法:

            打開SQL Server企業管理器,找到安全性文件夾,打開后再登陸中新建一個windows身份驗證模式的賬戶。需要注意的是在新建賬戶時,賬戶的名稱一定要填我們windows賬戶的名字,如:我的計算機在用戶中名稱為張信秀,則在填名稱時一定要填張信秀。



          SQL Server的驗證模式相對windows的登陸模式在設置上沒有特別的要求,只需填上我們的密碼即可。

            接下來進入我們的重點——角色、權限,首先我們在圖上來區分。

            ● 登陸、權限、角色

            在往下說之前我們先介紹下安全賬戶。返回到安全層次上來說,賬戶在登錄到SQL Server后,如果想獲得訪問某個數據庫的權限,是必須要在SQL中獲得安全賬戶的,確保登陸的賬號是安全的,就好比是我們出國的護照簽證一樣,想要去哪個國家必須獲得該國家的簽證和出入境章,這個安全賬戶就是在數據庫對象的用戶中綁定一個登陸賬號,證明這個登陸賬號是安全的。

            賬戶、角色、權限他們三者是沒有嚴格的關系的,如果有的話就是角色給賬戶分配職能,而權限卻又限制著角色和賬戶對數據庫的操作。它們三者就好像是公司里的員工、職權、規章,公司按照職能非配不同的員工,但是每個員工卻又受到公司規章的限制。

            一、數據庫角色

            數據庫角色控制著數據庫的安全性。當最終用戶成功地連接到分析服務器之后,會在那個服務器上的數據庫角色中查找最終用戶的用戶名,來確定用戶對數據庫的可能操作。

            數據庫角色在創建時有兩種:

            1、標準角色:不允許嵌套,在使用時只需在安全賬戶中添加,通過分配權限確保了用戶能夠進行的操作;

            2、應用程序角色:為了讓標準角色嵌套,來控制角色所能進行的操作,創建后SQL Server把它當做賬戶看待(因為它是應用程序級別的),它的作用是為權限提供相應的加密,用存儲過程sp_setapprole激活才可進行授予權限的操作。

            二、權限

            權限有三種類型,

            1、語句權限:限制對表update、insert等的操作,在創建角色時或添加安全用戶后設置;

            2、對象權限:限制用戶對數據庫對象的創建,在數據庫屬性內設置;

            3、暗示性權限:SQL Server數據庫自帶的那些角色或用戶,如:服務器角色、數據庫所有者(dbo)等擁有的權限,不需要了解他,因為它是系統自己設置的用戶不能夠設置。

            最后我們在代碼中應用下三者:

          /*示例說明:在數據庫company中創建一個擁有表product的所有權限、擁有表employees的SELECT權限的角色rtest隨后創建了一個登錄ltest,然后在數據庫company中為登錄ltest創建了用戶賬戶utest同時將用戶賬戶utest添加到角色rtest中,使其通過權限繼承獲取了與角色rtest一樣的權限最后使用DENY語句拒絕了用戶賬戶utest對表titles的SELECT權限。經過這樣的處理,使用ltest登錄SQL Server實例后,它只具有表product的所有權限。
          */

          USE company

          --創建角色 rtest
          EXEC sp_addrole 'rtest'

          --授予 rtest 對product 表的所有權限
          GRANT ALL ON product TO rtest
          --授予角色 rtest 對 employees 表的 SELECT 權限
          GRANT SELECT ON titles TO rtest

          --添加登錄 ltest,設置密碼為pwd,默認數據庫為pubs
          EXEC sp_addlogin 'ltest','pwd','company'

          --為登錄 ltest 在數據庫 pubs 中添加安全賬戶 utest
          EXEC sp_grantdbaccess 'ltest','utest'

          --添加 utest 為角色 rtest 的成員
          EXEC sp_addrolemember 'rtest','utest'

          --拒絕安全賬戶 utest 對 employees 表的 SELECT 權限
          DENY SELECT ON employees TO utest

          /*--完成上述步驟后,用 ltest 登錄,可以對company表進行所有操作,但無法對employees表查詢,雖然角色 rtest 有employees表的select權限,但已經在安全賬戶中明確拒絕了對employees的select權限,所以ltest無employees表的select權限--*/

          --從數據庫 company 中刪除安全賬戶
          EXEC sp_revokedbaccess 'utest'

          --刪除登錄 ltest
          EXEC sp_droplogin 'ltest'

          --刪除角色 rtest
          EXEC sp_droprole 'rtest'

            ● 總結:

            在新建登陸時,利用服務器角色分配賬戶的功能,利用數據庫角色管理用戶對數據庫進行的操作。在新建角色時為角色分配權限,來限制用戶的操作。

            懂得SQL Server安全性的機制后,我們就可以開發自己的數據庫安全策略了。你下一步所需要的可能就是產生一個SQL Server腳本了。在SQL Server企業管理器中,右擊一個數據庫,選擇“所有任務”,選擇“生成SQL腳本”,這個選項能夠產生一個腳本,對包括安全策略在內的數據庫進行更新。一個腳本文件可以代替通過鼠標在SQL Server事件管理器中進行點擊和選擇的操作,大大減少DBA的工作量。


          posted on 2012-08-24 11:00 順其自然EVO 閱讀(348) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 通山县| 恩施市| 华阴市| 永川市| 南岸区| 济阳县| 大埔县| 望都县| 秦皇岛市| 苏州市| 弋阳县| 临武县| 永新县| 莱阳市| 烟台市| 上蔡县| 桂阳县| 杨浦区| 高安市| 宁晋县| 洛扎县| 吉水县| 正镶白旗| 稻城县| 昌图县| 谢通门县| 太湖县| 加查县| 嘉定区| 新兴县| 沛县| 通江县| 玛纳斯县| 夏津县| 蒙自县| 泽州县| 海盐县| 登封市| 资源县| 鹤山市| 内江市|