SQL的访问控制

豆豆网   技术应用频道   2007年11月13日  【字号: 收藏本文

内容摘要:对于数据库管理员们来说,安全问题至关重要,他们一直设法保护他们不计其数的重要业务数据,以免被那些没有权利却又试图超越权限的内部人员或外部人员窥视外泄……

  还是通过例子来说明吧,假设我们撤销之前赋予用户Linlin从Customers数据库中删除记录的权限,命令如下:

REVOKEDELETE
ONCustomers
FROMLinlin

   值得一提的是Microsoft SQL Server还支持另外一种类似撤销机制——DENY(拒绝)命令。即时用户现在或者将来通过角色设置的关系拥有了某种权限,这个命令也可以用来明确的拒绝该用户执行这个权限。该命令语法如下:

DENY<permissions>
ON<table>
TO<user/role>

  回到刚才的例子,假设Linlin也是同样拥有访问Customers表权利的 Managers角色中的一员。前面的REVOKE命令就可能不足以制止他访问该数据表。通过专门对他的用户帐号使用GRANT语句可以撤销之前赋予他的权限,但是不会影响到他通过其帐号所在的Managers角色组中获得的权限。如果我们使用DENY语句,就能够阻止他从角色里承继的权限。命令如下:

DENYDELETE
ONCustomers
TOLinlin

  事实上,DENY命令在数据库访问控制中创建了一种“负权限”。如果我们随后又决定要赋予Linlin从Customers删除行的权限,我们就不能简单的用GRANT命令来实现了。已经存在的DENY命令比GRANT命令的优先级更高。相反,我们先要用REVOKE命令来撤销已进驻的负权限,命令如下:

REVOKEDELETE
ONCustomers
FROMLinlin

  你大概已经发现该命令和之前用来撤销正权限所用的命令一摸一样。记住DENY和GRANT命令都是用同样的方式运行的,他们都是在数据库访问控制机制里创建权限(无论是正权限还是负权限)。REVOKE命令可以撤销某个特定用户所有的正权限和负权限。如果Linlin是拥有从数据表中删除行权限的角色中的一员的话,一但执行了这个命令,他就拥有了上述的权限。

  看完以上所有内容,相信你已经学到了不少关于用SQL进行访问权控制机制的知识。即便如此,你还是应该参考你的数据库管理系统说明书,了解更多如何加强安全保护的措施。你会发现很多数据库支持更加高级的访问控制机制,例如如何针对特定的列进行权限设置之类的。

来源:IT专家网    作者:cyw    责编:豆豆技术应用

正在加载评论...