快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

建立安全的MSSQL SERVER启动账号

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

我们先往返顾一下MSSQL SERVER执行这些扩展存储过程的步骤。MS SQL SERVER提供的扩展存储过程使你可以向T-SQL相同调用一些动态链接库的内部函数逻辑,而且这些扩展存储过程可以包括WIN32和COM的大多数功能。
当关系数据库引擎确定 Transact-SQL 语句引用扩展存储过程时:
关系数据库引擎将扩展存储过程哀求传递到开放式数据服务层。
然后开放式数据服务将包含扩展存储过程函数的 DLL 装载到 SQL Server 2000 地址空间(假如还没有装载)。
开放式数据服务将哀求传递到扩展存储过程。
开放式数据服务将操作结果传递到数据库引擎。
从上图中我们可以清晰的看到SQL Server 2000的数据库引擎通过扩展存储过程和Windows Resources进行交互。而扩展存储过程可以完成处理操作系统任务的要害是要有一个自己的身份SID,这个SID就来自MSSQL SERVER服务启动账号。所以假如这个 MSSQL SERVER服务启动账号是administrators组的用户,我们就可以通过这些扩展存储过程做任意想做的事情:删除系统信息,破坏注册表等等。假如我们限制MSSQL SERVER服务启动账号的权限,这样即使“黑客”或怀有恶意的开发人员获得数据库的治理员权限,也不会对操作系统造成很大的影响。只要有数据库的备份我们可以异常方便的恢复数据库,而不要重新安装系统。所以为了更安全的保护我们的系统,我们希望 MSSQL SERVER服务启动账号的权限越低越好。
作为系统的一个服务,启动MSSQL SERVER 2000服务的用户账号也需要一些必要的权限,下面我们就通过一个详细的实例来解释这些权限(本实例只针对成员服务器,假如是DC和启动了活动目录Active Directory还需要其它的配置):
1. 通过本地用户治理,建立一个本地用户sqlserver,密码:123456;
2. 假如现在就我们打开SERVICES配置通过该用户启动,系统会报错误:
Source:Service Control Manager
Event ID:7000
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服务启动账号必须有3个基本权限:
l 数据库本地目录的读写权限;
l 启动本地服务的权限;
l 读取注册表的权限;

3. 赋予sqlserver用户MSSQL目录的读写权限;
因为我的SQL SERVER是安装在D盘,所以我在权限治理中,将D:PROGRMAM FILEMicrosoft SQL ServerMSSQL读写权限赋予sqlserver用户。
4. 分配sqlserver用户启动本地服务的权限;
这个比较复杂,我只举例作为成员服务器的情况。
l 启动“Local Security Setting” MMC 治理单元。
l 展开Local Policy,然后单击User Rights Assignment。
l 在右侧窗格中,右键单击Log on as Service,将用户添加到该策略,然后单击OK。
l 在右侧窗格中,右键单击Log on as a batch job,将用户添加到该策略,然后单击OK
l 在右侧窗格中,右键单击Locks pages in memory,将用户添加到该策略,然后单击OK
l 在右侧窗格中,右键单击Act as part of the operating systme,将用户添加到该策略,然后单击OK
l 在右侧窗格中,右键单击Bypass traverse checking,将用户添加到该策略,然后单击OK
l 在右侧窗格中,右键单击Replace a process level token,将用户添加到该策略,然后单击OK
l 关闭“Local Security Setting” MMC 治理单元。
如图:
5. 重新启动系统,用sqlserver用户登陆系统;
6. 再重新启动系统,已administrator用户登陆,打开SERVICES治理工具,配置用该用户启动MSSQLSERVER服务;


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

通过收购来配置是比较繁琐的,幸运的是MS SQLSERVER已经提供了这样的工具来配置启动启动账号,你可以通过SQLSERVER的企业治理器配置,入下图:
这样SQL SERVER企业治理器会自动帮你配置好所有的必要条件。包括目录的访问权限,启动服务的权限,访问注册表的权限等等。所以我们准确的配置顺序是:
1. 建立用户;
2. 在SQL SERVER企业治理器中配置该用户启动;
3. 在分配其它相应的权限(假如需要复制操作);
备注:
通过SQL Server企业治理器增加的服务启动账号,会在registry中增加很多信息,即使你更换用户也不会删除,所以在改变服务启动账号不要频繁更换,这样会增大registry的容量。同时要注重,只有属于sysadmin角色的用户才可以配置SQL Server服务的启动账号。
总结:
构建一个安全高效的SQLSERVER是多方面的,深入了解SQLSERVER的运行机制是基础。我们不但要考虑数据库用户的安全,也要考虑SQLSERVER服务的安全性。
返回类别: 教程
上一教程: SQL语言迅速入门(一)
下一教程: 分布式查询和分布式事务

您可以阅读与"建立安全的MSSQL SERVER启动账号"相关的教程:
· 建立安全的MSSQL SERVER启动账号
· 使用SQL Server 7.0建立一个安全的数据库的最好方式是
· 小议MSSQL Server 2000的安全及治理
· 编写安全的SQL SERVER扩展存储过程
· 启动SQL SERVER时自动执行存储过程
    微笑服务 优质保证 索取样品