当前位置:首页 > 问答 > 正文

SQL Server里那些安全措施,怎么弄才靠谱又不麻烦的办法

关于SQL Server的安全措施,要做得既靠谱又不麻烦,关键在于抓住重点,避免面面俱到却流于形式,下面这些办法是很多有经验的数据库管理员在实际工作中总结出来的,核心思想是“最小权限”和“简化管理”。

第一,账号和密码是第一道门,这道门必须结实。

来源自微软官方最佳实践和常见安全配置指南:绝对不要使用默认的或者过于简单的sa(系统管理员)账号,在安装SQL Server时,如果选择了混合身份验证模式,第一步就是为sa账号设置一个极其复杂的密码,长密码、包含大小写字母、数字和特殊符号,并且把它记录下来放在安全的地方,更好的做法是,直接禁用sa账号,因为sa账号是黑客攻击的首要目标,禁用它可以减少一个巨大的风险点。

来源自实际运维经验:对于需要登录数据库的人,不要让他们直接用sa,也不要轻易给任何人系统管理员权限,应该为每一个需要访问数据库的人或应用程序创建独立的账号,给网站程序创建一个账号,给数据分析师创建另一个账号,这样做的目的是,万一某个账号的密码泄露了,黑客也只能在这个账号的权限范围内搞破坏,不会一下子摧毁整个数据库服务器。

第二,权限要给得“刚刚好”,不能多也不能少。

SQL Server里那些安全措施,怎么弄才靠谱又不麻烦的办法

这是“最小权限原则”的直接体现,那个网站程序的账号,它可能只需要对某几个特定的表有读取和插入数据的权限,那么就不要给它删除数据或者修改表结构的权限,数据分析师的账号可能只需要有读取数据的权限,绝对不能给他修改或删除数据的权限。

来源自大量数据泄露事件的教训:在SQL Server里,可以通过“角色”来批量管理权限,这比一个一个设置要省事得多,SQL Server自带了很多预定义的角色,比如db_datareader角色可以读取所有数据,db_datawriter可以插入、更新、删除数据,你可以直接把用户添加到这些角色里,但更精细的做法是,自己创建“用户自定义数据库角色”,然后给这个角色分配非常具体的权限(比如只允许访问某个视图),再把用户加进去,这样管理起来不麻烦,权限控制又很精准。

第三,开启防火墙,不要让数据库大门直接朝外开。

来源自网络安全基本原则:你的SQL Server应该只被需要的应用程序服务器访问,比如Web服务器,绝对不应该让数据库服务器的端口(默认是1433)直接暴露在互联网上,必须在服务器的操作系统防火墙和网络边界防火墙上设置规则,只允许特定的、可信的IP地址来连接SQL Server的端口,这一步非常简单,但极其有效,能挡掉绝大部分来自互联网的自动扫描和攻击。

SQL Server里那些安全措施,怎么弄才靠谱又不麻烦的办法

第四,定期打补丁,但要有策略。

来源自系统维护常识:微软会定期发布SQL Server的安全补丁,修复已知的漏洞,保持更新很重要,但直接在生产环境上安装最新补丁可能会有风险,不麻烦的做法是:建立一个简单的流程,在一个和 production环境类似的测试环境里先安装补丁,测试应用程序是否正常工作,测试通过后,再规划一个业务低峰期(比如深夜),对生产服务器进行更新,这样既保证了安全,又避免了更新带来的意外故障。

第五,开启日志记录,知道“谁”在“什么时候”干了“什么”。

来源自审计和故障排查需求:SQL Server有自带的日志功能,但默认可能不会记录所有登录信息,你可以通过“SQL Server Management Studio”轻松设置,让数据库记录成功的登录和失败的登录尝试,记录失败登录尤其重要,如果短时间内发现某个IP地址有成千上万次失败的登录尝试,那很可能就是有人在暴力破解你的密码,及时发现这种异常,就可以提前采取措施,比如在防火墙上封掉这个IP。

SQL Server里那些安全措施,怎么弄才靠谱又不麻烦的办法

对于更重要的操作,比如谁修改了核心数据、谁删除了表,可以使用SQL Server的“审核”功能,一开始不需要审核所有动作,那样日志量太大,反而成了麻烦,可以先针对最重要的几个表和操作(如DELETE, UPDATE)设置审核,这样一旦出问题,你有据可7迹可循。

第六,加密敏感数据,给数据上把“锁”。

来源自数据保密性要求:如果数据库里存了像密码、身份证号、信用卡号这样的敏感信息,不能明晃晃地放着,SQL Server提供了透明的数据加密功能,可以对整个数据库的数据文件和日志文件进行加密,即使有人偷走了你的硬盘,他也无法读取里面的数据,这个功能配置起来并不复杂,在数据库属性里就能开启,管理开销很小,但对保护核心数据非常靠谱。

对于密码,不应该存储明文密码,应用程序应该在将密码存入数据库前,就进行哈希加密和“加盐”处理,这样即使是数据库管理员也看不到用户的真实密码,万一数据泄露,黑客得到的也是一堆无法直接使用的加密字符。

最靠谱又不麻烦的办法,其实就是养成好的习惯,核心就是四件事:管好账号和密码(禁用sa、独立账号);2. 给准权限(最小权限原则);3. 关好网络大门(防火墙);4. 保持基本警惕(更7新、日志),先把这几项基础工作做扎实,就能解决大部分的安全风险,之后根据数据的重要程度,再逐步考虑启用审核和数据加密等更高级的功能,安全不是一个一次性的动作,而是一个持续的过程,但这些方法能让你以一个相对轻松的代价,获得很高的安全回报。