存取控制——GRANT/ REVOKE / AUDIT

自主存取控制

定义用户在哪些数据库对象上可以进行哪些操作
在这里插入图片描述

1.GRANT——授予

语句:

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;

在这里插入图片描述去掉TABLE

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;

在这里插入图片描述
【例4.6】U5可将权限传给U6

GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION;

U6仍有传播权限的权利
在这里插入图片描述

【例4.7】U6将权限传给U7

GRANT INSERT
ON SC
TO U7;

但U7没有传播权限的权利。

这里4.6和4.7应该是要分别以U5用户和U6用户的身份登录后再执行以上语句,才会实现用户对用户授权的操作,不然就是系统管理员授予U6,U7权利,与之前的没有什么不同。(但这里我不会登录U5,emmm,他没有登录名,应该无法登陆叭…)

2.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,所以无法执行。
修改:

REVOKE INSERT
ON SC
FROM U5 CASCADE;

这样系统会同时收回U5的权限以及U5授予的权限,如果U6或U7有从其他用户得到的INSERT的权限,则不予收回。

看了一下,加了CASCADE,U6的权限仍会存在,原因应该就是在【例4.6】的时候是直接输入的语句,是系统管理员授予,而不是用户U5授予的。

3.ROLE —— 角色

角色是被命名的一组与数据库相关的权限,可以为一组具有相同权限的用户创建一个角色,简化授权过程。

(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

在这里插入图片描述
【例4.12】角色的权限修改

GRANT DELETE
ON Student
TO R1;

【例4.13】

REVOKE SELECT
ON Student
FROM R1;

【与教材上的不同】
1.ON后面不需要加对象类型TABLE
2.在角色为其他角色或用户授权时,SQL Server上采用为角色添加或删除(ADD/DROP)用户,达到授权和收回。

AUDIT及其他内容,下一次在写。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值