摘自《数据库系统概论》–王珊
2、REVOKE
授权用户的权限可以由数据库管理员或其他授权者用REVOKE语句收回,REVOKE的语句一般格式为
REVOKE <权限> on 对象类型 <对象名> from 【用户】
把用户 U4 修改学生学号的权限收回
REVOKE UPDATE(Sno)ON Tbale Student from u4
REVOKE SELECT ON school.Student from 'student'@'localhost'
收回学生本地select权限
REVOKE SELECT on *.* from 'student'@'localhost';
注意:如果student授权给其他用户,当管理员收回student的权限时,会级联(cascADE)收回student授权的用户
,这里默认值是cascade,有的数据库管理系统默认为RESTRICT,将自动执行级联操作。如果u6或u7还从其他用户处
获得权限,则他们任然具有此项权限,系统只收回直接或间接从u5处获得的权限。
3、创建数据库模式的权限
GRANT 和 REVOKE 语句向用户授权或收回对数据的操作权限。对创建数据库模式一类的数据库对象的授权则由数据库管理员
在创建用户时实现。
CREATE user语句一般如下。
CREATE user [WITH][DBA|RESOURCE|CONNECT]
**只有系统的超级用户才有权创建一个新的数据库用户。
**新创建的数据库用户有三种权限 DBA | RESOURCE | CONNECT。
**CREATE USER命令中如果没有指定创建新用户的权限,默认该用户拥有CONNECT权限。拥有CONNECT权限的用户不能创建新用户,
不能创建模式,不能创建基本表,只能登陆数据库。由管理员或其他用户授予他应有的权限,根据获得的授权情况,他可以对数据库进行
权限范围内的操作。
**拥有RESOURCE权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建新的用户。数据库对象的属主可以使用GRANT
语句把该对象身上的权限授予其他的用户
**拥有DBA权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等;
不好使:grant dba to user1
#4.2.5 数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
1、角色的创建
CREATE ROLE <角色名>
创建的角色为空,没有任何内容,可以用GREANT为角色授权
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,insert,updata权限。
GRANT select,INSERT,UPDATE on student to R1;
③将这个角色授予user1,user2,user3,使他们具有角色R1所包含的全部权限。
GRANT R1 to user1,user2,user3,
④当然,也可以一次性的通过R1来收回 user1的三个权限
REVOKE R1 from user1,
⑤角色权限修改。
##4.3视图机制
还可以为不同的用户定义不同的视图范围,把数据对象限制在一定的范围内,也就是说,通过视图吧要保密的数据
对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护
【例】建立计算机系学生的视图,把对该视图的select权限授予user1,把该视图上的所有操作授予张明
/*先建立视图*/
create view CS_student
AS
select * from student where Sdept ='cs';
/*user1只能检索计算机系学生的信息*/
GRant select from CS_student to user1
/*系主任具有检索和增删改计算机系学生信息的所有权限*/
grant all privileges on CS_student to 系主任
##4.4审计
任何的系统的安全都不是完美无缺的,蓄意盗取、破坏数据的人总是想办法打破控制。
审计功能把用户对数据库的所有操作自动记录下来放入审计日志。审计员可以利用
审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、
时间和内容等。可以对审计日志进行分析,对潜在的危险提前采取措施加以防范
1.审计事件
①、服务器事件
审计数据库服务器发生的时间,包含数据库服务的启动、停止、数据库服务器
配置文件的重新加载。
②、系统权限
对系统拥有的结构或模式对象进行操作审计,要求该操作的权限是通过系统权限获得的
③.语句事件
对sql语言的审计
④.模式对象事件
对特定模式对象上进行的select和DML操作的审计。模式对象包括表、视图、存储过程、
函数等。模式对象不包括依附于表的索引、约束、触发器、分区表等。
2、审计功能
基本功能
提供多套审计规则
提供审计分析和报表功能
审计日志管理功能
3、AUDIT语句和NOAUDIT语句
AUDIT语句用来设置审计功能,NOAUDIT用来取消审计功能。
审计一般分为用户级审计和系统级审计,
用户级审计,主要针对用户对自己创建的数据库表或视图
进行审,记录所有用户对这些表的操作。
系统级审计只能由数据库管理员设置,用以监测成功或者失败的登录要求、监测授权和收回操作以及
其他数据库级权限下的操作
【例】对修改SC表结构或修改SC表数据的操作进行审计
AUDIT alter,updata on SC
【例】取消对 SC的一切审计
NOAUDIT alter,update on sc
审计设置以及审计日志一般都存储在数据字典中。必须把审计开关打开(即把系统参数
audit_trail设为 true)才可以在系统表sys_AUDITTRAIL中看到审计信息。
数据库安全审计系统提供了一种事后检查的安全机制
MySQL 8 , 开启审计
查看设置
show global variables like 'log_timestamps';
show global variables like '%general%'
设置开启审计
set GLOBAL general_log = OFF;
set GLOBAL log_timestamps =system;