1、非授权用户对数据库的恶意存取和破坏
2、数据库中重要或敏感的数据被泄露
3、安全环境的脆弱性
TCSEC/TDI标准包含安全策略、责任、保证、文档四个方面
CC标准包含安全功能要求和安全保证要求
用户身份鉴别
是合法用户(账户、密码、脸部识别、虹码识别等)
静态口令:口令不经常修改,安全性较低;
动态口令:每次登录使用新生成的口令;
智能卡等
存储控制机制/角色
Oracle为例:
Oracle将角色和权限分开,角色是一组权限,给用户赋予权限即可。
权限包含:系统权限(session/table/index/view/sequence/trriger的创建权限)
对象权限:数据的增删改查
角色:系统一般预定义了DBA、connect、resource三个角色,DBA是管理员,开发一般使用connect和resource。
常用命令:
(1)SELECT * FROM user_sys_privs; // 查看当前用户的所有系统权限,ADMIN_OPTION为yes,代表可以转授
(2)SELECT * FROM USER_ROLE_PRIVS; // 查看当前用户的角色
(3)给用户赋予角色
grant 角色名 to 用户名
grant 角色权限 on 对象 to 用户
grant 角色|权限 on 对象 to 用户 with grant option,是否允许用户转授此权限,不允许循环授权
grant 角色 to 角色 withi anmin option with admin option是可以把角色再授予其它角色,授予者是角色的创建者或者拥有角色的admin option
GRANT SELECT,DELETE,UPDATE,INSERT ON zhang.person TO CHENMH ;
(4)SELECT * FROM USER_TAB_PRIVS; 查看当前用户的对象权限
(5)自定义角色
create role student; -----创建角色
grant select on class to student; -----授权角色
drop role student; -----删除角色
(6)回收权限
reovke 权限 on 对象 from 用户 [cascade|restrict] cascade为级联回收,当此用户给别的用户授权过的话,则一起回收,restrict为受限回收,需要先把此用户给别人授过的权限回收后,此权限才能回收。
强制存取控制
自主存取控制仅仅通过对数据的存取权限来进行安全控制,而对数据本身并无安全性标记,比如财务可以看到所有人的工资,其它人看不到所有人的工资,但是财务将数据复制到自己新建的表中,并且允许所有人查看,则会造成所有人都可以看到工资了。
给用户(主体)和对象(客体)设置敏感度标记(绝密>机密>可信>公开),当主体的许可证级别大于或等于客体的密级时,才允许读;当主体的许可证级别小于或等于客体的密级时,才允许写。
视图机制设置访问
前面的都是表和列,无法控制行或者某些符合条件的行,使用视图可以实现根据存储谓词的操作。
审计
前面的都是预防性的措施,审计是监控措施,启动一个专用的审计日志,将用户对数据库的所有操作都记录到日志中。
注:审计日志耗时、耗费性能,并且需要关注文件大小和转储
用户级审计:当前用户
系统级审计:系统管理员
ORACLE为例:
33.Oracle精细化审计_哔哩哔哩_bilibili
(1)查看是否开启审计 show parameter audit;
第一个是审计日志的目录,第二个是是否开启,sudit_trail是开启的审计级别
正确性:性别的取值只能是男或者女
完整性:不同表的关联值不能错误,即选课的课程必须存在
方法:
完整性约束机制(定义、自动检查、违反时违约机制),其中违约后有两种,一种是直接解决,一种是级联,即选课时,课程不存在,则默认加一个课程,此时已经满足了,在插入学生的选课。
实体完整性:关系的主属性不能取空值,使用主键,代表了实体唯一,为防止全表扫描,都会自动建立一个B+索引。
参照完整性:外键或者取空值,或者为关联表某个元组的主码的值,外键即可,
用户定义的完整性:列值非空、列值唯一、列值范围,已在Oracle学习 CSDN
断言:
触发器: