Transact-SQL语言-DCL
DCL
数据控制语言(DCL)是用来设置或更改数据库用户或角色权限的语句,包括GRANT,DENY,REVOKE等语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行数据控制语言。
GRANT
语句权限与角色的授予
SQL语言使用GRANT语句为用户授予语句权限的语法格式为:
GRANT <语句权限>|<角色> [,<语句权限>|<角色>]…
TO <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
[WITH ADMIN OPTION]
其语义为:将指定的语句权限授予指定的用户或角色。其中:
(1)PULBIC代表数据库中的全部用户;
(2)WITH ADMIN OPTION为可选项,指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。
SQL语言使用GRANT语句为用户授予语句权限的语法格式为:
GRANT <语句权限>|<角色> [,<语句权限>|<角色>]…
TO <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
[WITH ADMIN OPTION]
其语义为:将指定的语句权限授予指定的用户或角色。其中:
(1)PULBIC代表数据库中的全部用户;
(2)WITH ADMIN OPTION为可选项,指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。
例3-17 给用户 Mary 和 John 以及 Windows NT 组 Corporate\BobJ 授予多个语句权限。
程序清单如下:
GRANT CREATE DATABASE, CREATE TABLE
TO Mary, John, [Corporate\BobJ]
例3-18 为用户ZhangYiLin授予CREATE TABLE的语句权限。
程序清单如下:
GRANT CREATE TABLE
TO ZhangYiLin
程序清单如下:
GRANT CREATE DATABASE, CREATE TABLE
TO Mary, John, [Corporate\BobJ]
例3-18 为用户ZhangYiLin授予CREATE TABLE的语句权限。
程序清单如下:
GRANT CREATE TABLE
TO ZhangYiLin
例3-19 在权限层次中授予对象权限。首先,给所有用户授予 SELECT 权限,然后,将特定的权限授予用户 Mary,John 和 Tom。
程序清单如下:
Code
程序清单如下:
![](/Images/OutliningIndicators/ContractedBlock.gif)
REVOKE
与GRANT语句相反的语句,它能够将以前在当前数据库内的用户或者角色上授予或拒绝的权限删除,但是该语句并不影响用户或者角色从其他角色中作为成员继承过来的权限
1、语句权限与角色的收回
数据库管理员可以使用REVOKE语句收回语句权限,其语法格式为:
REVOKE <语句权限>|<角色> [,<语句权限>|<角色>]…
FROM <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
例:收回用户ZHANGYILIN所拥有的CREATE TABLE的语句权限。
REVOKE CREATE TABLE
FROM ZHANGYILIN
2、对象权限与角色的收回
所有授予出去的权力在必要时都可以由数据库管理员和授权者收回,收回对象权限仍然使用REVOKE语句,其语法格式为:
REVOKE <对象权限>|<角色> [,<对象权限>|<角色>]…
FROM <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
1、语句权限与角色的收回
数据库管理员可以使用REVOKE语句收回语句权限,其语法格式为:
REVOKE <语句权限>|<角色> [,<语句权限>|<角色>]…
FROM <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
例:收回用户ZHANGYILIN所拥有的CREATE TABLE的语句权限。
REVOKE CREATE TABLE
FROM ZHANGYILIN
2、对象权限与角色的收回
所有授予出去的权力在必要时都可以由数据库管理员和授权者收回,收回对象权限仍然使用REVOKE语句,其语法格式为:
REVOKE <对象权限>|<角色> [,<对象权限>|<角色>]…
FROM <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
例3-20 将查询T表和修改教师职称的权限授予USER3,并允许将此权限授予其他用户。
程序清单如下:
GRANT SELECT,UPDATE(PROF)
ON T TO USER3
WITH ADMIN OPTION
上例中,USER3具有此对象权限,并可使用GRANT命令给其他用户授权,如下例,USER3将此权限授予USER4:
GRANT SELECT,UPDATE(PROF)
ON T
TO USER4
例3-22 收回用户USER3查询T表和修改教师职称的权限。
程序清单如下:
REVOKE SELECT,UPDATE(PROF)
ON T
FROM USER3
在上例中,USER3将对T表的权限授予了USER4,在收回USER3对T表的权限的同时,系统会自动收回USER4对T表的权限。
程序清单如下:
GRANT SELECT,UPDATE(PROF)
ON T TO USER3
WITH ADMIN OPTION
上例中,USER3具有此对象权限,并可使用GRANT命令给其他用户授权,如下例,USER3将此权限授予USER4:
GRANT SELECT,UPDATE(PROF)
ON T
TO USER4
例3-22 收回用户USER3查询T表和修改教师职称的权限。
程序清单如下:
REVOKE SELECT,UPDATE(PROF)
ON T
FROM USER3
在上例中,USER3将对T表的权限授予了USER4,在收回USER3对T表的权限的同时,系统会自动收回USER4对T表的权限。
DENY
DENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。
否定语句权限的语法形式为:
DENY ALL|<语句权限>|<角色> [,<语句权限>|<角色>]…
TO <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
否定对象权限的语法形式为:
DENY ALL|<对象权限>[(列名[,列名]…)][,<对象权限>]…ON <对象名>
TO <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
否定语句权限的语法形式为:
DENY ALL|<语句权限>|<角色> [,<语句权限>|<角色>]…
TO <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
否定对象权限的语法形式为:
DENY ALL|<对象权限>[(列名[,列名]…)][,<对象权限>]…ON <对象名>
TO <用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…
例3-24 首先给 public 角色授予 SELECT 权限,然后,拒绝用户 Mary,John 和 Tom 的特定权限。
程序清单如下:
Code
USE pubs
GO
GRANT SELECT
ON s
TO public
GO
DENY SELECT, INSERT, UPDATE, DELETE
ON s
TO Mary,John,Tom
程序清单如下:
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
USE pubs
GO
GRANT SELECT
ON s
TO public
GO
DENY SELECT, INSERT, UPDATE, DELETE
ON s
TO Mary,John,Tom