• 浅析数据库安全技术


    一、数据库安全问题

    数据库安全问题分为两类: (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;

  • 相关阅读:
    [Wap] 制作自定义WmlListAdapter来实现Mobile.List控件的各种效果
    [EntLib]UAB(Updater Application Block)下载
    jarhoo是一个很棒的地方
    [GoogleMap]利用GoogleMap地图的这个应用真是太狠了[1]
    [J2ME] VideoCoolala(MobileWebCam)开源说明
    [p2p]手机是否可以通过JXTA网络与PC机/PocketPC/WindowsMobile实现P2P呢?
    Android Layout XML属性
    什么是9.png
    android主流UI布局
    Android开发之旅: Intents和Intent Filters(理论部分)
  • 原文地址:https://www.cnblogs.com/sunbeidan/p/11712519.html
Copyright © 2020-2023  润新知