数据库作业11:SQL练习7

授权:授予与回收

1.GRANT

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

语义:将对指定操作对象的指定操作权限授予指定的用户
先创建用户U1 :

create user U1 identified by 'jh123456';

数据库作业11:SQL练习7_第1张图片
[例4.1] 把查询Student表权限授给用户U1

GRANT SELECT 
ON Table Student 
TO U1;

我这里有无Table都是正确的,查了一下,标准sql是要有table的,T-sql中没有table,在SQLserver中要运行此语句,必须删除TABLE。
数据库作业11:SQL练习7_第2张图片
[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3

GRANT ALL PRIVILIGES 
ON TABLE Student,Course 
TO U2,U3;
--标准 SQL

语句执行是错误的,提示我 PRIVILIGES附近有语法错误,删除PRIVILIGES之后,运行显示‘,Course’附近有错误,查询得到:grant语句,一次只能对一个对象进行赋权;不能同时对两个表进行赋权;但可以同时赋权多个不同的权限。多表同时赋权,会产生报错信息。
修改为:

GRANT ALL PRIVILEGES    //这里尝试删不删PRIVILEGES 都是可以的
ON Student
TO U2,U3;

GRANT ALL PRIVILEGES
ON Course
TO U2,U3;
--T-SQL

在这里插入图片描述
[例4.3] 把对表SC的查询权限授予所有用户

GRANT SELECT 
ON SC 
TO PUBLIC;

数据库作业11:SQL练习7_第3张图片
[例4.4] 把查询Student表和修改学生学号的权限授给用户U4

GRANT UPDATE(Sno),SELECT 
ON Student 
TO U4;

**对属性列的授权时必须明确指出相应属性列名 **
数据库作业11:SQL练习7_第4张图片
[例4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户

GRANT INSERT 
ON Table SC 
TO U5
WITH GRANT OPTION;

数据库作业11:SQL练习7_第5张图片
Grant Option : 授权或者收回给其他用户你给予的权限
执行例4.5后,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限
[例4.6]

GRANT INSERT 
ON TABLE SC 
TO U6
WITH GRANT OPTION;

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

GRANT INSERT 
ON TABLE SC 
TO U7;

但U7不能再传播此权限
数据库作业11:SQL练习7_第6张图片
数据库作业11:SQL练习7_第7张图片
2.REVOKE
语句的一般格式为:

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

[例4.8] 把用户U4修改学生学号的权限收回

REVOKE UPDATE(Sno)
ON TABLE Student 
FROM U4;

数据库作业11:SQL练习7_第8张图片
[例4.9] 收回所有用户对表SC的查询权限

REVOKE SELECT 
ON TABLE SC 
FROM PUBLIC;

数据库作业11:SQL练习7_第9张图片
[例4.10] 把用户U5对SC表的INSERT权限收回

REVOKE INSERT 
ON TABLE SC 
FROM U5 CASCADE;

将用户U5的INSERT权限收回的时候应该使用CASCADE,否则拒绝执行该语句
如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限
执行该语句时,有CASCADE是提示它周围有错误,不能收回权限,而删除CASCADE后则运行成功。查了一下mysql中收回权限不需要CASCADE。

数据库角色

角色(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 TABLE Student 
TO R1;

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

GRANT  R1 
TO U5,U6,U7;

数据库作业11:SQL练习7_第10张图片
(4) 可以一次性通过R1来回收王平的这3个权限

REVOKE  R1 
FROM U5;

[例4.12] 角色的权限修改

GRANT DELETE 
ON TABLE Student
TO R1;

使角色R1在原来的基础上增加了Student表的DELETE 权限
在这里插入图片描述
[例4.13]

REVOKE SELECT 
ON TABLE Student
FROM  R1;

使R1减少了SELECT权限
数据库作业11:SQL练习7_第11张图片

视图机制

把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
间接地实现支持存取谓词的用户权限定义
[例4.14] 建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
先建立计算机系学生的视图CS_Student

CREATE VIEW CS_Student
AS 
SELECT  *
FROM   Student
WHERE  Sdept='CS';

在视图上进一步定义存取权限

GRANT  SELECT
ON  CS_Student  
TO U5;

GRANT ALL 
ON  CS_Student  
TO  U6; 

数据库作业11:SQL练习7_第12张图片
数据库作业11:SQL练习7_第13张图片

审计

审计日志(Audit Log):将用户对数据库的所有操作记录在上面
审计员利用审计日志监控数据库中的各种行为,找出非法存取数据的人、时间和内容。
审计功能的可选性:审计很费时间和空间、DBA可以打开或关闭审计功能、审计功能主要用于安全性要求较高的部门

AUDIT语句和NOAUDIT语句
◾️AUDIT语句:设置审计功能
◾️NOAUDIT语句:取消审计功能
[例4.15] 对修改SC表结构或修改SC表数据的操作进行审计

AUDIT ALTER,UPDATE  
ON  SC;

一直提示AUDIT ALTER,UPDATE 附近有错误,
AUDIT:设置审计功能 。
[例4.16] 取消对SC表的一切审计

NOAUDIT  ALTER,UPDATE  
ON  SC;

审计这块一直出错,查了mysql中设置审计功能一头雾水看不懂。看了几位同学好像也没有找到解决方案是我没有找到吗
T-SQL语言是标准的SQL Server的扩展,是标准的SQL程序设计语言的增强版,是用以程序与SQL Server沟通的主要语言。T-SQL是SQL Server系统产品独有的,其他的关系数据库不支持T-SQL。
要想学好Tsql先把标准sql掌握好叭

你可能感兴趣的:(数据库作业11:SQL练习7)