赞
踩
一、背景
作为一个DBA,或许你有很多的系统需要管理,而且不同的系统使用了不同的数据库,通常的情况下,我们都是通过sa进行设置密码的,而且在config文件里面明文的写上我们的帐号和密码,这样的设计我们是否太大方了呢?
或许你会说,我们的数据库是安全的,因为我们的数据库是只有内网可以访问的,但是那台机器的安全性呢?因为能进入操作系统就能看到我们的帐号密码了。再加上有些时候我们不希望客户能看到数据库密码的。那么应该如何保证我们的数据库账号密码的安全性呢?
二、架构设计
针对上面的安全性问题,我设计了下面的方案,主要是运用加密算法进行加密,再通过分离一些职责,设置几道关卡,加强数据的安全性。
下面是这个方案的总体架构图:
(架构图)
三、架构解析说明
1. 程序1,程序2表示我们的应用程序,在程序的config中再也没有明文的数据库帐号和密码的了,它调用一个公用的webservice,只需要传入一个唯一的key值(有DBA发布这个key值),获取数据库IP、帐号、密码;
2. 网页接口调用程序是我们提供的一个webservice,它使用只读帐号视图,查询key值所对应加密后的数据库IP、帐号、密码;如下图所示:
[LinkName] 表示key值;
[En_LinkIP]表示程序需要链接的数据库IP地址;
[En_LinkSa]表示数据库使用的帐号;
[En_LinkPassword]表示数据库帐号所对应的密码;
(只读账号视图)
3. 把上图获取到的数据返回给网页接口调用程序,把这些值以|符号进行串联成一个字符串,再进行二次加密(使用不同的加密算法);再把加密后的字符串返回给程序1、程序2;
4. 当程序拿到这些加密后的字符串后,使用我们发布的DLL进行解密,这里的解密包括两个解密算法,把解密后的值返回给程序;
5. 那这些记录是怎么录入的呢?你猜对了,那就是DBA,DBA收集这些帐号和密码进行管理,只要开发人员告知数据库的相关信息(或许根本就不需要,因为部署是DBA的事情,或许开发人员根本就不需要知道这个数据库在哪里),我就使用单机机密程序,加密我们的数据库IP、帐号、密码,并生成唯一的key值,把这个key告诉开发人员。
把加密后的数据插入到数据库;超级管理员视图如下图所示:
(超级管理员视图)
四、特别说明
1. 就安全性考虑,LinkIP的值尽量能使用端口进行设置,修改默认的1433端口;
2. 虽然在程序中可以获取到明文的帐号密码,但是这比明文写在config上要安全很多倍了;
3. 对字符串进行二次加密是为了防止数据的拦截的;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。