识别针对给定表的所有查询?

use*_*632 3 sql-server sql-server-2014

有没有一种好方法来识别针对给定表的所有查询(扩展事件、过程缓存等)?

Joe*_*ish 8

一种方法是使用SQL Server 审核功能。这里有一个示例,我将对其进行稍微修改,以防将来链接失效:

服务器审核定义了日志文件所在的位置:

USE master ;  
GO  
-- Create the server audit.   
CREATE SERVER AUDIT Payrole_Security_Audit  
    TO FILE ( FILEPATH =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA' ) ;   
GO  
-- Enable the server audit.   
ALTER SERVER AUDIT Payrole_Security_Audit   
WITH (STATE = ON) ; 
Run Code Online (Sandbox Code Playgroud)

数据库级别审核允许您选择特定对象、操作和用户:

USE AdventureWorks2012 ;   
GO  
-- Create the database audit specification.   
CREATE DATABASE AUDIT SPECIFICATION Audit_Pay_Tables  
FOR SERVER AUDIT Payrole_Security_Audit  
ADD (SELECT , INSERT , UPDATE, DELETE 
     ON HumanResources.EmployeePayHistory BY public)   
WITH (STATE = ON) ;   
GO  
Run Code Online (Sandbox Code Playgroud)

“公共”用户应该捕获任何人的查询。