grant 和 revoke 语句
grant 授予权限
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
WITH GRANT OPTION子句: 指定:可以再授予 没有指定:不能传播
[例4.1] 把查询Student表权限授给用户U1
这里tsql和标准sql又出现了不同之处。
grant select
on Student
to U1;
[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3
这里之所以报错:tsql不能直接操作两个表的权限
grant all privileges
on student
to U2 , U3;
grant all privileges
on course
to U2 , U3;
ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
看来这个all权限已经deprecated了。
[例4.3] 把对表SC的查询权限授予所有用户
grant all privileges
on sc
to public;
[例4.4] 把查询Student表和修改学生学号的权限授给用户U4
grant select, update(SNO)
on student
to u4;
[例4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
grant insert
on sc
to u5
with grant option;
[例4.6]从U5给U6权限
首先我们先登录u5
grant insert
on sc
to u6
with grant option;
[例4.7] U6给U7权限
grant insert
on sc
to u7
with grant option;
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权限收回
我们在 之前 的实验里,一直用不上cascade关键词,我一度以为他没啥用;在这用到了。
当然u6,u7的权限也就没了
revoke insert
on sc
from U5 cascade
角色role
1.角色的创建
CREATE ROLE <角色名>
2.给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
3.
将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限
授予其他角色
4.角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
[例4.11] 通过角色来实现将一组权限授予一个用户。
首先我们创建一个用户R1
create role R1;
然后我们给他权限
grant select , update,insert
on student
to R1
然后我们给u1 u2 u3这个角色
我们发现他是不支持这个的(为啥微软这么多不和标准sql一样?)
经过查询,我们使用
(这里不是很会哈,稍等我会进行更深一步的查询)
EXEC sp_addrolemember 'R1','U1'
EXEC sp_addrolemember 'R1','U2'
EXEC sp_addrolemember 'R1','U3'
我们尝试收回u1的权限
和想象中一样,还是不行,试试把刚才那个语句的add改成drop(其实我刚开始想的del)
EXEC sp_droprolemember 'R1','U1'
[例4.12] 角色的权限修改
使角色R1在原来的基础上增加了Student表的DELETE 权限
grant delete
on student
to R1
[例4.13]使R1减少了SELECT权限
使R1减少了SELECT权限
revoke select
on student
from R1
tsql和标准sql在好多地方都不一样,想必tsql是为了更安全?但是对于学习者来说,确实有点小晕。
(这几天事太多了,还差一个第三章课后题,就写完这周的db作业了)