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

SQLServer與Oracle數據庫在安全性上的異同

2013-11-13 16:07:32  來源: Oracle 

  在業界普遍認為Oracle數據庫的安全性要比SQL Server數據庫高下面筆者就來談談這兩種數據庫在安全性設計上面的異同掌握好這些內容對於我們進行數據庫安全方面的設計與管理有著舉足輕重的作用

  角色到用戶的授權

  現在很多應用軟件包括數據庫系統都采用了角色到用戶的授權體系也就是說先給一個角色進行授權然後再把用戶加入到這個角色中讓其擁有這個角色的權限

  如我們在數據庫設計的時候一般至少需要兩種角色一種是系統管理員角色這種角色具有對數據庫系統進行管理如表的建立與刪除用戶的建立與修改等等另外一種是普通用戶的角色其可以對表進行插入修改刪除記錄等等的操作然後我們建立兩個帳戶一個是數據庫管理員帳戶讓其隸屬於管理員角色;再建立一個用戶帳號讓其歸屬於用戶角色如此不用給用戶設置特別的權限他們就從他們的角色中繼承了相關的權限這就是基於角色用戶的權限管理體系

  這個權限管理體系兩種數據庫都是支持的只不過具體的叫法有差異

  在SQL Sever數據庫中其沿用的是微軟操作系統的叫法把角色稱做組其實我們在給操作系統定義用戶與權限的時候也是采用這種方法我們先建立一個組再給這個組賦予特定的權限然後再建立一個用戶帳號加入到這個組中即可雖然兩個數據庫的叫法不同但是其本質是一樣的換湯不換藥而已

  兩者的差異主要體現在對特定角色的授權方面

  角色的授權

  兩個數據庫雖然在角色授權 方面雷同但在具體角色權限的分配上還是有比較大的差異用一句話來總結就是Oracle在權限的分配上要比SQL Server數據庫細Oracle在權限控制方面基本上可以細化到每個步驟

  如在用戶管理上面Oracle數據庫可以把創建用戶帳號的權利給某個組但是這個組卻沒有刪除帳號的權利而微軟的數據庫中則一般是把用戶管理的權限包括用戶創建與刪除當作一個權限賦予給某個組而不能把他們分開也就是說一個組若具有用戶帳號管理權限的話其不僅可以創建用戶帳號而且也可以刪除用戶帳號也就是說微軟的SQL Server數據庫在權限設計上沒有分得像Oracle那麼細正因為如此所以Oracle數據庫在權限管理上面要比SQL Server數據庫靈活

  不光在帳戶管理上如此數據庫很多對象權限的管理也有類似現象如對於存儲過程的管理對於表格的管理等等甲骨文的Oracle數據庫在權限劃分上比其他數據庫都要細

  對用戶進行獨立授權

  除了可以根據角色進行授權Oracle數據庫還可以在用戶帳號的級別上直接跟用戶進行授權在SQL Server數據庫上也有類似的功能但是光從這方面說前者要比後者靈活如Oracle數據庫中具有的 對象授權功能在SQL Server數據庫中就無法實現

   在用戶口令上Oracle數據庫要比SQL Server數據庫安全性更高

  眾所周知用戶口令與帳號是數據庫安全的第一道保障如在建立Oracle數據庫的用戶名的時候默認情況下其有密碼復雜性驗證設置如果我們在建立用戶名的時候把密碼設置成為Oracle數據庫不會接受因為它認為純數字的密碼過於簡單容易被破解而在微軟的SQL Server數據庫中默認情況下沒有這方面的限制

   用戶建立默認權限不同

  這兩個數據庫都可以至少通過兩種方式建立用戶名一是通過圖形化的界面建立用戶名與帳號如Oracle數據庫可以通過EM即浏覽器建立用戶帳號;而SQL Server數據庫則可以通過企業管理器建立用戶帳號另外一個是可以通過命令行也就是說通過SQL 語句建立用戶名

  從SQL Server數據庫來說這兩種建立方式沒有什麼不同但是甲骨文的Oracle數據庫還是有比較大的差異主要體現在默認權限的不同在利用浏覽器建立用戶帳號的時候默認就具有連接數據庫的權限而若在命令行中建立用戶帳號除非你明確給其指定其具有連接數據庫的權限否則的話這個帳戶是不能連接到數據庫的

  如我們通過命令建立一個test的用戶其密碼為test

  Create user test identified by test;

  注意 這裡設置用戶名密碼的時候若是純數字的密碼則數據庫不會接受

  然後我們利用如下語句連接到數據庫看看有什麼現象

  Connet test/test;

  此時數據庫會拒絕這個用戶登陸到數據庫會提示這個用戶沒有連接到數據庫的權限除非我們再利用如下命令對用戶進行授權

  Grant connect to test;

  對用戶名進行授權後才能夠連接到數據庫中去這一點差異很多數據庫管理員在剛開始接觸數據庫的時候特別是先前有SQL Server數據庫使用經驗的人一般都不容易搞清楚結果在學習或者使用的時候會遇到一些麻煩筆者因為參加過SQL Server數據庫管理員的培訓與考試所以在後續使用Oracle數據庫的時候對於這一點當時就有點困惑現在回頭想想Oracle大概是基於安全方面的考慮吧

   對象授權

  假設現在有如下這種情形

  現在有個用戶test其有product表的查詢權限而另外一個用戶test不具有這個表的任何訪問權限現在test想把product表的查詢權限賦予test讓其也可以查詢數據庫中的product表注意這裡的用戶test只是普通用戶不是數據庫管理員

  這個需求在SQL Server數據庫中是無法實現的因為用戶test沒有數據庫管理的權限而只有表查詢的權限其沒有權利為其他用戶分配這個表的查詢權限的權利但是在Oracle數據庫中則通過對象授權 的方式可以實現這個需求

  第一步利用系統管理員帳戶在分配權限的時候給予 對象授權 的權利

  如先用系統管理員帳戶登陸到系統中然後給用戶test查詢表product的權利並啟用對象授權模式具體命令如下

  Grant select on product to test with grant option;

  Grant select on product to test就表示用戶test具有查詢表product的權限;而後面的with grant option則表示對於這個用戶開啟了 對象授權 的模式以後test用戶可以把對於表product的查詢權限賦予給其他用戶

  第二步利用test用戶登陸然後賦予test用戶表prodcut的查詢權限

  Grant select on product to test;

  這個語句就是用戶test賦予用戶test表product的查詢權利若我們在給test用戶賦予權限的時候沒有啟用對象授權模式即沒有在後面加入with grant option語句則在以普通用戶test執行這條語句的時候就會發生錯誤提示用戶沒有這個權限但是若我們系統管理員在給test用戶分配權限的時候開啟了對象授權的模式則用戶test就可以賦予用戶test表查詢的權限不過這只是針對於特定的表與特定的操作如果數據庫管理員在分配test用戶權限的時候只用了Grant select on product to test with grant option這個語句就表示test用戶只能針對表product的查詢權限進行再授權現在test想把表productbom的查詢權限賦予給test的話數據庫服務器就不允許了因為其沒有這個權利

  這就是對象授權的功能雖然其破壞了數據庫權限管理的統一性但是這也提高了數據庫權限設計的靈活性在大型數據庫設計的過程中經常會被用到

  除了對表可以進行對象授權之外還可以對過程視圖等等也進行對象授權這裡要注意的是在對象授權的過程中是需要對每個步驟進行授權如現在用戶test具有表product記錄查詢記錄更新記錄刪除等的權利但是其只有表查詢權利的對象授權此時test用戶就不能夠把這個表的更新刪除等權利賦予給用戶test因為帳戶test對對象進行再授權只是針對特定的查詢操作

  另外除了對象授權之外Oracle數據庫中還有一個系統授權的概念系統授權跟對象授權類似只是其針對的是系統管理的權限如帳戶刪除或者新建的操作需要注意的是系統授權仍然需要分步驟來進行授權


From:http://tw.wingwit.com/Article/program/Oracle/201311/17851.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.