是否可以从 sql server 触发器中使用 powershell“Send-MailMessage -SMTPServer”命令?
当数据库中的行更新或创建新行时,我正在尝试发送电子邮件。由于安全限制,我无法使用数据库邮件。但是,我可以通过 powershell 的 Send-MailMessage 命令发送电子邮件。
是否可以从 sql server 触发器中使用 powershell“Send-MailMessage -SMTPServer”命令?
当数据库中的行更新或创建新行时,我正在尝试发送电子邮件。由于安全限制,我无法使用数据库邮件。但是,我可以通过 powershell 的 Send-MailMessage 命令发送电子邮件。
首先,这几乎可以肯定是一个非常糟糕的主意。请记住,触发器可能会导致事务升级方面的意外问题,并且在处理过程中持有锁的时间超过必要的时间。还要记住,人们可能不会期望您的表上有此类触发器,并且他们会尝试对其进行 CRUD 操作,就像它是一个正常的表一样,并且不明白他们的应用程序为什么会超时。
也就是说,您至少可以通过三种方式做到这一点:
xp_cmdshell
,并使用它来向 PowerShell 输出,如此处所述:Running Powershell scripts through SQL - 但不要这样做,因为这xp_cmdshell
是一种安全风险,这很可能会以一种或另一种方式给您带来问题(无论是因为有人以破坏性的方式使用它,或者因为 PowerShell 失败了而你甚至不知道为什么)。 如果你因为安全限制不能使用数据库邮件,那你绝对不应该使用xp_cmdshell,它有更多的安全问题!sp_db_sendmail
- 但不要这样做,因为这很容易失败或导致更新出现问题(例如 SMTP 服务器关闭并且您的表无法再更新)。(我写了这部分之前我看到你因为安全限制不能使用它。)SmptClient
。这可以加载到您的实例中,并作为可以从触发器调用的常规 SQL 函数公开。这可以比仅启用更安全xp_cmdshell
,但如果您没有配置数据库邮件的能力,这可能违反了相同的策略。而不是这些选项,我会推荐这样的东西: