程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 支你三招搞定SQL Server數據庫權限沖突

支你三招搞定SQL Server數據庫權限沖突

編輯:關於SqlServer

如何解決數據庫權限沖突問題?我們建站學支你三招搞定SQL Server數據庫權限沖突。數據庫主要是通過角色來繼承相關的權限。但是,這個權限繼承很容易造成權限上的沖突。如現在有個銷售員賬戶SALE1,有一個銷售部門角色DE_SALES。其中銷售部門角色DE_SALES具有查詢所有客戶信息,即CUSTOM表的權限。  在SQL Server數據庫中,主要是通過角色來繼承相關的權限。但是,這個權限繼承很容易造成權限上的沖突。如現在有個銷售員賬戶SALE1,有一個銷售部門角色DE_SALES。其中銷售部門角色DE_SALES具有查詢所有客戶信息,即CUSTOM表的權限。但是銷售員賬戶SALE1其由於是為試用期的員工設置的臨時帳戶,所以其不能夠查詢CUSTOM表。但是,SALE1帳戶其是屬於銷售部門這個角色,其會繼承銷售部門這個角色的所有訪問權限。此時,SALE1帳戶所屬角色的權限跟自己帳戶的權限就產生了沖突。遇到這種情況,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。因為拒絕權限總是被優先執行。所以說,用戶最終得到的是對象上所授予、拒絕或者廢除權限的全部權限的並集。其中,拒絕權限具有最優先的權利。
  通過拒絕、廢除、授權等權限操作,可以減少因為權限繼承所導致的權限沖突。最後,筆者建議,在高級別的權限設置上,如組或者角色上,最好不要輕易使用拒絕權限。拒絕權限因為具有最優先的執行權力,所以一般在用戶級別上采用即可。若在組或者角色上采用拒絕權限,則在用戶上所采取的廢除權限或者授予權限操作都將不能夠其作用。為此,為了提高權限管理的靈活性,筆者認為拒絕權限在用戶級別上實施比較合理,可以提高權限管理的靈活性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved