代码改变世界

解决数据库作业访问链接服务器问题

2011-09-06 09:41  JentleWang  阅读(1166)  评论(0编辑  收藏  举报

需求

需要建立一个作业,从本地数据库及远程数据库中获取数据,处理数据得到简单的汇总报表。远程数据库访问通过建立链接服务器实现。

问题

本地执行作业步骤中的T-SQL语句没有问题,但执行作业时,报错,如下图

原因

查看作业历史记录,发现报错信息如下:


其中关键的信息是已以用户NT AUTHORITY\NETWORK SERVICE 的身份执行
一开始我混淆了作业所有者和作业步骤运行者,以为该作业所有者为登录sa那么作业步骤的运行者就是sa。后来知晓,作业步骤是在SQL Server代理服务中运行的,代理服务的登录身份包括内置账户和本地账户两种,与SQL Server的登录名不尽相同。
打开SQL Server配置管理器,可以看到目前系统中SQL Server代理服务的登录身份是NT AUTHORITY\NETWORK SERVICE,这也就是为什么错误信息中提示以用户NT AUTHORITY\NETWORK SERVICE的身份运行。


选中代理服务右键,可以修改登录身份:

解决方法

由错误信息可以得知NT AUTHORITY\NETWORK SERVICE 不能通过远程链接服务器的身份验证,原因就是没有建立登录映射,在链接服务器安全性配置中新建该用户的登录映射即可。
再次运行作业,可以看到运行成功!

备注

由于本人水平有限,上文陈述可能有不妥之处,请指正
以下为SQL Server 联机丛书对代理安全性的建议

  1. 遵循下列指导原则可以提高SQL Server 代理实现的安全性:
    1. 专门为代理创建专用的用户帐户,并且只使用这些代理用户帐户来运行作业步骤。
    2. 只为代理用户帐户授予必需的权限。只授予运行分配给给定代理帐户的作业步骤实际所需的那些权限。
    3. 不要作为Windows Administrators 组成员的Microsoft Windows 帐户运行SQL Server 代理服务。
  2. 由于可以有多个服务使用网络服务帐户,因此很难控制哪些服务具有对网络资源(包括SQL Server 数据库)的访问权限。建议不要对SQL Server 代理服务使用网络服务帐户。