对于admin用户启用的xp_cmdshell,访问被拒绝

时间:2012-05-30 18:53:10

标签: sql-server windows sql-server-2008 permissions xp-cmdshell

我在数据库触发器中使用xp_cmdshell来启动exe文件。

启用了xp_cmdshell(它可以执行简单的cmd命令,如'echo')。但是当我尝试通过xp_cmdshell启动exe时,访问被拒绝。

我是数据库管理员。我可以直接通过cmd启动exe。任何人都知道为什么我会被拒绝以及如何解决它?

7 个答案:

答案 0 :(得分:9)

使用xp_cmdshell运行“whoami”,然后在exe及其访问的任何资源上检查所述用户的有效权限。 可能的情况是像localsystem这样的帐户被用来通过xp_cmdshell来运行进程。

EXEC xp_cmdshell 'whoami'

答案 1 :(得分:8)

可能NTFS权限不足。确保运行SQL Server的“用户帐户”具有对* .EXE(以及任何相关文件)的权限(读取+执行)

答案 2 :(得分:0)

不确定,但我相信触发器是由运行“触发”触发器的SQL命令的用户运行的。

用户发出SQL命令是Windows用户还是SQL用户?如果是SQL用户,则需要设置“SQL代理”。 SQL代理用于告诉SQL将使用哪个Windows用户来访问文件系统。

希望这有帮助,

伊夫

答案 3 :(得分:0)

我在尝试运行BCP然后COPY时收到了拒绝访问权。

我发现xp_cmdshell在c:\ windows \ system32

中启动

我修改了我的CMD文件以更改为我的工作文件夹

L: cd L:\ myworkingfolder

这解决了我的问题,事件虽然我的sqlagent是本地管理员,但我已经完全修改了我的复制命令。

答案 4 :(得分:0)

该做出贡献了。我是sysadmin角色,致力于让两个公共访问用户执行xp_cmdshell。我可以执行xp_cmdshell,但不能执行两个用户。

我执行了以下步骤:

  1. 创建新角色:

    使用母版 创建角色[CmdShell_Executor]授权[dbo] 将xp_cmdshell授予[CmdShell_Executor]

  2. 在主数据库中添加用户:安全->用户。成员资格仅检查刚刚创建的[CmdShell_Executor]

  3. 设置代理帐户:

    EXEC sp_xp_cmdshell_proxy_account'domain \ user1','users1 Windows password' EXEC sp_xp_cmdshell_proxy_account'domain \ user2','users2 Windows密码'

然后,两个用户都可以执行包含xp_cmdshell的存储过程,并调用R脚本运行。我让用户输入密码,执行一行代码,然后删除密码。全部在我的电脑上。

答案 5 :(得分:0)

如果您没有正确指定可执行文件的路径,您也可以获得=SEARCH($AL$4,INDIRECT("[@"&$AL$5&"]")) 。请注意,如果路径中包含空格,则需要将可执行文件用双引号引起来:

Access is denied.

答案 6 :(得分:0)

我遇到了同样的问题,我是这样解决的:

  1. 打开 SQL Server 配置管理器
  2. 选择您的实例并右键单击 -> 属性
  3. 选择登录标签
  4. 并选择授权帐户