美好的一天,
我想知道是否可以设置一个警报,当用户使用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
答案 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
是错误的想法。