数据库安全

数据库管理系统


  1. 数据库:存储一个或多个应用所用数据的结构化的集合。
  2. 数据库管理系统:创建,并维护数据库,并为多个用户和应用提供特定查询服务的软件。
  3. DDL(数据定义语言):其实就是我们在创建表的时候用到的一些sql,比如说:CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构,数据类型,表之间的链接和约束等初始化工作上。
  4. DML(数据操作语言):就是我们最经常用到的 SELECT、UPDATE、INSERT、DELETE。 主要用来对数据库的数据进行一些操作。
  5. 查询语言:为用户和应用程序提供访问数据库的统一接口
  6. 访问数据库接口的是事务管理器和文件管理器。
  7. 授权表:用于确保用户具有执行数据库查询语句的权限。
  8. 并发访问表:避免程序并发执行过程中发生冲突。
  9. 操作系统的访问控制机制一般只能用于对整个文件,对于一条记录,或者一条记录中某个字段,操作系统的访问控制机制将可能显得无能为力,DBMS确可以做到更加将精细的访问控制。

关系型数据库


  1. 在关系型数据库中,基本构建是表-关系,行被称为元祖,列被称为属性。主键用来唯一的标识一行,可能由一个或多个属性组成。
  2. 要创建两个表之间的联系,第一个表定义的主键必须作为另一个表的属性出现,称之为外键。
  3. 视图:是一个虚表,从一个或多个表中返回选定的行或列。
  4. 结构化查询语言(SQL):能对关系数据库进行定义,操纵和查询的语言。

数据库的访问控制


  1. DBMS的运行基于计算机系统已经认证了用户身份的基础上,计算机系统可以增加一层额外的访问控制,用来控制用户对整个数据库的访问。数据库管理系统则用来控制用户访问数据库的一部分。
  2. 商业DBMS通常使用自主的或基于角色的访问控制。
  3. DBMS的管理策略:
  • 集中管理:只有少量特权用户可以授予和回收表的访问权
  • 基于所有权的管理:表的所有者可以授予和回收表的访问权。
  • 分散管理:不仅允许表的所有者授予和回收表的访问权,被授予访问权的用户仍可将权力授予他人。
  1. 数据库管理系统区分不同的访问权,包括创建,删除,更新和插入,访问权可以是对整个数据库,表,也是是针对具体的某个记录,属性,还可能根据实际的内容确定。
  2. SQL实现授权和回收的两个命令:GRANRT和REVOKE。
grant一般格式:
grant <权限> [,<权限>]…
on <对象类型 > <对象名> [,<对象类型 > <对象名>]..
to <用户> [,<用户>]…
[with grant option];
将指定操作对象的指定权限授予给指定的用户。发出该grant语句的人可以是DBA,数据库的创建者  
或者是拥有该权利的其他用户。指定[with grant option]允许用户将将权利授予他人。
例子:把查询Student表和修改学生学号的权限授权给用户U1.
grant select,update(Sno)
on table Student
to U1;

revoke一般格式:
revoke <权限> [,<权限>]…
on <对象类型 > <对象名> [,<对象类型 > <对象名>]..
from <用户> [,<用户>]…
[cascade | restrict];
例子:收回所有用户对表SC的查询权限
revoke select
on table sc
from public	//public表示所有用户
  1. 多重级联授权与回收问题
    在这里插入图片描述
  • with grant option选项开启后,能够使得访问权级联到很多用户。
  • Ann在t=10时刻将访问权授予Bob,又在t=20时刻将访问授予Chris,因为开启了级联授权选项,Bob可以在t=30时刻将访问权授予David,同时Chris又将访问权在t=50时刻授予David,David又把权利授予Ellen,Frank,Ellen又将权利授予Jim。
  • 假设Bob收回授予David的访问权,因此由Bob授予访问权级联产生的Ellen和Jim的访问权也会被收回,但是Frank的访问权不会被收回,因为Frank的访问权是由Chris级联产生的。
  1. 基于角色的访问控制
  • 数据库用户分为三大类:

应用程序所有者:拥有数据库对象(表,行,列)并将其作为应用程序的一部分。
终端用户:不拥有任何数据库对象,但是可以通过应用程序操作数据库对象。
管理员:对数据库整体或部分负有管理职责的用户。

  • 一个应用程序和多种业务联系在一起,每个业务要求对数据库的一部分访问权,一个业务可以被指定一个或多个角色来指定其所需的访问权,应用程序所有者可以给终端用户分配角色,系统管理员负责更加敏感或更通用的角色,这些角色与管理数据库的物理和逻辑组件有关。
  • 数据库的RBAC机制应该提供以下能力:

创建和删除角色
定义角色的许可
分配和取消用户到角色之间的分配

  • SQL SERVER支持三种类型的角色:

固定服务器角色:
在这里插入图片描述
定义在服务器级,独立于任何用户数据库的存在,设计用来减轻工作量,使用这些固定角色给各种人员分配不同的管理任务,仅分配它们所需的最小权限。

固定数据库角色:
在这里插入图片描述
运行于单独的数据库级。

用户定义角色
标准角色:对于标准角色,被授权之后可以将角色分配给其他人。
应用程序角色:与应用程序关联而不与用户相关联,角色在应用程序执行代码的时候被激活,有权访问程序的用户可以使用应用程序角色访问数据库。


推理


  1. 攻击者利用非敏感数据及元数据,可以推导一些敏感数据,获得非授权信息的路径被称为推理通道。
  2. 两种推理技术
  • 分析一个表或多个表之间的函数依赖。

函数依赖:设一个关系为R(U),X和Y为属性集U上的子集,若对于X上的每个值都有Y上的一个唯一值与之对应,则称X和Y具有函数依赖关系,并称X 函数决定Y,或称Y函数依赖于X,记作X→Y,称X为决定因素。
简单地说,函数依赖就是:知道A可以确切的找到B,这样的函数叫做函数依赖。

  • 合并具有相同约束的视图
CREATE view Vl AS        					CREATE view V2 AS 
SELECT Position,Salary 					SELECT Name, Department 
FROM Employee 								FROM Employee 
WHERE Department =” strip”					WHERE Department =”strip ”
假设上面的两个视图,基于name和salary不能一起查看而创建,但是因为两者具有相同的约束  
Department =”strip ”,通过合并两个视图便可以得到name和salary的对应关系,从而产  
推理问题。
  1. 推理问题的对策
  • 数据库设计的推理检测

这种方法通过修改数据库的结构或改变访问控制机制等手段。

将一个表拆分成多个表除去数据依赖
在RBAC中使用更细粒度的访问控制角色

  • 查询时的推理检测

这种方法在一个查询或一系列查询执行期间消除推理通道,如果查询过程中发现了推理通道,则查询被拒绝或者修改。


统计数据库(SDB)


  1. 提供具有统计性质的数据,例如计数和平均值。统计数据库一般指下面两种:
  • 纯统计数据库

仅存储统计数据
访问控制:授权某个用户可以访问整个数据库。

  • 具有访问统计接口的普通数据库

包含单独的数据项,此外,数据库还支持一组仅被允许执行统计查询的统计用户。
统计数据可以有原始的数据产生的聚集统计数据在响应查询时产生或者预先计算好存储在数据库中。

  1. 统计数据的访问控制能力是为用户提供聚集信息但同时不应降低数据库中表示的任何单独实体的机密性。
    在这里插入图片描述
    在这里插入图片描述
  2. 统计数据通过特征式从数据库中推导出来,特征是C是属性集上的逻辑表达式,使用or(+),and(.),not(~)操作符,特征式的查询集用X(C)表示,是匹配该特征的记录集。
  • C=Female.CS, X(C)包括Allen和Davis两条记录。
  • 统计查询是产生查询集上计算值的查询。如:count(Female.CS)= 2
  1. 统计数据库的推理
  • 统计用户被限制只能从数据库中获得统计数据,而不能访问单独记录,这里的推理问题就是指攻击者可以推理出统计数据库中单独实体的信息,这种推理称为泄密。
  • 特征式C定义数据库记录的子集,C上的统计查询提供了选定子集上的统计数据,如果查询子集足够小,甚至只有一条数据,那么攻击者可以很容易的推理出单一实体或小组的特征。如果子集很大,数据的性质和结构也可以用这种方法推理,从而获得非授权信息。

第一种情况:
count (EE · Female)= 1
sum (EE · Female, GP) = 2.5
如果用户知道Baker是EE专业的唯一女生,这个查询便泄漏的EE的个人信息。
第二种情况:
例如,考虑一个人事数据库,可以从中查询出职工的工资总和。假设提问者知道以下信息:
具有学士学位的新系统分析员的工资范围是[50k-60k];
具有硕士学位的新系统分析员的工资范围是[60k-70k];
假设两名新系统分析员被添加到工资单,工资总和的变化是$130K 。因而,提问者知道这
两名新职工都具有硕士学位。

  1. 查询限制
    在这里插入图片描述
  • 拒绝导致泄密的查询,提供的应答是准确的。
  • 查询规模限制:对于一个记录为N的数据库,查询X(C)仅当匹配特征C的记录满足下面的要求时,查询才被允许。
k<= X(C)<=N-k  k>=1
  • 唯一标识:假设一个用户知道某个个体I满足给定的特征式C,且count(C)= 1,那么用户被C唯一标识。
  • 查询规模的限制可以防止简单攻击,但它对于一些复杂的攻击是很脆弱的。

攻击者可以将一个复杂的查询分为很多部分,以便这些部分能够完成查询而不违背查询规模的限制,这些部分的组合叫做追踪器。

假设特征C · D对应数据库中的0条或1条记录,因此该查询不被允许。但是攻击者可以将C拆解为C 1· C2,查询集C1和T(C1· ~C2)都满足查询规模,如果不知道I是否被C唯一表示,可以利用:
count(C) = count(C1)- count(T)( 5-2 )来判断。
我们可以用类似的方法判断D是否唯一标识I:
count(C · D)= count(T+C 1· D)- count (T)( 5-3 )
例如,在表5-3 中, Evans 被C= Male · Bio · 1979标识。假设公式(5-1 )中的k=3 。我们
可以使用 T = (Cl ·~C2) = Male · - (Bio · 1979)计算,其中 Cl ,C2都满足查询规模限制。根
据公式( 5-2 )和( 5-3 ),可以确定Evans被C唯一标识,以及他的SAT分数是否至少为600分:
count (Male · Bio · 1979) = count (Male) - count (Male ·~(Bio · 1979)) = 7-6 = I //生物学1979年的女生=所有女生-所有女生中非生物学1979年的女生
count (Male · Bio · 1979) · (SAT> 600)//生物学1979年的女生且分数大于600
= count (Male ·~(Bio · 1979) + (Male · (SAT> 600)))-count(Male ·~(Bio · 1979))
= 6-6 = 0

  • 查询重叠控制

前面的Male和Male ·~(Bio · 1979)的查询出现显著重叠,从而导致了查询规模限制出现问题,导致推理问题的产生。
查询集被允许仅当匹配查询集X ( C )的记录数对于已经回答这个用户的查询X(D)满足:
|X(C)∩ X(D)| <= r (r>0)
存在的问题:

对于几个用户合谋泄漏数据库信息不起作用
集合和其子集的信息不能同时发布,这在一定程度上限制了数据库的可用性
对于每个用户,配置文件必须保存更新。

划分:
将数据库的重叠控制进行到极端,从而根本不允许重叠查询。通过划分,数据库的记录被聚集成许多互斥组,用户仅能查询每个组整体的统计性质,不能查询组的子集,实现多个查询完全重叠或者0重叠。
划分规则:

每个组G有g=|G|条数据,其中g=0或g>=n且g为偶数,n为固定的整数参数
只能成对的在组中添加或删除元素。//防止攻击者通过观察数据库前后变化从而获得信息
查询集必须包括整个组,一个查询集可能是单个组或多个组。

如上例中按年龄和性别划分数据库,则需要将kline的记录删除,因为1981年的人会出现奇数。

  • 查询拒绝和信息泄漏

查询限制问题的普遍问题是查询拒绝可能给攻击者提供一些线索,使攻击者能够推理出隐含的信息。
例:假设数据库由实值项组成,并且查询仅当能使攻击者推理出一个值而拒绝查询。
假设攻击者提出查询sum(x1,x2,x3),并且数据库返回值15,此时攻击者提出查询max(x1,x2,x3),但是此时查询被拒绝。因此攻击这可以推理出x1=x2=x3=5。
对策:模拟审计
系统监视所有来自特定源的查询,根据根据迄今为止提出的所有查询决定是否拒绝新的查询,系统仅仅根据请求者已经得到的信息作出是否决绝查询的决定。上述例子的max查询会被拒绝,不论三个值是否相等。

  1. 扰动
  • 数据扰动

修改SDB中的数据以便不能根据产生的统计数据推理出单个记录的值,这种方法称为数据扰动。
两种方法:

数据交换:
在足够量的记录中交换属性值,以便不能从单个记录中推导出任何消息。
在这里插入图片描述
进行如图的性别交换,对于一个属性或者两个属性进行统计查询两个数据库结果相同,但是对于三个属性之间的统计查询则不相同。
产生一个扰动SDB:
用属性值估计的隐含概率分布函数生成一个修改的数据库。
对于每个敏感的或机密的属性,确定与其符合的概率分布函数及其参数。
对每个敏感属性,用分布函数生成数据序列
不改变原来数据的顺序进行替换,即用生成数据序列的最小值替换原来数据库的最小值。

  • 输出扰动技术

当进行统计查询时,系统对数据库提供的原始数据修改,然后再根据修改后的数据产生统计数据,以防止推理的产生。

  • 随机样本查询:
    用户发出一个统计查询q(C),其查询集为X(C)
    系统用抽样查询集替换X(C),抽样查询集是X(C)的子集
    然后返回抽样查询的统计查询
  • 在用户请求的统计查询结果q(C),以随机或系统的方式在一定范围内上下调整答案。

对于所有的扰动技术都存在精度的损失及潜在的偏差。如果差错太小,用户可以推理出与受保护值非常接近的值,如果差错太大,生成的统计结果可能无法使用。


数据库加密


  1. 数据库加密存在的问题:
  • 密钥管理:用户必须能够访问其被允许访问数据的密钥。
  • 不灵活:当数据库全部或部分被加密时,执行记录搜索变得更为困难。
  1. 数据的机密性直接解决方案- 加密整个数据库
  • 为了能够直接对加密的数据库进行处理,引入下面这种方法,涉及四种实体:
    在这里插入图片描述
  • 数据所有者:产生数据
  • 用户:对系统提出请求的人
  • 客户端:把用户的查询转换为在服务器中存储的加密数据查询
  • 服务端::接收来自数据所有者的加密数据并分发给客户的组织。服务器可以实
    际被数据所有者拥有,但更多情况下是被外部提供者拥有井维护的设施。

客户端按照下面顺序从数据库中检索记录

用户发布一条SQL查询,请求具有特定主键的一条或多条记录。
客户端的查询处理器加密主键,相应的修改SQL查询,并把查询传递给服务器

SELECT Ename,Eid , Ephone 
FROM Employee 
WHERE Did= 15 
假定使用加密密钥 ,部门号 15 的加密值为 E(k, 15) = 1000110111001110 。那么客户端的
查询处理器将上面的查询变换为:
SELECT Ename, Eid, Ephone 
FROM Employee 
WHERE Did= 1000110111001110

服务端处理主键被加密的查询,返回查询的结果
查询处理器解密数据并返回结果给用户。

缺点:缺乏灵活性,无法处理小于或大于某值的查询,因为加密后数据的顺序是乱的。

  1. 为了提供更好的灵活性-将数据库中表的每条记录按块加密
    在这里插入图片描述
  • 可将每行Ri看作一个连续的块Bi=(xi1||xi2…||xiM)。这样Ri中的每个属性值不管是文本类型还是数值类型都被看作比特序列,该行的所有属性值连接起来形成一个二进制块。将整行加密,表示为 E(k, Bi) = E (k, (xi1||xi2…||xiM))。为了支持数据检索,每个表都与属性索引关联。对部分属性或全部属性,创建索引值。
  • 实例

在这里插入图片描述

  • 假设职工ID (eid )的取值范围为[ I, 1000 )。我们将这些值划分为 个分块:[ I, 200 )、[201, 400 )、[401, 600 )、[601, 800 )和[ 801, 1000 ),然后分别指派索引值1,2,3,4和5 。对于文本字段,可以从属性值的首字母得出索引。例如,对于属性ename ,可以规定以A或B开头的值的索引为1 ,以C或D开头的值的索引为2 ,以此类推。
  • 第一列中的值表示每行的加密值,其实际值依赖于加密算法和加密密钥。其余列给出相应属性值的索引值。属性值与索引值之间的映射函数,存储在客户端和数据所有者处,而不存储在服务器端。
  • 例如,假设一个用户请求eid < 300 的所有职工的记录,查询处理器请求所有 (eid )<=2的记录,服务器返回这些记录。查询处理器解密返回的所有行,丢弃不匹配原始查询的记录(即大于300小于400的记录),将被请求的未加密数据返回给用户。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值