目录

  • 4.2.3 自主存取控制方法
  • 4.2.4 授权:授予与收回
    • 1.GRANT
    • 2.REVOKE
  • 4.2.5 数据库角色

4.2.3 自主存取控制方法

通过 SQL 的GRANT 语句和REVOKE 语句实现
定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些操作

4.2.4 授权:授予与收回

1.GRANT

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

WITH GRANT OPTION子句:
①指定:可以再授予
②没有指定:不能传播
语义:将对指定操作对象的指定操作权限授予指定的用户
新建用户名U1—U7,和相应的登录名
注意:登录名必须映射到数据库用户才能连接到数据库。 一个登录名可以作为不同用户映射到不同的数据库,**但在每个数据库中只能作为一个用户进行映射。 **

CREATE LOGIN U_1 WITH PASSWORD='12345';--新建登录名U_1
CREATE USER U1 FOR LOGIN U_1; --新建用户名
CREATE LOGIN U_2 WITH PASSWORD='12345';
CREATE USER U2 FOR LOGIN U_2;
CREATE LOGIN U_3 WITH PASSWORD='12345';
CREATE USER U3 FOR LOGIN U_3;
CREATE LOGIN U_4 WITH PASSWORD='12345';
CREATE USER U4 FOR LOGIN U_4;
CREATE LOGIN U_5 WITH PASSWORD='12345';
CREATE USER U5 FOR LOGIN U_5;
CREATE LOGIN U_6 WITH PASSWORD='12345';
CREATE USER U6 FOR LOGIN U_6;
CREATE LOGIN U_7 WITH PASSWORD='12345';
CREATE USER U7 FOR LOGIN U_7;

用户名

登录名

例4.1把查询Student表权限授给用户U1

GRANT SELECT
ON TABLE Student
TO U1;

SQL-Server报错

SQL-Server代码

GRANT SELECT
ON Student
TO U1;

例4.2把对Student表和Course表的全部权限授予用户U2和U3

GRANT ALL PRIVILEGES
ON Table Student,Course
TO U2,U3;

报错

原因:grant语句一次只能对一个对象进行赋权,不能同时对两个表进行赋权;但是我们可以同时赋给对象多个不同的权限
SQL-Server代码

GRANT ALL PRIVILEGES
ON Student
TO U2,U3;
GRANT ALL PRIVILEGES
ON Course
TO U2,U3;

提示

结果

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

GRANT SELECT
ON SC
TO PUBLIC;


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

GRANT UPDATE(Sno),SELECT
ON Student
TO U4


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

GRANT INSERT
ON SC
TO U5
WITH GRANT OPTION;


执行例4.5后,U5不仅拥有了对表SC的INSERT权限,
还可以传播此权限。
例4.6以U5对应登录名U_5登录数据库,对Stu数据库进行操作

GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION;

登录U6查看权限

例4.7同样,U6还可以将此权限授予U7:

GRANT INSERT
ON SC
TO U7;

但U7不能再传播此权限。因为U6未给U7传播的权限,因此U7不能再传播此权限
如U7将权限授予U1

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;


将用户U5的INSERT权限收回的时候应该使用CASCADE,**否则拒绝执行该语句。因为在例4.6中U5将对SC表的INSERT权限赋予U6,U6又授予U7。**如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限 。

执行例4.8~4.10语句后学生-课程数据库中的用户权限定义表

4.2.5 数据库角色

角色(ROLE):被命名的一组与数据库操作相关的权限
角色是权限的集合。可以为一组具有相同权限的用户创建一个角色*。
优点:简化授权的过程
1.角色的创建

CREATE  ROLE  <角色名>

2.给角色授权

 GRANT  <权限>[,<权限>]… ON <对象类型>对象名  TO <角色>[,<角色>]…

3.将一个角色授予其他的角色或用户

GRANT  <角色1>[,<角色2>]…
TO  <角色3>[,<用户1>]…
[WITH ADMIN OPTION]

该语句把角色授予某用户,或授予另一个角色
授予者是角色的创建者或拥有在这个角色上的ADMIN OPTION
指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色
一个角色的权限:直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限
4.角色权限的收回

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

用户可以回收角色的权限,从而修改角色拥有的权限
REVOKE执行者是角色的创建者,拥有在这个(些)角色上的ADMIN OPTION
例4.11通过角色来实现将一组权限授予一个用户。
步骤如下:
(1)首先创建一个角色 R1

CREATE ROLE R1

(2)然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限

GRANT SELECT,UPDATE,INSERT
ON Student
TO R1


(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
先新建用户,王平,赵明,张玲

CREATE LOGIN 王平1 WITH PASSWORD='12345';--新建登录名U_1
CREATE USER 王平 FOR LOGIN 王平1; --新建用户名
CREATE LOGIN 张明1 WITH PASSWORD='12345';--新建登录名U_1
CREATE USER 张明 FOR LOGIN 张明1; --新建用户名
CREATE LOGIN 赵玲1 WITH PASSWORD='12345';--新建登录名U_1
CREATE USER 赵玲 FOR LOGIN 赵玲1; --新建用户名

授予

GRANT R1
TO 王平,张明,赵玲;

报错

正确

EXEC sp_addrolemember 'R1','王平'
EXEC sp_addrolemember 'R1','张明'
EXEC sp_addrolemember 'R1','赵玲'


参考博客SqlServer数据库添加角色,角色授权
(4) 可以一次性通过R1来回收王平的这3个权限

REVOKE R1
FROM 王平


正确代码

EXEC sp_droprolemember 'R1','王平'

例4.12角色的权限修改,使角色R1在原来的基础上增加了Student表的DELETE 权限

GRANT DELETE
ON Student
TO R1


例4.13使R1减少了SELECT权限

REVOKE SELECT
ON Student
FROM R1

SQL Server 数据库实验课第七周——授权:授予与收回相关推荐

  1. SQL Server 数据库实验课第九周——第六章总结

    关系数据理论 6.1 问题的提出 6.2 规范化 6.2.1 函数依赖 1.函数依赖 2.平凡函数依赖与非平凡函数依赖 3.完全函数依赖与部分函数依赖 4.传递函数依赖 6.2.2 码 6.2.3 范 ...

  2. 如何使用SQL Server数据库实验助手(DEA)工具

    介绍 (Introduction) This is my second article about Database Experimentation Assistant (DEA). Please r ...

  3. 如何下载和安装SQL Server数据库实验助手(DEA)

    介绍 (Introduction) The Database Experimentation Assistant (DEA) is a new Experimental solution provid ...

  4. 如何下载和安装SQL Server数据库实验助手(DEA v2.0)

    介绍 (Introduction) I had the opportunity to work and perform various tests with Database Experimentat ...

  5. 合肥工业大学—SQL Server数据库实验十:用户及其权限管理

    用户及其权限管理 1. 创建登录名Mylog及密码 2. 创建用户user2关联登录名 3. 创建角色role1 4. 对用户user2及角色role1授权 5. 验证用户授权 6. 收回用户权限 1 ...

  6. 合肥工业大学—SQL Server数据库实验四:数据库的分离和附加

    数据库的分离和附加 1. 数据库分离 2. 数据库附加 1. 数据库分离 当SQL Server服务器运行时,该服务器上所有的数据库自动处于运行状态,而运行中的数据库文件是无法进行数据库文件的拷贝的. ...

  7. 合肥工业大学—SQL Server数据库实验七:数据查询

    数据查询 1. 单表查询 2. 多表连接查询 1. 单表查询 1. 查询全体学生的信息: -- 查询全体学生的信息 select * from student 2. 根据专业编号(21)查询学生的学号 ...

  8. 实验四 数据查询——简单查询 Sql Server数据库实验

    实验四  数据查询--简单查询   一.实验目的 1.掌握SQL查询语句的基本概念  2.掌握SQLServer查询语句的基本语法 3.熟练使用SQL的Select语句对单表进行查询 4.熟练掌握并运 ...

  9. 合肥工业大学—SQL Server数据库实验八:使用聚集函数的SELECT语句

    在数据库EDUC中用SQL语句实现如下查询: 1) 查询学生的总人数 -- 查询学生的总人数 select count(*) from student select count(1) from stu ...

最新文章

  1. 机器人4大坐标系讲解,别在搞混了!
  2. 初等数学O 集合论基础 第四节 二元关系、等价类与运算
  3. 【已解决】Error occurred during loading data. Trying to use cache server_Python系列学习笔记
  4. pxe安装系统 ip获取错误_【图说】消防系统安装典型错误举例
  5. 深入理解session过期机制
  6. windows符号服务器地址
  7. plsql最多可以存多少_银行内部透露:如果有10万块钱,可以都放在余额宝里吗?存银行是不是更好?...
  8. (江西财经大学第二届程序设计竞赛同步赛)E-是不是复读机
  9. 【英语学习】【WOTD】comminute 释义/词源/示例
  10. c++ 二维数组 排序_【算法】排序算法之计数排序
  11. 程序员与产品经理大打出手,公司的处理结果让所有人都笑开了花
  12. 离职潮来袭,但为什么HR还是很难招到人?
  13. UVa 253 Cube paiting
  14. 这次都安排上了,零食好物全都 9 块 9 。
  15. idea2017显示maven Project菜单
  16. 蓝桥杯 算法提高 一元三次方程求解
  17. 小游戏---html飞翔的小鸟
  18. 2021数据结构学习笔记(严蔚敏版)
  19. 浏览器端精准打印或套打组件
  20. 微信小程序可视化开发工具之动态数据

热门文章

  1. 苹果8黑屏无法强制开机_iphonexr突然黑屏无法开机怎么解决?
  2. PHP实现将网页转为图片:html-pdf-png
  3. 高博十四讲中第六章非线性优化 由于g2o更新出现的问题解决
  4. cad自动填写页码lisp,CAD 中 如何自动添加页码?
  5. Ubuntu安装Lua
  6. 模电——电路中电源地、模拟地、信号地的区别与联系
  7. 测试工作3年还在基础岗?可能只是因为你的工作能力差
  8. 如何定义企业级无代码 | 数睿数据解读艾瑞咨询白皮书
  9. Flash 第一章 课堂笔记
  10. flask-socketio实现的网页聊天室(一)