语句:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]...
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
将在某个对象上的某种权限授予某个用户。WITH GRANT OPTION用于指定该用户是否能传播该权限。
【创建用户】
先创建以下例题中要用到的用户U1~U7
①【数据库】—【安全性】—【用户】,右键,新建用户
错误原因 : 这个登录名下已经有了之前做实验创建的WANG用户。
解决办法: 选择其他的登录名。
没有登录名的用户,不可以登录,但是可以被授予权限,每一个登录名下
SQL Server中“登录”与“用户”的区别:“登录”用于用户身份验证,而数据库“用户”帐户用于数据库访问和权限验证。登录通过安全识别符 (SID) 与用户关联。
以下图片为所查询资料,来源于百度知道。
由以上资料可以知道:每一个登录名在同一个数据库中只能映射到一个用户上,这也就是为什么上面创建错误了,选择另一个就可以解决。
①用SQL语句建立:
直接输入:
CREATE USER U1;
建立没有登录名的用户,就不会产生错误
CREATE USER U1 WITHOUT LOGIN;
CREATE USER U2 WITHOUT LOGIN;
CREATE USER U3 WITHOUT LOGIN;
CREATE USER U4 WITHOUT LOGIN;
CREATE USER U5 WITHOUT LOGIN;
CREATE USER U6 WITHOUT LOGIN;
CREATE USER U7 WITHOUT LOGIN;
这里是如何创建登录名和用户:https://blog.csdn.net/yenange/article/details/88670414
【例4.1】把查询Student表的权限授予用户U1
GRANT SELECT
ON TABLE Student
TO U1;
GRANT SELECT
ON Student
TO U1;
【例4.2】把对Student表和Course表的所有权限授予U2,U3
GRANT ALL PRIVILEGES
ON Student,Course
TO U2,U3;
ERROR:Incorrect syntax near ‘,’.
修改:
GRANT ALL PRIVILEGES
ON Student
TO U2,U3;
GRANT ALL PRIVILEGES
ON Course
TO U2,U3;
点开用户,权限授予成功
但会产生如下提示:
The ALL permission is deprecated and maintained only for compatibility. It DOES NOT imply ALL permissions
ALL权限已弃用,仅为兼容性而维护。它并不意味着所有的权限
【例4.3】把对表SC的查询权限授予所有用户
GRANT SELECT
ON SC
TO PUBLIC;
所有用户 —— 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;
GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION;
【例4.7】U6将权限传给U7
GRANT INSERT
ON SC
TO U7;
但U7没有传播权限的权利。
这里4.6和4.7应该是要分别以U5用户和U6用户的身份登录后再执行以上语句,才会实现用户对用户授权的操作,不然就是系统管理员授予U6,U7权利,与之前的没有什么不同。(但这里我不会登录U5,emmm,他没有登录名,应该无法登陆叭…)
语句:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]...
FROM <用户>[,<用户>]...[CASCADE|RESTRICT];
【例4.8】把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON Student
FROM U4;
REVOKE SELECT
ON SC
FROM PUBLIC;
【例4.10】把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON SC
FROM U5;
REVOKE INSERT
ON SC
FROM U5 CASCADE;
这样系统会同时收回U5的权限以及U5授予的权限,如果U6或U7有从其他用户得到的INSERT的权限,则不予收回。
看了一下,加了CASCADE,U6的权限仍会存在,原因应该就是在【例4.6】的时候是直接输入的语句,是系统管理员授予,而不是用户U5授予的。
角色是被命名的一组与数据库相关的权限,可以为一组具有相同权限的用户创建一个角色,简化授权过程。
(1)创建角色
CREATE ROLE <角色名>;
可以给角色授权,一个角色可以给其他角色或用户授权(WITH ADMIN OPTION)。
(2)直接给角色授权
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>
TO <角色>[,<角色>]...
(3)角色给其他角色或用户授权
GRANT <角色1>[,<角色2>]...
TO <角色3>[,<用户1>]...
[WITH ADMIN OPTION];
这里传播,是指将角色1,2的所有权限都授予角色3或用户1。
WITH ADMIN OPTION指得到权限的角色或用户可以继续授予权限给其他角色。
一个角色的权限 = 直接授予该角色的权限 + 其他角色授予该角色的权限
(4)角色权限的收回
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>
FROM <角色>[,<角色>]...;
【例4.11】通过角色实现将一组权限授予一个用户
--创建角色
CREATE ROLE R1;
--将Student表的SELECT、UPDATE、INSERT授予角色R1
GRANT SELECT,UPDATE,INSERT
ON Student
TO R1;
--将这个角色授予王平,张明,赵玲
--先创建这三个用户
CREATE USER 王平 WITHOUT LOGIN;
CREATE USER 张明 WITHOUT LOGIN;
CREATE USER 赵玲 WITHOUT LOGIN;
--角色授予用户
GRANT R1
TO 王平,张明,赵玲;
--出现错误
有错误,查看老师博客中所供网址得到:
向角色中添加或删除用户用ALTER:
--以上错误语句改为如下:
ALTER ROLE R1 ADD MEMBER 王平;
ALTER ROLE R1 ADD MEMBER 张明;
ALTER ROLE R1 ADD MEMBER 赵玲;
好像是不可以直接添加三个用户,会说‘,’附近有错误。我还尝试把MEMBER改为复数,也是无效的,还是会有错。所以应该只是可以添加一个用户。
--一次性通过R1收回王平的这三个权限:
REVOKE R1
FROM 王平;
--这个在SQL中运行也会出现错误
--修改
ALTER ROLE R1 DROP 王平;
--将王平移出角色R1
GRANT DELETE
ON Student
TO R1;
【例4.13】
REVOKE SELECT
ON Student
FROM R1;
【与教材上的不同】
1.ON后面不需要加对象类型TABLE
2.在角色为其他角色或用户授权时,SQL Server上采用为角色添加或删除(ADD/DROP)用户,达到授权和收回。
AUDIT及其他内容,下一次在写。