网络安全

位置:IT落伍者 >> 网络安全 >> 浏览文章

如何建立安全的MSSQL Server的启动账号


发布日期:2021年11月18日
 
如何建立安全的MSSQL Server的启动账号

SQL SERVER的安全问题一直是困扰DBA的一个难题作为开发者和用户希望自己的权限越大越好最好是sa而作为DBA希望所有的用户权限越小越好这总是一对矛盾一般来说我们会考虑采用WINDOWS验证模式建立安全的用户权限改变SQL SERVER TCP/IP的默认端口等安全措施但很多DBA还是忽略了SQL SERVER服务的启动账号这也是一个非常值得重点关注的问题特别是SQL SERVER提供了许多操作系统和注册表扩展存储过程比如xp_cmdshell xp_regdeletekey xp_regdeletevalue 等等

我们先来回顾一下SQL SERVER执行这些扩展存储过程的步骤SQL SERVER提供的扩展存储过程使你可以向TSQL一样调用一些动态链接库的内部函数逻辑而且这些扩展存储过程可以包括WIN和COM的大多数功能

当关系数据库引擎确定 TransactSQL语句引用扩展存储过程时

关系数据库引擎将扩展存储过程请求传递到开放式数据服务层

然后开放式数据服务将包含扩展存储过程函数的 DLL 装载到 SQL Server 地址空间(如果还没有装载)

开放式数据服务将请求传递到扩展存储过程

开放式数据服务将操作结果传递到数据库引擎

从上图中我们可以清楚的看到SQL Server 的数据库引擎通过扩展存储过程和Windows Resources进行交互而扩展存储过程可以完成处理操作系统任务的关键是要有一个自己的身份SID这个SID就来自SQL SERVER服务启动账号所以如果这个SQL SERVER服务启动账号是administrators组的用户我们就可以通过这些扩展存储过程做任意想做的事情删除系统信息破坏注册表等等如果我们限制SQL SERVER服务启动账号的权限这样即使黑客或怀有恶意的开发人员获得数据库的管理员权限也不会对操作系统造成很大的影响只要有数据库的备份我们可以非常方便的恢复数据库而不要重新安装系统所以为了更安全的保护我们的系统我们希望SQL SERVER服务启动账号的权限越低越好

作为系统的一个服务启动SQL SERVER 服务的用户账号也需要一些必要的权限下面我们就通过一个具体的实例来解释这些权限(本实例只针对成员服务器如果是DC和启动了活动目录Active Directory还需要其它的配置)

.通过本地用户管理建立一个本地用户sqlserver密码

.如果现在就我们打开SERVICES配置通过该用户启动系统会报错误

Source:Service Control Manager

Event ID:

Description:

The %service% service failed to start due to the following error:

The service did not start due to a logon failure

No Data will be available

这是因为作为一个普通用户是无法启动服务的我们需要给sqlserver用户分配必要的权限

SQL Server服务启动账号必须有个基本权限

数据库本地目录的读写权限

启动本地服务的权限

读取注册表的权限

.赋予sqlserver用户SQL目录的读写权限

因为我的SQL SERVER是安装在D盘所以我在权限管理中将D:\PROGRMAM FILE\Microsoft SQL Server\MSSQL读写权限赋予sqlserver用户

.分配sqlserver用户启动本地服务的权限

这个比较复杂我只举例作为成员服务器的情况

启动Local Security Setting MMC 管理单元

展开Local Policy然后单击User Rights Assignment

在右侧窗格中右键单击Log on as Service将用户添加到该策略然后单击OK

在右侧窗格中右键单击Log on as a batch job将用户添加到该策略然后单击OK

在右侧窗格中右键单击Locks pages in memory将用户添加到该策略然后单击OK

在右侧窗格中右键单击Act as part of the operating systme将用户添加到该策略然后单击OK

在右侧窗格中右键单击Bypass traverse checking将用户添加到该策略然后单击OK

在右侧窗格中右键单击Replace a process level token将用户添加到该策略然后单击OK

关闭Local Security Setting MMC 管理单元

如图

.重新启动系统用sqlserver用户登陆系统

.再重新启动系统已administrator用户登陆打开SERVICES管理工具配置用该用户启动SQL Server服务

这样我们就可以通过限制SQL SERVER用户的权限来控制SQL SERVER扩展存储过程的权限现在sqlserver用户只对D:\PROGRMAM FILE\Microsoft SQL Server\MSSQL目录有写的权限这样就降低了通过xp_cmdshell来删除系统文件的风险

通过收购来配置是比较繁琐的幸运的是SQL SERVER已经提供了这样的工具来配置启动启动账号你可以通过SQL SERVER的企业管理器配置入下图

这样SQL SERVER企业管理器会自动帮你配置好所有的必要条件包括目录的访问权限启动服务的权限访问注册表的权限等等所以我们正确的配置顺序是

.建立用户

.在SQL SERVER企业管理器中配置该用户启动

.在分配其它相应的权限(如果需要复制操作)

备注

通过SQL Server企业管理器增加的服务启动账号会在registry中增加很多信息即使你更换用户也不会删除所以在改变服务启动账号不要频繁更换这样会增大registry的容量同时要注意只有属于sysadmin角色的用户才可以配置SQL Server服务的启动账号

总结

构建一个安全高效的SQL SERVER是多方面的深入了解SQL Server的运行机制是基础我们不但要考虑数据库用户的安全也要考虑SQL SERVER服务的安全性

上一篇:帮你完全了解Oracle标签安全测试

下一篇:ASP中存在的安全问题