1.GRANT
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
语义:将对指定操作对象的指定操作权限授予指定的用户
先创建用户U1 :
create user U1 identified by 'jh123456';
GRANT SELECT
ON Table Student
TO U1;
我这里有无Table都是正确的,查了一下,标准sql是要有table的,T-sql中没有table,在SQLserver中要运行此语句,必须删除TABLE。
[例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
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 Table SC
TO U5
WITH GRANT OPTION;
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不能再传播此权限
2.REVOKE
语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
[例4.8] 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
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;
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;
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
间接地实现支持存取谓词的用户权限定义
[例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;
审计日志(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掌握好叭