本文属于SQL Server安全专题系列
- 确保非授权用户不能非法进入系统环境。
- 只安装所需的软件组件。
- 最小化访问SQL Server的用户,强烈建议借助操作系统使用Windows身份验证或者SQL On Linux的集成身份验证来访问。
- 哪怕是DBA,也应该仅在需要时采用sysadmin登录,更安全的方式是使用Windows身份验证登录。
- SA帐号如果启用,应该设置强密码。但是依旧建议使用Windows身份验证。
- 使用存储过程或者视图替代直接访问底层表。
- 优先使用Windows身份验证。
- 强密码校验。可以考虑使用本人发布的代码:AccountInfos
- 不授予public用户任何权限。
- 移除已经不需要的帐号,最起码禁用。
- 除非没有办法,否则不要开启跨数据库所有权链接(cross database ownership chaining)
- 不授予非sysadmin角色的帐号有用执行xp_cmdshell权限。
- 生产环境中移除所有非生产库。
- 尽量不要在SQL Server服务器上创建网络共享。
- 创建足够、必要的审核功能。
- 不同的SQL Server服务使用不同的Windows域账号。
- 使用合适的帐号作为SQL引擎帐号,绝大部分情况下,本地管理员权限过高,而域管理员是不会用到的。
- 不要让SQL服务器暴露在外网,也不要让用户可以直连。
- 加密备份文件。
- 客户端与SQLServer直接尽量使用SSL或IPSEC加密。
- 考虑开机核心系统的TDE加密。
- 关闭不需要的功能。
除此之外,还可以把工作分为每日和每周检查:
每日检查:
- 备份情况:再次提醒,备份不仅仅是灾备概念。
- 夜间维护作业:不仅是SQL 层,还有Windows层和应用层,这些晚上作业很多时候都可能带来安全或性能风险。
- SQL Server ErrorLog:可以考虑本人共享的脚本:ReadErrorlogs
- SQL Server作业运行情况:同2
每周或每月检查:
- 备份有效性检查
- OS/SQL最新补丁
- 服务器容量检查:不够空间安全性也无从说起。
- 无效/过期帐号清理。
需要考虑之后再决定是否开启的功能:
这个内容说简单也简单,说复杂也复杂,我们可以直接从下面语句中得到系统默认非高级功能的功能,一般情况下,这些功能都需要经过考虑再决定是否启用:
select * from sys.configurations where is_advanced=1
建议读者如果没有充分了解这些功能之前,先不要启用。或者由专职DBA来负责。