【发布时间】:2011-07-29 18:55:08
【问题描述】:
每当向数据库表中插入新行时,我需要自动将 ssrs 报告打印到网络上的特定打印机。数据库表上有一个触发器,它使用 xp_cmdshell 调用控制台应用程序,该应用程序呈现和打印报告。当我从命令提示符执行控制台应用程序时,它可以工作。此外,当我更改 sql server 以管理员身份运行的帐户时,xp_cmdshell 会按预期工作并打印报告。但是,我不想让 sql server 以管理员身份运行,所以我设置了一个代理帐户,使用 sp_xp_cmdshell_proxy_account。我使用管理员作为 SQL Server 执行 xp_cmdshell 的帐户,并将 SQL Server 设置为本地系统运行。但是,当我使用不是 sysadmin 的帐户登录 SQL Server 并使用 xp_cmdshell 执行控制台应用程序时,控制台应用程序会生成以下异常:
RPC 服务器不可用 - Source:System.Drawing - Stack Trace: at System.Drawing.Printing.StandardPrintController.OnStartPrint(PrintDocument document, PrintEventArgs e) at System.Windows.Forms.PrintControllerWithStatusDialog.OnStartPrint(PrintDocument document, PrintEventArgs e) 在 System.Drawing.Printing.PrintDocument.Print() 在 System.Drawing.Printing.PrintController.Print(PrintDocument document) 在 PrintQCChecklist.Program.Main(String[] args)
然后我用 xp_cmdshell 调用 whoami.exe,它返回“管理员”。为什么当 sql server 以管理员身份运行时会打印文档,但在代理下以管理员身份运行时会崩溃??? (请不要因为使用xp_cmdshell而咬我的头。我知道安全风险。谢谢。)
【问题讨论】:
标签: sql-server sql-server-2008 proxy xp-cmdshell