执行xp_cmdshell命令特定用户(Execute xp_cmdshell command as

2019-06-25 07:00发布

我想为了安装一个网络驱动器,然后访问遥控器MDB文件xp_cmdshell的 (TSQL的程序)运行。

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

然而,仍然有一个问题:

  • 当我打电话xp_cmdshell的,执行命令的用户是SQL 系统管理员 ,即谁运行SQL Server进程的帐户。

  • 我希望xp_cmdshell的执行方式与我连接到SQL Server的帐户,即管理员

这两种论点的帐户是在管理员组,SQLAdmin组,并授予控制服务器。 无论用户属于同一个域。 所有这一切都在同一台机器上运行。

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

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

显示:
Administrator Administrator
SysAdmin

有谁知道如何来冒充好xp_cmdshell的命令? 有什么是(重新)配置?

谢谢你的帮助。

Answer 1:

因为你连接到SQL作为系统管理员组中的登录, xp_cmdshell运行作为服务帐户。

如果连接为一个低权限登录,那么它会使用xp_cmdshell_proxy_account代替。 因此,尝试做EXECUTE AS LOGIN='lowprivaccount'首先,要看看是否有帮助。

当然,你实际上问的是不是预期的使用。 预计使用的是高权限的帐户可以让xp_cmdshell使用服务帐户,而其他人不得不忍受较低的权限代理帐户。



Answer 2:

其实我不得不使用过去的网络共享类似的事情这种方法,试试这个...

- 映射驱动器,并使其持续。

xp_cmdshell的 “净使用T:\\ <服务器> \ <共享> <密码> /用户:<用户名> /持久:是”

- T-SQL代码利用所述吨驱动的

- 删除驱动器映射xp_cmdshell的“净使用T:/删除”

实际上你可以设置执行SQL服务启动时,使其这个映射驱动器,所以你将永远有机会获得份额,只要SQL正在运行的作业。 所有你需要做的是建立一个映射驱动器和一个存储过程有它做驱动器的初始映射和使用sp_procoption的( http://msdn.microsoft.com/en-us/library/ms181720.aspx )



Answer 3:

也许你可以试试PSEXEC? 下载文件在此URL,并将其复制在%PATH%环境变量的文件夹成员。

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

exec xp_cmdshell 'psexec -u Administrator -p password net use ...'


Answer 4:

你可以尝试“网络使用”里面xp_cmdshell的用户名和密码。 这确立了连接到UNC凭据。

但是,我不知道多久,这将持续存在。 如果持续下去(如直到服务器重启),你可以有一个启动的存储过程,做“净使用”,并确保它是供以后使用。

随后xp_cmdshell的(访问MDB文件)将不要求身份验证,因为凭据在操作系统中已经建立。



Answer 5:

我发现这个页面帮助填补在实际添加域帐户和连接它的过程中的空白。

http://sqlblog.com/blogs/tibor_karaszi/archive/2007/08/23/xp-cmdshell-and-permissions.aspx



Answer 6:

之后重启服务器必须执行命令plase解决方案保存命令...

Use Master GO

EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH 
OVERRIDE GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE WITH OVERRIDE GO

exec xp_cmdshell 'net use \ip\xxx pass /user:xxx /persistent:no'

Use Master GO

EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH 
OVERRIDE GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 0 RECONFIGURE WITH OVERRIDE


Answer 7:

您必须创建一个存储过程,你就会把你的xp_cmdshell的脚本了。

存储过程运行使用管理员帐户,因此您的xp_cmdshell将成功,当你执行存储过程运行

create procedure RunShellIndirectly

as

declare @tawandachinaka as varchar(50)

set @tawandachinaka='DIR "c:\scrap measurement\"*.csv /B' 

EXEC xp_cmdshell @tawandachinaka


文章来源: Execute xp_cmdshell command as specific user