目录
[例4.1] 把查询Student表权限授给用户U1定操作权限授予指定的用户
[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3
[例4.4] 把查询Student表和修改学生学号的权限授给用户U4
[例4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
关系数据库系统中存取控制对象
对象类型 | 对象 | 操 作 类 型 |
? 数据库 ? 模式 | 模式 | CREATE SCHEMA |
基本表 | CREATE TABLE,ALTER TABLE | |
视图 | CREATE VIEW | |
索引 | CREATE INDEX | |
? ? ?? 数据 | 基本表和视图 | SELECT,INSERT,UPDATE,DELETE,REFERENCES, ALL PRIVILEGES |
属性列 | SELECT,INSERT,UPDATE, REFERENCES,ALL PRIVILEGES |
WITH GRANT OPTION子句:
指定:可以再授予
没有指定:不能传播
语义:将对指定操作对象的指
以下需要建立很多的用户,但是问题就来了。
网络上这么说的:
同一数据库中,一个登录只能对应一个用户
一个登录,在不同的数据库中,允许对应不同的用户
!所以啊,选择不同的登录名建立以下的用户,对的,下面的题目要使用。
标准SQL是在SQLserve中是错误的。以下语句会报错,形式如下:
消息 156,级别 15,状态 1,第 6 行
关键字 'TO' 附近有语法错误。
grant select
on table Student
to U1;
?正确的写法为:
grant select
on Student
to U1;
如何查看是否将权限授予成功呢?
右击该用户,选择属性。
右下角可查看已有属性。
以上新建立的用户,默认都是无权限。
?
grant all privileges
on Student,Course
to U2,U3;
错误如下:
消息 102,级别 15,状态 1,第 2 行
“,”附近有语法错误。
?原因:grant语句一次只能对一个对象进行赋权,不能同时对两个表进行赋权;但是我们可以同时赋给对象多个不同的权限。
?所以在我的SQLserve中,可以使用以下语句进行授权。
grant all privileges
on Student
to U2,U3;
grant all privileges
on Course
to U2,U3;
但是依旧会有以下的提示。。。?
?ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
?ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
现在再次查看U2,U3到底有多少的权限,插入,更新,删除,选择,引用。?
?
grant select
on SC
to public;
grant update(Sno),select
on Student
to U4;
??对属性列的授权时必须明确指出相应属性列名
?加上最后一句话,就允许该用户将自己的权限全部或者部分的授予给其他用户。
grant insert
on SC
to U5
with grant option;
U5不仅拥有了对表SC的INSERT权限,
?还可以传播此权限:
grant insert
on SC
to U6
with grant option;
同样,U6还可以将此权限授予U7:?
grant insert
on SC
to U7;
?
授权用户名 | 被授权用户名 | 数据库对象名 | 允许的操作类型 | 能否转授权 |
DBA | U1 | 关系Student | SELECT | 不能 |
DBA | U2 | 关系Student | ALL | 不能 |
DBA | U2 | 关系Course | ALL | 不能 |
DBA | U3 | 关系Student | ALL | 不能 |
DBA | U3 | 关系Course | ALL | 不能 |
DBA | PUBLIC | 关系SC | SELECT | 不能 |
DBA | U4 | 关系Student | SELECT | 不能 |
DBA | U4 | 属性列Student.Sno | UPDATE | 不能 |
DBA | U5 | 关系SC | INSERT | 能 |
U5 | U6 | 关系SC | INSERT | 能 |
U6 | U7 | 关系SC | INSERT | 不能 |
revoke update(Sno)
on Student
from U4;
?
revoke select
on SC
from public;
revoke insert
on SC
from U5 cascade;
此时U5用户没有任何权限了。?
角色(ROLE):
?被命名的一组与数据库操作相关的权限
角色是权限的集合。可以为一组具有相同权限的用户创建一个角色。
优点:简化授权的过程。
步骤如下:
(1)首先创建一个角色 R1
create role R1
?
(2)然后使用GRANT语句,使角色R1拥有Student表的? SELECT、UPDATE、INSERT权限
grant select,update,insert
on Student
to R1;
选择右上角的安全对象。可以查看R1的权限。?
(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
grant R1
to 王平,张明,赵玲;
错误。。【濒临崩溃的瞬间,昨天晚上写到这里的时候断电了,,,我裂开了,怎么这么多问题】
消息 102,级别 15,状态 1,第 9 行
“R1”附近有语法错误。
下面的语句是可以在SQLserve上面运行的。
alter role R1
add member 王平;
alter role R1
add member 张明;
alter role R1
add member 赵玲;
按照属性找到他的身份,以上三个用户就拥有R1角色的全部权限。
同样的,角色成员也可以找到。?
(4) 可以一次性通过R1来回收王平的这3个权限
revoke R1
to 王平;
有以下提示:
消息 102,级别 15,状态 1,第 8 行
“R1”附近有语法错误。?
正确的:
exec sp_droprolemember 'R1','王平';
已经成功收回王平的权限。
grant delete
on Student
to R1;
使角色R1在原来的基础上增加了Student表的DELETE 权限
revoke select
on Student
from R1;
使R1减少了SELECT权限
?
。又一次写了好久的博客,目前感到万分的心累,还有一个作业没有写啊~~~
T-SQL和标准SQL的差距其实还是蛮大的,起码在这篇博客涉及的方面有很大的不同,课上的代码都有大大小小的修改。
?
完结,撒花!
?
好想坐沙发。。。
?
?
本文实例讲述了jsp页面常用的查询及显示方法。分享给大家供大家参考,具体如下:...
每年的3,4月份都是求职的高峰期,今天我们来分享一个经典的面试题,这个题目是来...
复制代码 代码如下: %@ page language="java" contentType="text/html; charset=...
原作者:?不愿署名的沈大佬(博主好友) 1. 目录结构 mysql_sync/ - docker-compose...
一、代码预览 这两天在做struts2上的邮件发送。以前的项目有用到spring,用sprin...
文章目录 前言 一、核心功能 1.页面展示 1.抽奖接口 3.定时触发智能合约抽奖,并...
1、背景 最近,一个工作了一个月的同事离职了,所做的东西怼了过来。一看代码,...
回表的概念 先得出结论,根据下面的实验。如果我要获得['liu','25']这条记录。需...
前言 在嵌入式开发中,ADC应用比较频繁,本文主要讲解ADC的基本原理以及如何编写...
MySQL的字符集从latin1经过utf8 到utf8mb4 ,算是经历曲折的路线。特别是从使用...