三招解决SQL Server数据库权限冲突
作者:彭芬 来源:IT专家网 发布时间:2009-03-16 16:58:00
在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。因为拒绝权限总是被优先执行。所以说,用户最终得到的是对象上所授予、拒绝或者废除权限的全部权限的并集。其中,拒绝权限具有最优先的权利。
通过拒绝、废除、授权等权限操作,可以减少因为权限继承所导致的权限冲突。最后,笔者建议,在高级别的权限设置上,如组或者角色上,最好不要轻易使用拒绝权限。拒绝权限因为具有最优先的执行权力,所以一般在用户级别上采用即可。若在组或者角色上采用拒绝权限,则在用户上所采取的废除权限或者授予权限操作都将不能够其作用。为此,为了提高权限管理的灵活性,笔者认为拒绝权限在用户级别上实施比较合理,可以提高权限管理的灵活性。
猜你喜欢
- 第一步一般是建立一个关键字替换表 如 id keyword url 等字段第二步是文章显示时把【文章】内容和【关键字替换表】对应的关键字替换
- 现在很多朋友都不止一个账户,不止一个密码。忘记账户名、密码,或账户名、密码输入错误也就难免啦。每当这个时候,你是否和我一样会有小小的焦虑产生
- 这里所说的“小偷”指的是在ASP中运用XML中的xmlhttp组件提供的强大功能,把远程网站上的数据(图片,网页及其他文件)抓取采集到本地,
- 在附加数据库后查看不了数据库关系图,也无法建立数据库关系图 我的解决方法如下: 1、设置兼容级别为90(2005为90)(2000为80)
- 我们在使用ASP 内置的ADO组件进行数据库编程时,通常是在脚本的开头打开一个连接,并在脚本的最后关闭它,但是就较大脚本而言,在多数情况下连
- 这一段时间,我在进行“09帮助中心升级”项目,负责其中的白板和视觉设计,总算和Axure有了第一次的正式会晤。由于之前已经零散地学习过一些A
- 1、给滚动条换色 好多网站的滚动条不是系统默认的灰色,而是一些红色、蓝色的,请问这是如何做的?答:这个很好实现,插入下面的代码:<&n
- 最近几天仔细研究了一下vertical-align这个属性,结果让我大吃一惊,这个很“资深”的CSS标准竟然在各个浏览器里面的表现都各不相同
- <style> #L { position:absolute; color:
- 阅读作者上一篇文章:段正淳的css笔记(4)css代码的简写CSS未知图片垂直居中的方法:一天大家在团队中讨论“未知图片垂直居中”的问题,突
- 在网络上看到的数字人整合动网论坛的方法都非常不全,站长们都是抄人家的,也不说明可不可用,提供下载的文件也不能下载.现在我提供一些信息。一、整
- 如何用SysOjects来获知数据库的信息?SysObjects中就保存了数据库中所有对象的信息,如:SELECT * FROM SysOb
- CSS 3 + HTML 5 是未来的 Web,它们都还没有正式到来,虽然不少浏览器已经开始对它们提供部分支持。本文介绍了 5 个 CSS3
- 今天给大家讲的是ASP给图片加水印的知识ASP给图片加水印是需要组件的…常用的有aspjpeg和中国人自己开发的wsImage…前者有30天
- 如何用下拉列表显示数据库里的内容? 我们来看看实现这个功能的程序:<%Dim objDC, objRSS
- 经过漫长的等待,近日,微软终于发布了Silverlight 2正式版的发布不仅让微软有了更多和Flash叫板的机会,同时也将RIA(Rich
- 在oracle中有很多关于日期的函数,如:1、add_months()用于从一个日期值增加或减少一些月份 date_value:=add_m
- 【译者的话】 网页上的小广告(banner)已经成为一种宣传推广的重要形式,但这些小广告除了版面细小外,图象的表现还受到象素较低等其它因素影
- 大家经常在网上登陆的时候经常会看到让你输入验证码,有的是文字的,有的呢是图片,比如chinaren.com校友录中留言的时候,我们就会看到数
- 想到TDE(Transparent Data Encryption)。 TDE MSDN 说明: “透明数据加密”(TDE) 可对数据和日志