在现实的世界中,我们不可能为每一个可能的威胁做好准备,我们只能增强自身的防护,让恶意用户更难威胁到我们的安全。SQL Server也一样,我们必须遵循一些基本的原则来保证和提高服务器的安全级别,让恶意用户更难访问到数据。
下面是个人根据实践经验总结的一些原则:
1.物理安全
我们要尽量把服务器放置在物理安全性高的地方,至少具有防盗、防破坏、不可随意接近、不可随意实地访问等特点。(本人就曾遇到过客户把数据库服务器放置在普通员工办公桌上被盗的事情)
2.网络安全
最小化数据库服务器的可见度:不要在防火墙中将数据库服务端口对公网开放,只对必须的服务器开放数据库访问端口。
安装好SQL Server后,我们应该禁用或删除所有不使用的网络协议:在SQL Server配置管理器中,可以启用或禁用SQL Server使用的协议。
3.帐户安全
尽可能使用Windows身份验证:Windows和Kerberos身份验证本身都比SQL Server身份验证更加安全,但这需要整体的网络、系统以及应用程序设计架构的支持。
不要以sa帐户登录:尽量不使用sa帐户,并且要求用户必须使用他们自己的登录名,从而可以跟踪对应用户具体执行的操作。
对SQL Server服务使用最小特权帐户:应用最小特权原则,并使用正好满足服务需要的权限的帐户。(LocalSystem>Network Service>Local Service)
LocalSystem是预设的拥有本机所有权限的本地账户,这个账户跟通常的用户账户没有任何关联,也没有用户名和密码之类的凭证。当LocalSystem访问网络资源时,它是作为计算机的域账户使用的。
Network Service账户是预设的拥有本机部分权限的本地账户,它能够以计算机的名义访问网络资源。但是他没有Local System那么多的权限,以这个账户运行的服务会根据实际环境把访问凭据提交给远程的计算机。Network Service账户通常可以访问Network Service、Everyone组,还有认证用户有权限访问的资源。
Local Service账户是预设的拥有最小权限的本地账户,并在网络凭证中具有匿名的身份。Local Service账户通常可以访问Local Service、Everyone组还有认证用户有权限访问的资源。
对SQL Server登录名应用最小权限原则:应该只给予对应登录名所需的最小权限,刚好满足应用需要即可。不同的应用,应该使用不同的登录名进行访问。
SQL Server登录名必须使用强密码:我们应当利用密码策略,要求用户创建复杂密码,并且尽量做到定期更改。
定期审核服务器帐户和SQL Server登录名:作为管理员,必须清楚知道哪些帐户和登录名是自己创建的,分别做什么用途,由谁负责这些帐户和登录名;必须按照步骤禁用和删除多余的帐户和登录名
4.数据安全
使用TDE保护休眠中的数据:加密数据库和事务日志文件可降低他人复制数据文件并卷走敏感的商业数据的可能性。
使用在线加密保护传输中的数据:只保密服务器上的数据是不够的,应使用诸如SSL和IPSec等技术在数据从客户端向服务器、从服务器向客户端或从服务器向服务器移动时保护他们。
不要对经常被搜索的列进行加密:加密经常被访问或搜索的列导致的问题可能比它解决的问题还要多。
以上仅是一些基本的原则,在实际的工作中,我们面临的应用和系统是非常复杂的,也是各不相同的,还是需要根据实际情况进行针对性的处理。