当执行作为无 SA 用户错误 1314年引发按 xp_cmdshell PRB:

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 248391
本文已归档。它按“原样”提供,并且不再更新。
症状
执行 xp_cmdshell 登录到作为 non-sa 帐户 SQL Server 时通过一个操作系统作业时,您会收到以下错误:
消息 50001,级别 1,状态 50001
xpsql.c: 错误 1314年从 LogonUser 行 476
交替,您可能会收到以下内容:
消息 50001,级别 1,状态 50001
xpsql.c: 从上一行 492 CreateProcessAsUser 错误 1314年
原因
由于您 MSSQLServer 上运行的 SQLAgentCmdExec Windows NT 帐户上设置的错误权限,这些错误会引发。
替代方法
请确保 MSSQLServer 服务上运行的 Windows NT 帐户是域帐户是在服务器上本地管理员组的成员。

请确保 MSSQLServer 服务以及 SQLServerAgent 上,运行的帐户有以下的用户权限:
  • 充当操作系统的一部分。
  • 增加配额。
  • 替换进程级令牌。
  • 作为批处理作业登录。
同时,请确保本地 SQLAgentCmdExec 帐户具有"作为批处理作业登录"权限。

注意: 您必须重新启动整个的服务器而不只是 SQL 服务、 按顺序对所做的任何更改的用户权限才能生效的权限。
更多信息
Xpsql.c 包括在随产品一起提供的示例代码中。如果在行 476 错误获取引发 Win32 API 函数调用: LogonUser() 失败。CreateProcessAsUser() 调用失败时,获取引发上 492 错误。

错误 1314年是 ERROR_PRIVILEGE_NOT_HELD。这表明在调用这些函数的帐户没有足够的用户权限才能完成该登录名。这将导致重置 SQLAgentCmdExec 帐户上的帐户权限,或通过用户管理器或 SQL 企业管理器中重新创建它的许多客户。

但是,什么引发这些错误是调用 API 调用 (Sqlservr.exe) 的过程。因此,它是 MSSQLServer 服务运行包含不正确,并没有足够的权限,该帐户。若要成功执行 LogonUser(),MSSQLServer 帐户需要有右启用 SE_TCB_NAME (作为操作系统的一部分)。若要成功执行 CreateProcessAsUser(),MSSQLServer 帐户需要具有启用 SE_INCREASE_QUOTA_NAME (增加配额) 权限。

: 某些过程类型的 CreateProcessAsUser() 可能也需要 SE_ASSIGNPRIMARYTOKEN_NAME 打开的 (替换进程级令牌) 上。

警告:本文已自动翻译

属性

文章 ID:248391 - 上次审阅时间:12/05/2015 17:52:59 - 修订版本: 3.1

Microsoft SQL Server 6.5 标准版, Microsoft SQL Server 7.0 标准版

  • kbnosurvey kbarchive kbmt kbbug kbprb KB248391 KbMtzh
反馈