虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!
目录
4.1数据库安全性概述
●数据库的安全性:保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
4.1.1数据库的不安全因素
❶非授权用户对数据库的恶意存取和破坏
♦一些黑客和犯罪分子在用户存取数据库时猎取用户名和口令,假冒合法用户偷取、修改或者破坏用户数据。因此必须阻止有损数据库安全的非法操作,以保证数据免受未经授权的访问和破坏,数据库管理系统提供的安全措施主要包括:
▷用户身份鉴别
▷存取控制
▷视图
❷数据库中重要或者敏感的数据被泄露
♦黑客盗取数据库中的重要数据,使得一些机密信息被暴漏。以防止数据泄露,数据库管理系统提供的主要技术有
▷强制存取控制
▷数据加密存储
▷加密传输
♦安全性要求较高的部门提供“审计”功能,通过分析审计日志,可以对潜在的威胁提前采取措施加以防范,非授权用户的入侵行为及信息破坏能够进行跟踪。
❸安全环境的脆弱性
♦数据库的安全性与与计算机系统的安全性(包括计算机硬件、操作系统网络系统)是紧密联系的。操作系统安全的脆弱、网络协议安全保障的不足等都会造成数据库安全性的破坏。
4.1.2安全标准简介
❶TCSEC标准(Trusted Computer System Evaluation Criteria):可信计算机系统评估准则
❷CC标准(Common Criteria):通用准则
●TCSEC/TDI(Trusted Database Interpretation):标准的基本内容。
从4个方面来描述安全级别划分的指标:①安全策略、②责任、③保证、④文档
安全级别 | 定义 | ①按系统可靠或可信程度逐渐增高 ②各安全级别之间:偏序向下兼容 |
A1 | 验证设计 | |
B3 | 安全域 | |
B2 | 结构化保护 | |
B1 | 标记安全保护 | |
C2 | 受控的存取保护 | |
C1 | 自主安全保护 | |
D | 最小保护 |
D级:最小保护 |
♦将一切不符合更高标准的系统均归于D组 ♦典型例子:DOS系统是安全标准为D的操作系统,DOS在安全性方面几乎没有什么专门的机制来保障 |
C1级:自主安全保护 |
♦非常初级的自主安全保护,能够实现用户和数据的分离,进行自主存取控制(DAC),保护或限制用户权限的传播 |
C2级:受控的存取保护 |
♦安全产品的最低档次; ♦提供受控的存取保护,将C1级的DAC进一步细化,以个人身份注册负责,并实施审计和资源隔离; ♦达到C2级的产品在其名称中往往不突出“安全”这一特色 |
B1级:标记安全保护 |
♦标记安全保护。“安全”(Security)或“可信的”(Trusted)产品。 ♦对系统的数据加以标记,对标记的主体和客体实施强制存取控制(MAC)、审计等安全机制。 |
B2级:结构化保护 |
♦结构化保护 ♦建立形式化的安全策略模型并对系统内的所有主体和客体实施DAC和MAC。 ♦经过认证的B2级以上的安全系统非常稀少 |
B3级:安全域 |
♦该级的TCB(Trusted Computing Base)必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程 |
A1级:验证设计 |
♦验证设计:即提供B3级保护的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现 ♦说明:B2以上的系统 ♦还处于理论研究阶段; ♦应用多限于一些特殊的部门如军队等; ♦美国正在大力发展安全产品,试图将目前仅限于少数领域应用的B2安全级别下放到商业应用中来,并逐步成为新的商业标准。 |
4.2数据库安全性控制
❶非法使用数据库的情况
♦编写合法程序绕过DBMS及其授权机制
♦直接或编写应用程序执行非授权操作
♦通过多次合法查询数据库从中推导出一些保密数据(比如我要求x,y,如果直接查询x与y的值是非法的,而x+y的值查询合法,x-y的值查询合法,我们就可以通过查询这两个值求出x与y的值)
❷计算机系统中,安全措施是一级一级层层设置
4.2.1用户身份鉴别
●系统提供的最外层安全保护措施:
♦由系统提供一定的方式让用户标示自己的名字或者身份,每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供机器使用权。
♦用户标志(UID)(大概等于我们的登录账号)
♦口令(系统核对口令以鉴别用户身份,大概就是我们的登录密码)
♦用户名和口令易被窃取
❶静态口令鉴别
♦静态口令一般由用户自己设定,鉴别时只要按要求输入正确的口令,系统将允许用户使用数据库管理系统。
♦方式简单,但是容易被攻击,安全性较低。
❷动态口令鉴别
♦口令是动态变化的,每次鉴别时均需要使用动态产生的新口令登录数据库管理系统,即采用的一次一加密的方法,常用的方法如短信密码和动态口令牌的方法
♦与静态口令牌相比,这种认证方式增加了口令被窃取或破解的难度,安全性相对高一些
❸生物特征鉴别
♦通过生物特征进行认证的技术,其中生物特征是 指的生物体唯一具有的,可测量的、识别和验证的稳定生物特征,如指纹、虹膜和掌纹等。这种方式通过采用图像处理和模式识别等技术实现了基于生物特征的认证。(指纹支付)
♦安全性较高
❹智能卡技术
♦智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。智能卡由用户随时携带,登录数据库管理系统时将智能卡插入专用的读卡器进行身份验证。
♦每次从智能卡中读取的数据是静态的,因此通过内存扫描或网络监听等技术还是可能截取到用户的身份验证信息,存在安全隐患,实际应用中一般采用个人身份识别码和智能卡相结合的方式。
4.2.2存取控制
●数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库,同时使得所有未授权的人员无法接近数据,这主要就是通过数据库系统的存取控制机制实现的。
●用户权限定义和合法权检查机制一起组成了DBMS的安全子系统
●可以看到我这边写出了英文,为什么要写英文呢?因为老师说如果出“名词解释”题的话,要连着英文一起写!
4.2.3自主存取控制方法
●通过 SQL 的 GRANT. 语句和 REVOKE 语句实现
●用户权限是通过两个要素组成的:数据库对象和操作类型。
●定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作
●定义存取权限称为授权(authorization)
●存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)。
4.2.4授权:授予与收回
●GRANT语句向用户授予权限,REVOKE语句收回已经授予的权限
❶GRANT <权限> [,<权限>]...
ON <对象类型> <对象名>]
TO <用户> [,<用户>]...
[WITH GRANT OPTION];
●谁发出GRANT:
♦DBA
♦数据库对象创建者(即属主Owner)
♦拥有该权限的用户
●接受权限的用户:
♦一个或多个具体用户
♦PUBLIC(全体用户)
●WITH GRANT OPTION:指定了这个子句,就表示获得这个权限的用户可以把获得的权限再传播给他人,反之只能自己使用。
●不允许循环授权。
●访问数据的权限 |
SELECT(读取权限):允许读数据,但不能修改数据 |
INSERT(插入权限):允许插入一条新的数据,但不能修改已有数据 |
UPDATE(修改权限):允许修改数据,但不能删除数据 |
DELETE(删除权限):允许删除数据 |
●修改数据库模式(SQL92标准)的权限 |
Index(索引权限):允许建立或删除索引 |
Create(创建权限):允许建立新的关系表 |
Alter(修改权限):允许对关系表中的属性进行增加、删除 |
Drop(删除权限):允许删除关系表 |
例4.1:把查询Student表权限授给用户U1(GRANT操作)
GRANT SELECT
ON TABLE student
TO U1;
例4.2:把对Student表和Course表的全部操作权限授予用户U2和U3(ALL PRIVILEGES)
GRANT ALL PRIVILEGES
ON TABLE student,course
TO U2,U3;
例4.3:把对表SC的查询权限授予所有用户(PUBLIC)
GRANT SELECT
ON TABLE sc
TO PUBLIC;
例4.4:把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(SNO),SELECT
ON TABLE student
TO U4;
例4.5:把对表SC的INSERT权限授予U5用户,并允许他将此权限授予其他用户(WITH GRANT OPTION)
GRANT INSERT
ON TABLE sc
TO U5
WITH GRANT OPTION;
例4.6:将U5的权限授权给U6(是U5执行的授权操作!)
GRANT INSERT
ON TABLE sc
TO U6
WITH GRANT OPTION;
一顿操作猛如虎后:
❷REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;
●DBA:拥有所有对象的所有权限
♦不同的权限授予不同的用户
●用户:拥有自己建立的对象的全部的操作权限
♦GRANT:授予其他用户
●被授权的用户
♦“继续授权”许可:再授予
●所有授予出去的权力在必要时又都可用REVOKE语句收回
例4.8:把用户U4修改学生学号的权限收回
REVOKE UPDATE(SNO)
ON TABLE student
FROM U4;
例4.9:收回所有用户对表SC的查询权限
REVOKE SELECT
ON TABLE sc
FROM PUBLIC;
例4.10:把用户U5对SC表的INSERT权限被收回(级联CASCADE)
REVOKE INSERT
ON TABLE sc
FROM U5 CASCADE;/*CASCADE级联收回了U6的INSERT权限*/
又一顿操作猛如虎后:
❸ 创建数据库模式的权限
●对创建数据库模式一类的数据库对象的授权由DBA在创建用户时实现
CREATE USER语句格式
CREATE USER <username>
[WITH][DBA | RESOURCE | CONNECT]
●只有系统的超级用户才有权创建一个新的数据库用户
●具有CONNECT特权的用户
♦不能创建新用户,不能创建模式和基本表,可以与数据库连接,能根据授权进行数据库中数据的查询、更新。
●具有RESOURCE特权的用户
♦除具有CONNECT特权外,还能创建表、索引,修改表结构,能将自己创建的数据对象的访问权授予其他用户或从其他用户那儿收回,对自己创建的数据对象能进行跟踪审查。
●具有DBA特权的用户
♦能进行所有的数据库操作
4.2.5数据库角色
●数据库角色:被命名的一组与数据库操作相关的权限。
♦角色是权限的集合
♦可以为一组具有相同权限的用户创建一个角色
♦使用角色来管理数据库权限可以简化授权的过程
(通俗理解:就是把几个权限糅合在一起,给它一个名字,以后要把这几个权限一起给某个人的时候就可以直接通过名字给了)
❶角色的创建:
CREATE ROLE <角色名>
❷对角色授权:
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
❸将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
❹角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
例4.11:通过角色来实现将一组权限授予一个用户(注意过程)
-- ①首先创建一个角色R1
CREATE ROLE R1;
-- ②然后使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限
GRANT SELECT,UPDATE,INSERT
ON TABLE student
TO R1;
-- ③将这个角色授予王平、张明、赵玲,使他们具有角色R1所包含的全部权限。
GRANT R1
TO 王平,张明,赵玲;
-- ④当然也可以一次性通过R1来回收王平的这三个权限
REVOKE R1
FROM 王平;
例4.12:角色的权限修改,使角色R1在原来的基础上增加了对student表的delete权限(此时所有拥有R1角色的用户都将拥有delete权限)
GRANT DELETE
ON TABLE student
TO R1;
例4.13:使R1减少了select 权限
REVOKE DELETE
ON TABLE student
FROM R1;
4.2.6强制存取控制方法
●自主存取控制缺点
♦可能存在数据的“无意泄露”
♦原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
♦解决:对系统控制下的所有主客体实施强制存取控制策略
●强制存取控制(MAC)
♦保证更高程度的安全性
♦用户不能直接感知或进行控制
♦使用与对数据由严格而固定密级分类的部门(军事部门、行政部门)
●实体:系统中的活动实体
♦DBMS(数据库管理系统)所管理的实际用户
♦代表用户的各进程
●客体:是系统中的被动实体,是受主体操纵的对象
♦文件、基本表、索引、视图
●敏感度标记(Lable)
♦绝密(Top Secret)
♦机密(Secret)
♦可信(Confidential)
♦公开(Public)
♦主体的敏感度标记称为许可证级别(Clearance Level)
♦客体的敏感度标记称为密级(Classification Level)
♦当主体的许可证级别等于客体的密级,主体可以更新相应客体
●强制存取控制规则
♦仅当 主体的许可证级别 ≥ 客体的密级时,该主体才能 读取 相应的客体
♦仅当 主体的许可证级别 = 客体的密级时,该主体才能 写 相应的客体
●修正规则
♦主体的许可证级别 <= 客体的密级 à主体能 写 客体
●规则的共同点
♦禁止了拥有高许可证级别的主体更新低密级的数据对象。
♦强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级要求的用户才可以操作数据,从而提供了更高级别的安全性。
●DAC与MAC共同构成DBMS的安全机制
●实现MAC时要首先实现DAC
♦原因:较高安全性级别提供的安全保护 要包含 较低级别的所有保护
♦先进行DAC检查,通过DAC检查的数据对象再由系统进行MAC检查,只有通过MAC检查的数据对象方可存取
4.3视图机制
●把要保密的数据对无权存取的用户隐藏起来,对数据提供一定程度的安全保护
♦主要功能是提供数据独立性,无法完全满足要求
♦间接实现了支持存取谓词的用户权限定义
例4.14:建立软件学院学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
-- ①建立视图CS_Student
CREATE VIEW CS_Student
AS
SELECT *
FROM student
WHERE SDEPT='CS';
-- 王平老师只能检索计算机系的学生
GRANT SELECT
ON CS_Student
TO 王平;
-- 系主任具有检索和增删计算机系学生信息的所有权限
GRANT ALL PRIVILEGES
ON CS_Student
TO 张明;
*4.4审计(不重要)
●审计功能:数据库管理系统达到C2以上安全级别必不可少的一项指标
●把用户对数据库的所有操作自动记录下来放入审计日记(audit log)中,审计员可以利用审计日志监控数据库的各种行为,找出非法数据的人、时间和内容,对潜在的威胁提前采取措施加以防范。
●审计通常很费时间和空间,所以数据库管理系统往往都将审计设置为可选特征,允许数据库管理员根据具体应用对安全性的要求灵活地打开或者关闭审计功能。
●可审计事件:服务器事件、系统权限、语句事件和模式对象事件,还包括用户鉴别、自主访问控制和强制存取控制
♦服务器事件:审计数据库服务器发生的事件,包括数据库服务器的启动、停止,数据库服务器配置文件的重新加载;
♦系统权限:对系统拥有的结构或者模式对象进行操作的审计要求该操作是通过系统权限获得的;
♦语句事件:对SQL语句的审计;
♦模式对象事件:对特定模式对象上进行的SELECT或者DML操作的审计,模式对象包括表、视图、存储过程、函数等,但不包括依附于表的索引、约束、触发器、分区表等。
●AUDIT语句:设计审计功能
●NOAUDIT语句:取消审计功能
例4.15:对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
例4.16:取消对SC表的一切审计
NOAUDIT ALTER,UPDATE
ON SC;
*4.5数据加密(不重要)
4.6其他安全性保护
●推理控制(inference control)处理是强制存取控制未解决的问题。例如,利用列的函数依赖关系,用户能从低安全等级信息推导出起无权访问的高安全等级信息
(之前提到过的例子,要是想知道x与y,但是不能直接查询,而x+y与x-y的值可以查询,就可以根据这两个值推理出x与y(解方程!))
●统计数据库
♦允许用户查询聚集类型的信息(如合计、平均值等)
♦不允许查询单个记录信息
♦统计数据库中特殊的安全性问题
●隐蔽的信息通道
♦能从合法的查询中推导出不合法的信息
规则1:任何查询至少要涉及N(N足够大)个以上的记录
规则2:任意两个查询的相交数据项不能超过M个
规则3:任一用户的查询次数不能超过1+(N-2)/M
●数据库安全机制的设计目标:
试图破坏安全的人所花费的代价 >> 得到的利益