数据控制语句(DCL)用来设置、更改用户或角色权限,包括GRANT、DENY、REVOKE等语句。GRANT语句用来对用户授予权限,REVOKE语句用于删除已授予的权限,DENY语句用于防止主体通过GRANT获得特定权限。默认状态下,只有sysadmin、dbcreater、db_owner、db_securityadmin等成员有权执行数据控制语言。
利用SQL的GRANT语句可向用户授予操作权限,当用该语句向用户授予操作权限时,若允许用户将获得的权限再授予其他用户,应在该语句中使用WITH GRANT OPTION短语。
授予语句权限的语法形式为:
GRANT {ALL | statement[,...n]} TO security_account [ ,...n ]
授予对象权限的语法形式为:
【例4.16】对名称为guest的用户进行授权,允许其对fruit数据表执行更新和删除的操作权限,在【查询编辑器】窗口中输入如下T-SQL语句:
USE mydb GRANT UPDATE,DELETE ON fruit TO guest WITH GRANT OPTION
单击【执行】按钮,即可完成用户授权操作,并在【消息】窗格中显示命令已成功完成的信息提示,如图4-12所示。
图4-12 授予用户操作权限
上述代码中,UPDATE和DELETE为允许被授予的操作权限,fruit为权限执行对象,guest为被授予权限的用户名称,WITH GRANT OPTION表示该用户还可以向其他用户授予其自身所拥有的权限。这里只是对GRANT语句有一个大概的了解,在后面章节中会详细介绍该语句的用法。
REVOKE语句是与GRANT语句相反的语句,能够将以前在当前数据库内的用户或者角色上授予或拒绝的权限删除,但是该语句并不影响用户或者角色从其他角色中作为成员继承过来的权限。
收回语句权限的语法形式为:
REVOKE { ALL | statement [ ,...n ] } FROM security_account [ ,...n ]
收回对象权限的语法形式为:
【例4.17】收回guest用户对fruit表的删除权限,在【查询编辑器】窗口中输入如下T-SQL语句。
USE mydb REVOKE DELETE ON fruit FROM guest CASCADE;
单击【执行】按钮,即可完成用户删除授权的操作,并在【消息】窗格中显示命令已成功完成的信息提示,如图4-13所示。
图4-13 删除用户操作权限
出于某些安全性的考虑,可能不太希望让一些人来查看特定的表,此时可以使用DENY语句来禁止对指定表的查询操作,DENY可以被管理员用来禁止某个用户对一个对象的所有访问权限。
禁止语句权限的语法形式为:
DENY { ALL | statement [ ,...n ] } FROM security_account [ ,...n ]
禁止对象权限的语法形式为:
【例4.18】禁止guest用户对fruit表的操作更新权限,在【查询编辑器】窗口中输入如下T-SQL语句:
USE mydb DENY UPDATE ON fruit TO guest CASCADE;
单击【执行】按钮,即可完成禁止用户更新授权的操作,并在【消息】窗格中显示命令已成功完成的信息提示,如图4-14所示。
图4-14 禁止用户操作权限