浅析数据库安全技术
一、数据库安全问题
数据库安全问题分为两类: (1) 信息运输中的问题:偷看、假冒、篡改和抵赖; (2) 数据库内部的问题:非法数据访问(读取非允许的数据、改/删/加非允许的数据)
二、信息传输过程中的安全管理 运输过程中,最行之有效的技术就是密码技术。 如下图所示:
一般使用非对称加密技术。用私钥(SK)加密的内容只能用公钥(PK)解密.
1、非对称加密技术的介绍 1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥 2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。 3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。 4.A将这个消息发给B(已经用B的公钥加密消息)。 5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
2、非对称加密技术的使用 (n,d)(n,d) 构成公钥 PKPK ,可以告诉别人; (n,e)(n,e) 构成私钥 SKSK,不让任何人知道。(私钥具有唯一性)
数字签名:给别人发送的消息时,使用SKSK加密签名,别人用PKPK 解密得到签名就可以证明信息是由你发送的。
3、RSA-一种常用的非对称加密算法 关于RSA算法的介绍请参见:RSA算法
下面给出RSA秘钥生成的一个例子: 例子来自于:RSA算法原理(二)
第一步,随机选择两个不相等的质数p和q。
爱丽丝选择了61和53。(实际应用中,这两个质数越大,就越难破解。)
第二步,计算p和q的乘积n。
爱丽丝就把61和53相乘。
n = 61×53 = 3233
n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。
第三步,计算n的欧拉函数φ(n)。
根据公式:
φ(n) = (p-1)(q-1)
爱丽丝算出φ(3233)等于60×52,即3120。
第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。
爱丽丝就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。)
第五步,计算e对于φ(n)的模反元素d。
所谓”模反元素”就是指有一个整数d,可以使得ed被φ(n)除的余数为1。
ed ≡ 1 (mod φ(n))
这个式子等价于
ed - 1 = kφ(n)
于是,找到模反元素d,实质上就是对下面这个二元一次方程求解。
ex + φ(n)y = 1
已知 e=17, φ(n)=3120,
17x + 3120y = 1
这个方程可以用”扩展欧几里得算法”求解,此处省略具体过程。总之,爱丽丝算出一组整数解为 (x,y)=(2753,-15),即 d=2753。
至此所有计算完成。
第六步,将n和e封装成公钥,n和d封装成私钥。
在爱丽丝的例子中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。
4、非对称加密算法的优点 对于一个大数nn ,已知公钥PK(n,d)PK(n,d) ,但无法获得私钥 SK(n,e)SK(n,e).
三、加密技术是否解决了传输过程中的问题 1、偷看问题 用户发送的数据操作请求数据包用私钥加密,只有持有公钥的数据库管理系统才能解密。反过来也是,数据库管理系统发送给用户的信息,用该用户的公钥加密,只有持有该用户的私钥才能解密,于是解决了偷看问题。 2、篡改问题 使用某用户的共有秘钥加密,不能用公有秘钥解密。所以,即使公有秘钥被泄露,不法分子虽然能够解密用户发送给数据库的数据包,但是却无法修改。 3、假冒问题 解决假冒问题是使用验证码。用户每次访问数据库,都是先请求数据库给定一个验证码,然后用户将请求数据包和验证码打包一起发送给数据库,数据库收到请求后,先解析出验证码,在自己的有效验证码表检查是否存在该验证码,如果有,则认定该请求合法,处理该请求,然后从有效验证码表中删除该验证码。当再次受到该请求时,由于验证码已失效,所以就无法处理该请求。 4、抵赖问题 私钥加密的数据,仅有持有该公钥才能解密。 私钥和公钥是一一对应的 (个人认为,有待查证),因此,公钥能解密的数据,一定是该用户发出的。
四、数据库内部的安全管理
1、联接控制 只允许授权的用户与数据库建立联接,访问数据库
2、数据库访问权限控制 只允许用户访问已被授权的数据。
3、SQL授权的例子
(1) 对于 “部门表dept” ,将“查询”权限授予给 “所有用户”
GRANT SELECT ON dept to PUBLIC;
(2) 对于“员工表Emp” 的工资字段salary,将其“查询和修改”权限仅仅授给角色 “经理”或者“主任”
GRANT SELECT,UPDATE(salary) ON Emp to manager,director;
(3) 对于“项目表proj” ,将其“全部权限”授给角色“主任”,并允许主任对其拥有进一步授权给其他人权限
GRANT ALL PRIVILEGES ON proj to director wiht GRANT OPTION;
4、收回权限操作的SQL
(1) 禁止“所有用户” 对“部门表dept” 执行“查询“ 操作
REVOKE SELECT ON dept FROM PUBLIC; 1
(2) 对“员工表Emp” ,收回”用户Joe“ 的 ”任何访问权限“
REVOKE ALL PRIVILEGES ON Emp FROM Joe;
5、数据库访问的审计 对用户访问数据库的过程进行跟踪记录,一旦发生了安全问题,便可追踪溯源,破案.
6、用视图增强权限控制 对于普通员工解决”staff“ ,就员工表Emp,可以对birthdate 和 salary 两个字段之外的所有字段拥有查询权限,如何实现?
(1)创建视图
CREATE VIEW EmpView AS
SELECT eno,ename,title,dno FROM Emp;
(2) 对于视图 EmpView ,将出现权限授给角色 ”staff“
GRANT SELECT ON EmpView to staff;
(3) 在必要的时候,收回staff的访问权限
REVOKE SELECT ON EmpView FROM staff;