我在数据库触发器中使用 xp_cmdshell 来启动 exe 文件。
xp_cmdshell 已启用(它可以执行简单的 cmd 命令,例如“echo”)。但是当我尝试通过 xp_cmdshell 启动 exe 时,访问被拒绝。
我是数据库管理员。我可以直接通过cmd启动exe。有人知道我为什么被拒绝以及如何解决吗?
我在数据库触发器中使用 xp_cmdshell 来启动 exe 文件。
xp_cmdshell 已启用(它可以执行简单的 cmd 命令,例如“echo”)。但是当我尝试通过 xp_cmdshell 启动 exe 时,访问被拒绝。
我是数据库管理员。我可以直接通过cmd启动exe。有人知道我为什么被拒绝以及如何解决吗?
使用 xp_cmdshell 运行“whoami”,然后检查指定用户对 exe 及其访问的任何资源的有效权限。奇怪的是,像 localsystem 这样的帐户被用于通过 xp_cmdshell 运行进程。
EXEC xp_cmdshell 'whoami'
NTFS 权限可能不足。确保运行 SQL Server 的“用户帐户”具有对 *.EXE(和任何相关文件)的权限(读取+执行)
不确定,但我相信触发器是由运行“触发”触发器的 SQL 命令的用户运行的。
发出 SQL 命令的用户是 Windows 用户还是 SQL 用户?如果是 SQL 用户,则需要设置“SQL 代理”。SQL 代理用于告诉 SQL 将使用哪个 Windows 用户访问文件系统。
希望这可以帮助,
伊夫
尝试运行 BCP 然后复制时,我被拒绝访问。
我发现 xp_cmdshell 从 c:\windows\system32 开始
我修改了我的 CMD 文件以更改为我的工作文件夹
L: cd L:\myworkingfolder
这解决了我的问题,尽管我的 sqlagent 是本地管理员并且我已经完全路径了我的复制命令。
现在是时候做出贡献了。我是系统管理员角色,致力于让两个公共访问用户执行 xp_cmdshell。我能够执行 xp_cmdshell 但不能执行两个用户。
我做了以下步骤:
创建新角色:
使用 master CREATE ROLE [CmdShell_Executor] AUTHORIZATION [dbo] GRANT EXEC ON xp_cmdshell TO [CmdShell_Executor]
在 master 数据库中添加用户:安全性 --> 用户。成员资格仅检查刚刚创建的 [CmdShell_Executor]
设置代理帐户:
EXEC sp_xp_cmdshell_proxy_account 'domain\user1','users1 Windows 密码' EXEC sp_xp_cmdshell_proxy_account 'domain\user2','users2 Windows 密码'
然后两个用户都可以执行包含 xp_cmdshell 调用 R 脚本运行的存储过程。我让用户输入密码,执行一行代码,然后删除密码。都在我的电脑里。
我有同样的问题,我是这样解决的:
Access is denied.
当您没有正确指定可执行文件的路径时,您也可以获得。请注意,如果您的路径包含空格,则需要将可执行文件括在双引号中:
EXEC xp_cmdshell '"D:\My path\With spaces\runme.exe"'