SQL Server 2019:无Trace/扩展事件时定位SELECT权限拒绝的应用及用户
定位触发SELECT权限拒绝错误的应用及用户方案
以下是在现有限制条件下可行的排查方案:
利用系统视图追踪活跃会话
结合错误触发的时间窗口,查询SQL Server动态管理视图,捕捉访问目标数据库的会话信息,重点关注program_name(应用名称)和login_name(登录用户):SELECT s.session_id, s.login_name, s.program_name, s.host_name, db_name(s.database_id) AS target_db FROM sys.dm_exec_sessions s LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id WHERE s.database_id = DB_ID('someDB') AND s.is_user_process = 1如果应用在连接字符串中配置了
Application Name参数,program_name会直接显示应用标识,可快速定位。临时审计访问(低峰期操作)
在业务低峰时段,临时给可疑登录账号授予someDB.dbo.xyz的SELECT权限,同时创建轻量审计触发器记录访问行为:-- 先在非生产库或独立审计库创建审计表 CREATE TABLE YourAuditDB.dbo.XYZAccessLog ( LogID INT IDENTITY(1,1) PRIMARY KEY, LoginName NVARCHAR(128), ProgramName NVARCHAR(128), HostName NVARCHAR(128), AccessTime DATETIME DEFAULT GETDATE(), ObjectPath NVARCHAR(256) DEFAULT 'someDB.dbo.xyz' ) -- 创建数据库级触发器 CREATE TRIGGER TrackXYZSelect ON someDB FOR SELECT ON dbo.xyz AS BEGIN INSERT INTO YourAuditDB.dbo.XYZAccessLog (LoginName, ProgramName, HostName) SELECT ORIGINAL_LOGIN(), APP_NAME(), HOST_NAME() END待收集到足够数据后,立即回收权限并禁用触发器,从审计表中提取对应的应用和用户信息。
联动应用侧日志排查
协调应用运维团队,检查所有可能连接someDB的应用日志,筛选包含“SELECT权限被拒绝”、xyz对象名等关键词的日志条目,通过时间戳、请求ID等上下文信息定位违规应用。排查连接池会话
若应用使用数据库连接池,查询连接池中的活跃会话信息,对比错误发生时段的连接记录:SELECT c.session_id, c.auth_scheme, s.login_name, s.program_name, s.host_name, c.connect_time FROM sys.dm_exec_connections c JOIN sys.dm_exec_sessions s ON c.session_id = s.session_id WHERE s.database_id = DB_ID('someDB') AND c.connect_time BETWEEN '错误开始时间' AND '错误结束时间'通过
connect_time和program_name交叉验证,缩小可疑应用范围。
内容的提问来源于stack exchange,提问作者Eddie Kumar
相关产品推荐
相关产品推荐

