有关数据库连接安全性的考虑

来源:互联网 发布:mysql求和语句 编辑:程序博客网 时间:2024/05/16 00:34

 最近客户在安装某款国内著名ERP管理软件时,我在现场指导过程发现了一个有意思的问题,虽然该软件是由具有数十年经验,并占有财务软件绝对市场控制权的企业开发的,但是从其安装过程看,还是有很多漏洞的。

  其系统安装时需要MS SQLSERVER的SA帐号进行配置,厂商的安装人员想都没想就配置了个空SA密码,经提醒后倒是设了个密码,不过设置完后发现已经在客户端安装的软件都没法用了,又无奈改回了空SA密码...

 

  从其安装过程看,作为C/S架构的软件,其最起码有如下问题:

  1. 这种现象说明其在安装过程中没有创建数据库专用管理账户,而是使用了数据库服务器的最高管理员账户。如果数据库服务器存在多个软件系统的数据库,只要破解了连接帐号,就可以通吃了。

  2. 该软件客户端的数据库连接字符串应该时记录在客户端的,早期的版本据说配置文件连加密都没做,直接将sa密码敞开口供应。此种做法一方面不安全,另一方面一旦DB管理员修改了SA密码,所有客户机都将无法连接。

 

  其实,改变这种问题的方法很简单,开发难度也不大,只要做好两件事即可:

  1. 安装过程中的数据库配置处理

   服务器端安装过程中,很容易做到仅使用一次数据库服务器管理员密码,创建号数据库后,自动为数据库设置专用的操作账户,并自动生成账户密码,记录在配置文件中,这样做就可以由软件系统负责数据库连接帐号的安全管理(为了提高安全性,所创建的帐号应禁用帐号的登录功能)。

 

  2. 客户端的数据库连接字符串获取处理

    C/S模式的SQL数据库连接必须配置数据库连接字符串,而该字符串包含了数据库名,帐号及密码,目前的做法主要有如下几种:

   1)直接明码的方式写入客户端配置文件中,安全性就不说它了。

   2)使用SSPI集成认证方式,但对于此方式,客户端自动就具有数据库的操作权,可以在不使用软件情况下直接对数据库操作。因此是不安全的。

   3)使用加密的配置文件,虽然具有一定的安全性,但一旦数据库密码发生改变,所有客户端仍然不能登录。

  

   由于以上三种做法都存在问题,因此我们的做法如下:

   - 数据库连接字符串的配置文件只存在于服务器中,而不存在于客户端中。

   - 服务器开辟专用的认证端口用于接收客户机的认证请求,端口通信可以配置诸多加密手段保护。

   - 客户端通过认证后,服务器使用加密通道将数据库连接字符串发送给客户端

   - 客户端的数据库连接字符串保存在内存中,而不是在配置文件中,可以保证一定程度的安全。

   - 一旦发现密码泄露,只需要调整服务器端配置文件即可,不用改变客户机的配置。

 

  可见,采用端口通信的方式设置客户端的数据库连接字符串更加安全,也更易于管理。

 

 

   当然,要想进一步提高数据库的安全性,防止通过内存分析的方式获取连接字符串,还可以设置动态连接的方式处理,比如服务器控制每个连接使用不同的帐号,并根据需求动态的改变帐号密码。

原创粉丝点击