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

三招解決SQL Server數據庫權限沖突

2013-11-15 14:52:17  來源: SQL Server 

  在SQL Server數據庫中主要是通過角色來繼承相關的權限但是這個權限繼承很容易造成權限上的沖突如現在有個銷售員賬戶SALE有一個銷售部門角色DE_SALES其中銷售部門角色DE_SALES具有查詢所有客戶信息即CUSTOM表的權限但是銷售員賬戶SALE其由於是為試用期的員工設置的臨時帳戶所以其不能夠查詢CUSTOM表但是SALE帳戶其是屬於銷售部門這個角色其會繼承銷售部門這個角色的所有訪問權限此時SALE帳戶所屬角色的權限跟自己帳戶的權限就產生了沖突遇到這種情況SQL Server數據庫該如何處理呢?

  在SQLServer數據庫中授予組或者角色的權限由該組或者角色的成員所繼承雖然某個用戶可能在一個級別上授予或者廢除權限但如果這些權限與更高級的權限發生沖突的話則可能會打破數據庫管理員的權限設計思路讓某個用戶意外的禁止或者允許訪問某個數據庫對象為了避免因為數據庫權限沖突所導致的一系列問題SQLServer數據庫提出了一些解決措施雖然通過這些措施不能夠完全避免權限之間的沖突但是至少讓數據庫管理員看到了解決問題的希望

  招數一明確拒絕

  應用場景現在數據庫中有用戶Landy其屬於銷售員SALES角色其中銷售員角色具有查詢客戶信息表Customs的權限而由於某種原因數據庫管理員限制用戶Landy訪問數據庫對象Customs表的權利此時就會有對象訪問權限上的沖突此時數據庫管理員該如何才能夠避免這種沖突呢?

  第一個招數就是學會使用拒絕操作在數據庫中拒絕權限始終優先在任何級別(無論是用戶或者角色)上的拒絕權限都拒絕該對象上的權限無論該用戶現有的權限是否已授予權限還是被廢除權限這聽起來比較繞口或許根據上面的例子來講大家更容易明白如上例若要解決上面的權限沖突問題則我們只需要在用戶Landy的權限設置中拒絕其具有數據庫對象表Customs表的Select權限由於顯示的拒絕其總被優先執行所以即使其所屬的角色具有表Customs的訪問權限但是其成員Landy由於被顯示的拒絕根據拒絕優先的選擇則其最終不會有數據庫表Customs的訪問權限

  所以筆者所傳授給大家的第一個招數就是要學會使用拒絕操作各位數據庫管理員要牢記在權限管理中拒絕操作總是被優先執行另外還有一個極端的例子可以說明這個問題如果數據庫管理員把Public進行設置設置為拒絕權限此時由於拒絕權限被優先執行則數據會禁止任何用戶訪問能數據庫對象故拒絕權限一般往往用在用戶級別上可以實現對個別特殊用戶的權限控制而不用給他們設置獨立的組這讓數據庫權限管理更加的靈活

  招數二廢除權限可以讓某些帳戶恢復正常

  應用情景現在數據庫中有用戶Landy其屬於銷售員SALES角色其中銷售員角色具有查詢客戶信息表Customs的權限而由於某種原因數據庫管理員限制用戶Landy訪問數據庫對象Customs表的權利此時數據庫管理員給Landy用戶顯示的拒絕訪問Customs表的權利但是現在這個限制其訪問客戶表的原因已經消除用戶Landy 可以正常訪問表Customs了此時該如何處理呢?

  此時數據庫管理員可以通過廢除權限操作來完成需求廢除權限只刪除所廢除級別(如用戶角色或者組)上的已授予權限或者已拒絕權限而在另外級別上所授予或者拒絕的同一權限仍然適用廢除權限類似於拒絕權限因為二者都是在同一級別上刪除已經授予的權限但是廢除權限是刪除已經授予的權限並不妨礙用戶組或者角色從更高級別繼承已授予的權限為此如果廢除用戶查看表的權限並不一定能夠防止用戶查看該表這跟拒絕權限操作就有本質的區別

  舉例來說在上面這個例子中Landy用戶剛開始其被顯示的拒絕訪問表Customs雖然其所屬的角色具有訪問表Customs的權限但是因為拒絕優先所以用戶Landy最終不能過訪問這個表此時若限制原因消除則數據庫管理員可以采取廢除權限操作把Landy用戶上的拒絕權限廢除掉因為廢除權限只刪除用戶Landy上已拒絕訪問這個表的權限而不影響從角色SALES中繼承統一權限為此用戶Landy最終具有訪問這個表Customs的權限這就是廢除權限操作的本質

  在實際工作中廢除權限操作與拒絕權限操作往往被用來處理一些特殊的帳戶如不少企業中試用期員工其權限往往會受到限制出於安全起見企業不會讓一些還在試用期的員工訪問所有的數據為此就要對他們的權限進行限制此時就可以在這些用戶帳戶級別上顯示的拒絕實現部分訪問限制的需求當他們試用期過後若試用合格的話就可以把這些帳戶的拒絕權限廢除掉如此的話他們就可以正常繼承他們所屬角色或者組的權限可見拒絕權限與廢除權限結合可以讓數據庫全縣的管理更加的統一最終要的是可以最大程度的避免因為權限沖突而導致的數據管理上的安全漏洞

  另外在實際配置中需要注意一個問題雖然廢除權限具有廢除拒絕權限的能力但是他只能夠在一個級別上其作用如上面這個例子中另外還有一個T_SALES的角色其權限設置中顯示的拒絕訪問表Customs此時若用戶Landy同時屬於SALES角色和T_SALES角色雖然通過廢除權限廢除了用戶Landy級別上的拒絕訪問表Customs的權限但是用戶Landy所屬的T_SALES角色中的拒絕權限仍然具有優先執行的權力所以最終這個用戶仍然不能夠訪問表Customs所以通過廢除對權限的拒絕可以刪除已經拒絕的權限但是如果用戶在其他組或者角色級別有其他拒絕權限的話在該用戶訪問某個對象的權限仍然會被拒絕

  招數三授權操作讓用戶訪問權限一目了然

  應用情景現在數據庫中有用戶Landy其屬於銷售員SALES角色其中銷售員角色具有查詢客戶信息表Customs的權限而由於某種原因數據庫管理員限制用戶Landy訪問數據庫對象Customs表的權利此時數據庫管理員給Landy用戶顯示的拒絕訪問Customs表的權利但是現在這個限制其訪問客戶表的原因已經消除用戶Landy 可以正常訪問表Customs了此時該如何處理呢?

  此時除了可以通過上面的廢除權限操作來處理還可以通過授權操作來完成廢除權限操作有一個缺陷就是數據庫管理員要判斷這個用戶到底是否具有某個數據庫對象的訪問權限時還需要去查看其所屬的角色或者組中的權限設置這會增加一定的工作量而授權操作則可以避免這種情況授予權限刪除所授予級別傷的已經拒絕權限或者已經廢除權限而在另一級別上所拒絕權限的同一權限仍然適用但是雖然在另一級別上所廢除的同一權限仍然適用但他不阻止用戶訪問該對象也就是說如果Sales角色可以訪問表Customs現在數據庫管理員授予了用戶Landy訪問Customs表的權限則用戶最終具有訪問表Customs的權限但是如果Sales角色顯示的拒絕了表Customs的查詢權限此時即使顯示的授予用戶Landy表Customs的訪問權限則該用戶仍然不能夠訪問表Customs因為拒絕權限總是被優先執行所以說用戶最終得到的是對象上所授予拒絕或者廢除權限的全部權限的並集其中拒絕權限具有最優先的權利

  通過拒絕廢除授權等權限操作可以減少因為權限繼承所導致的權限沖突最後筆者建議在高級別的權限設置上如組或者角色上最好不要輕易使用拒絕權限拒絕權限因為具有最優先的執行權力所以一般在用戶級別上采用即可若在組或者角色上采用拒絕權限則在用戶上所采取的廢除權限或者授予權限操作都將不能夠其作用為此為了提高權限管理的靈活性筆者認為拒絕權限在用戶級別上實施比較合理可以提高權限管理的靈活性


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