数据库作业十一 GRANT/REVOKE/AUDIT

首先需要建立一些登录名和用户名,后面操作会用到。
先来一张图,简单理解下登录名和用户名之间的联系。先大概有个印象。
数据库作业十一 GRANT/REVOKE/AUDIT_第1张图片
打开SQL Server—>选择相应的数据库—>安全性—>用户—>右击新建用户
数据库作业十一 GRANT/REVOKE/AUDIT_第2张图片
数据库作业十一 GRANT/REVOKE/AUDIT_第3张图片
一般不会报错,如果出现此报错信息。
请仔细阅读报错信息,报错后一定要先阅读报错信息,不要把它当作炸弹赶紧关掉。
错误信息很明确,该登录已用另一个用户名开立账户,因为我已经用该登录名创建过一个用户。
在这里插入图片描述
再根据顶部图中,登录名和用户名之间的关系,一个登录名可以和多个不同库下的用户做映射,但是再同一个库下只能和一个用户名做映射。这样为什么报错,也就很明显了。

既然这样,先去创建一些登录名,再在某一个库下,建立对应的用户名。

建立登录名
安全性—>登录名—>右击新建
数据库作业十一 GRANT/REVOKE/AUDIT_第4张图片
再回到某一库下,建立相应的用户名
数据库作业十一 GRANT/REVOKE/AUDIT_第5张图片
图中的用户类型是 带登录名的SQL用户,当然也可以建立不带登录名的SQL用户,这样就不用关心登录名了。
数据库作业十一 GRANT/REVOKE/AUDIT_第6张图片
就这样,建立七个
数据库作业十一 GRANT/REVOKE/AUDIT_第7张图片

GRANT 授予

GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]...
TO <用户>[,<用户>]...
[WITH GRANT OPTION]

将在某个对象上的某种权限授予某个用户。WITH GRANT OPTION用于指定该用户是否能传播该权限。

例:
把查询Student表的权限授予用户U1

GRANT SELECT
ON  Student
TO U1

数据库作业十一 GRANT/REVOKE/AUDIT_第8张图片
可以看到授予了选择权限

把对Student表和Course表的所有权限授予U2,U3

GRANT ALL PRIVILEGES
ON Student
TO U2,U3

GRANT ALL PRIVILEGES
ON Course
TO U2,U3

数据库作业十一 GRANT/REVOKE/AUDIT_第9张图片
数据库作业十一 GRANT/REVOKE/AUDIT_第10张图片
官方文档中查看。
https://docs.microsoft.com/zh-cn/sql/t-sql/statements/grant-transact-sql?view=sql-server-ver15

把对表SC的查询权限授予所有用户

GRANT SELECT
ON SC
TO PUBLIC

把查询Student表和修改学生学号的权限授给用户U4

GRANT SELECT,UPDATE(Sno)
ON Student
TO U4

把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户。

GRANT INSERT
ON SC
TO U5
WITH GRANT OPTION

数据库作业十一 GRANT/REVOKE/AUDIT_第11张图片
U5可将权限传给U6

GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION

U6将权限传给U7

GRANT INSERT
ON SC
TO U7

REVOKE 回收

语法:

REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]...
FROM <用户>[,<用户>]...[CASCADE|RESTRICT]

把用户U4修改学生学号的权限收回

REVOKE UPDATE(Sno)
ON Student
FROM U4

登录U4
数据库作业十一 GRANT/REVOKE/AUDIT_第12张图片
数据库作业十一 GRANT/REVOKE/AUDIT_第13张图片
执行UPDATE
没错,没有相应的权限
数据库作业十一 GRANT/REVOKE/AUDIT_第14张图片
以下省略截图
收回所有用户对表SC的查询权限

REVOKE SELECT
ON SC
FROM PUBLIC

把用户U5对SC表的INSERT权限收回

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]

(4)角色权限的收回

REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>
FROM <角色>[,<角色>]...

通过角色实现将一组权限授予一个用户

--创建一个角色 R1
CREATE  ROLE  R1
--使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限
GRANT SELECT,UPDATE,INSERT 
ON TABLE Student 
TO R1
--将这个角色授予U1,U2,U3。使他们具有角色R1所包含的全部权限
ALTER ROLE R1 ADD MEMBER U1
ALTER ROLE R1 ADD MEMBER U2
ALTER ROLE R1 ADD MEMBER U3

一次性通过R1收回U1的这三个权限

ALTER ROLE R1 DROP MEMBER U1

角色权限的修改

GRANT DELETE
ON Student
TO R1
REVOKE SELECT
ON Student
FROM R1

你可能感兴趣的:(数据库作业十一 GRANT/REVOKE/AUDIT)