我正在尝试从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”)下执行相同的操作?
答案 0 :(得分:0)