GRANT /DENY/REVOKE
GRANT:
在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的 Transact-SQL 语句。
1 例子:授予语句权限
下面的示例给用户 Mary 和 John 授予多个语句权限。
GRANT CREATE DATABASE, CREATE TABLE TO Mary, John
授予全部语句权限给用户Rose
GRANT ALL to Rose
2 例子:授予对象权限
GRANT SELECT ON authors TO public
GRANT INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom
DENY:
在安全系统中创建一项,以拒绝给当前数据库内的安全帐户授予权限并防止安全帐户通过其组或角色成员资格继承权限。
1 例子:拒绝语句权限
下例对多个用户拒绝多个语句权限。用户不能使用 CREATE DATABASE 和 CREATE TABLE 语句
DENY CREATE DATABASE, CREATE TABLE TO Mary, John
对用户Rose拒绝全部语句权限
DENY ALL to Rose
2 例子:拒绝对象权限
DENY INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom
REVOKE:
删除以前在当前数据库内的用户上授予或拒绝的权限。
1 废除类似于拒绝,但是,废除权限是删除已授予的权限,并不妨碍用户、组或角色从更高级别继承已授予的权限。因此,如果废除用户查看表的权限,不一定能防止用户查看该表,因为已将查看该表的权限授予了用户所属的角色。
2 角色是权限的一个集合,可以指派给用户或其它角色。这样只对角色进行权限设置便可以实现对多个用户权限的设置
3 举例:DENY与REVOKE区别
例如,从 HumanResources 角色中删除 Employees 表上的 SELECT 访问权限将废除该权限,从而使 HumanResources 不能再使用该表。如果 HumanResources 是 Administration 角色的成员。如果以后将 Employees 上的 SELECT 权限授予了 Administration,则 HumanResources 的成员可以通过 Administration 中的成员资格看到该表。但是,如果对 HumanResources 拒绝SELECT权限,则即使以后向 Administration 授予权限,HumanResources 也不会继承该权限
4 例子: 废除授予用户帐户的语句权限
下例废除已授予用户 Joe 的 CREATE TABLE 权限。它删除了允许 Joe 创建表的权限。不过,如果已将 CREATE TABLE 权限授予给了包含 Joe 的任何角色,那么 Joe 仍可创建表。
REVOKE CREATE TABLE FROM Joe
5 例子: 废除授予多个用户帐户的多个权限
下例废除授予多个用户的多个语句权限。
REVOKE CREATE TABLE, CREATE INDEX FROM Mary, John
6 例子: 废除拒绝的权限
用户 Mary 是 Budget 角色的成员,已给该角色授予了对 Budget_Data 表的 SELECT 权限。已对 Mary 使用 DENY 语句以防止 Mary 通过授予 Budget 角色的权限访问 Budget_Data 表
下例删除对 Mary 拒绝的权限,并通过适用于 Budget 角色的 SELECT 权限,允许 Mary 对该表使用 SELECT 语句。
REVOKE SELECT ON Budget_Data TO Mary