警告检查是否正在MSSQL数据库上运行更新查询

时间:2018-01-17 12:29:28

标签: sql-server ssms

美好的一天,

我想知道是否可以设置一个警报,当用户使用SQL Server Management Studio或SQLCMD.exe命令行或自定义Dot Net应用程序等应用程序在数据库上运行UPDATE查询时,该警报会激活?

我想要的是仅通过批准的设计应用程序访问数据库的用户。虽然我们为某些用户提供了MSMS客户端SSMS以测试他们的查询,但我不希望他们在数据库上运行任何UPDATE查询。

我可以使用以下查询获取通过SSMS连接到数据库实例的用户列表。我很感激任何建议。

 SELECT  DISTINCT 
DB_NAME(dbid) as MSSQLDatabase, 
COUNT(dbid) as Number_Of_Connections,
loginame as Logged_User, login_time as Logged_Time,
hostname as Client_Machine, program_name as Client_Application,
hostprocess as Client_AppProcessID  FROM 
sys.sysprocesses  WHERE     dbid > 0  AND program_name like '%Microsoft SQL Server Management Studio%' GROUP BY dbid, loginame, login_time,hostname, program_name, hostprocess 

1 个答案:

答案 0 :(得分:0)

我个人会创建一个日志表,然后记录通过触发器使用的应用程序的详细信息。然后,您可以设置一个任务,通过电子邮件向您发送表中日志的详细信息,其中应用程序名称不是您的应用程序的名称。

触发器就像是:

CREATE TRIGGER dbo.CheckApp_OnUpdate
   ON  dbo.YourTable
   AFTER UPDATE
AS 
BEGIN

    SET NOCOUNT ON;

    INSERT INTO YourAlertTable (UserName, LoginName, TableEffected, LogTime, ApplicationName)
    VALUES (CURRENT_USER, SYSTEM_USER, 'YourTable', GETDATE(), APP_NAME());

END
GO

希望您知道如何根据现有数据从SQL Server发送电子邮件吗?

编辑:我不建议您通过电子邮件向您发送详细信息。在触发器中使用sp_send_dbmail错误的想法。