以特定用户身份执行xp_cmdshell命令

Ant*_*wan 16 t-sql windows sql-server shell

我想运行xp_cmdshell(TSQL过程)以安装网络驱动器,然后访问远程mdb文件.

我是MS SQL服务器的管理员,因此我允许执行xp_cmdshell.

但是,仍然存在一个问题:

  • 当我调用xp_cmdshell时,执行该命令的用户是SQL SysAdmin,即运行SQL Server进程的帐户.

  • 我希望xp_cmdshell作为我连接到SQL服务器的帐户执行,即管理员

这两个帐户都在管理员组,SQLAdmin组中,并被授予CONTROL SERVER.两个用户都属于同一个域.所有这些都在同一台机器上运行.

由于这场冲突,我不能使用网络驱动器,因为它被安装为系统管理员,而不是对管理员
我试图用sp_开头xp_ cmdshell_ proxy_账户指定与我想要运行的帐户xp_cmdshell的,但系统管理员仍是使用帐户.

因此,这段代码:
select user_name(), suser_name;
exec xp_cmdshell 'echo %username%';

显示:
Administrator Administrator
SysAdmin

有谁知道如何充分模仿xp_cmdshell命令?是否有(重新)配置的东西?

谢谢你的帮助.

Rob*_*ley 9

因为您将SQL连接到sysadmin组中的登录名,所以xp_cmdshell作为服务帐户运行.

如果您以低权限登录方式连接,那么它将使用xp_cmdshell_proxy_account相反的权限.所以先尝试先做EXECUTE AS LOGIN='lowprivaccount',看看是否有帮助.

当然,你实际要问的不是预期用途.预期使用是高权限帐户可以允许xp_cmdshell使用服务帐户,而其他所有人都必须忍受较低权限代理帐户.


小智 1

也许你可以尝试 PsExec?从此 URL 下载文件并将其复制到 %Path% 环境变量的文件夹成员中。

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

exec xp_cmdshell 'psexec -u Administrator -p password net use ...'
Run Code Online (Sandbox Code Playgroud)

  • 这可能是一个解决方案,但它意味着以纯文本形式编写密码,这很棘手。我正在寻找一种纯粹的 TSQL 方式...... (2认同)