xp_cmdshell用户未列出新创建的用户“CustomUserX”

时间:2018-01-22 19:54:57

标签: sql-server powershell tsql sql-scripts

我正在尝试从AFTER UPDATE SQL TRIGGER中执行powershell脚本。从组件的角度来看,UPDATE和powershell cmd似乎正常运行。但是,TRIGGER脚本作为一个整体在执行powershell脚本时失败了。

我最近发现要执行xp_cmdshell,它需要一个代理到Windows帐户的用户。有意义的是,在SQL空间之外执行的任何操作都需要一个Windows帐户来执行此操作。

然后我继续(经过一些研究)使用以下步骤创建代理用户

/* Enable xp_cmdshell */
EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

/* Target DB */
USE master

/* Created a custom user with pwd */
CREATE LOGIN CustomUserX WITH PASSWORD = 'strong_password'

/* Created a user from the login */
CREATE USER CustomUserX FROM LOGIN CustomUserX

/* Granted execute for CustomUserX */
GRANT EXECUTE ON xp_cmdshell TO CustomUserX

/* Created proxy user using local machine account and pwd */
EXEC sp_xp_cmdshell_proxy_account 'LOCALMACHINENAME\WinsAccount','pwd'

/* Execute as login CustomUserX */
EXECUTE AS login = 'CustomUserX'

/* Ran simply listing of contents of drive E:/ */
EXEC xp_cmdshell 'DIR E:\*.*'
REVERT

当我尝试使用触发器执行脚本时,触发器失败了。

SQL Server Database Error: The server principal "CustomUserX" is not able to access the database "AnotherDB1" under the current security context.

我运行exec ex_cmdshell 'echo %username%只是为了发现未列出“CustomUserX”帐户(仅限SQL $ ..和NULL)。

按照建议为主表执行上述代理脚本。我是否需要在db实例(“AnotherDB1”)下执行相同的操作?

1 个答案:

答案 0 :(得分:0)