章节 4.2.4-4.2.5
SQL中使用GRANT和REVOKE语句向用户授予或收回对数据的操作权限。其中 GRANT语句向角色授予权限, REVOKE 语句收回已经世欧预用户的权限。
1)GRANT
GRANT语句的一般格式为:
GRANT<权限>[,<权限>]···
ON <对象类型><对象名>[,<对象类型><对象名>]···
TO <用户>[,<用户>]···
[WITH GRANT OPTION];
如果指定了 WITH GRANT OPTION 子句,则获得权限的用户还可以将这份权限再赋予给其他用户;没有指定此语句的话,则用户只能使用而不能传播。
还要注意标准SQL不允许循环授权,简单来说就是:我把权限传给你,你传给他,但他不能再把权限传给我和你,拒绝三角关系,从我做起。
例题4.1:把查询 Student 表的权限传给用户 U1.
GRANT SELECT
ON TABlE Student
TO U1;
提示错误,分析得知:T-SQL中是不用加上 TABLE 的,删去 ’ TABLE ',能正常运行:
例题4.2:把对 Student 表和 Course 表全部操作的权限传给用户 U2,U3.
GRANT ALL PRIVILEGES
ON TABlE Student,Course
TO U2,U3;
在SQL中运行时,提示错误:
因为不支持同时授予两个表的权限,修改为:
GRANT ALL PRIVILEGES
ON Student
TO U2,U3;
GRANT ALL PRIVILEGES
ON Course
TO U2,U3;
//ALL PRIVILEGES 包括插入、更新、删除、选择、引用
例题4.3:把对表SC的查询权限授予所有用户。
GRANT SELECT
ON SC
TO PUBLIC;
例4.5:把对表SC的 INSERT 权限授予U1用户,并允许将此权限再授予其他用户。
GRANT INSERT
ON SC
TO U1
WITH GRANT OPTION;
GRANT语句可以一次向一个或多个用户授权。
2)REVOKE
收回权限的 REVOKE 语句的一般格式为:
REVOKE <权限>[,<权限>]···
ON <对象类型><对象名>[,<对象类型><对象名>]···
FROM <用户>[,<用户>]···[CASCADE|RESTRICT]
例题4.8:把用户U4修改学生学号的权限收回。
REVOKE UPDATE(Sno)
ON Student
FROM U4;
例题4.9:收回所有用户对SC的查询权限。
REVOKE SELECT
ON SC
FROM PUBLIC;
例题4.10:把用户U5对SC表的INSERT权限收回。
REVOKE INSERT
ON SC
FROM U5 CASCADE;
级联(CASCADE) 可以在收回U5权限的同时,也收回了其它用户被U5授予的相同权限;如果没有级联语句,系统将拒绝执行该命令。
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
例题4.11:通过角色来实现将一组权限授予一个用户。
1·创建角色:
CREATE ROLE R1;
2·使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT 权限。
GRANT SELECT,UPDATE,INSERT
ON Student
TO U1;
3·将这个角色授予U1、U2,使他们具有角色R1所包含的全部权限。
GRANT R1
TO U1,U2;
运行不通过,T-SQL不支持,应修改为:
EXEC sp_addrolemember 'R1','U1'
ALTER ROLE R1
ADD member U1;
EXEC sp_addrolemember 'R1','U2'
ALTER ROLE R1
ADD member U2;
4·通过R1收回U2的这三个权限。
REVOKE R1
FROM U2;
运行不通过,为相同问题,T-SQL不支持,应修改为:
EXEC sp_addrolemember 'R1','U1'
ALTER ROLE R1
ADD member U1;
例题4.12:角色的权限修改。
GRANT DELETE
ON Student
TO R1;
例题4.13:收回角色的选择权限。
REVOKE SELECT
ON Student
FROM R1;
…………………………………………………………………………….
以上就是文章全部内容,感谢阅读。