• I've been asked before how many times a particular user has accessed objects in a database.

    I solved it by creating a database audit specification to capture the SCHEMA_OBJECT_ACCESS_GROUP.

    Here's the code I used

    -- Setup the auditing

    USE [master]

    GO

    CREATE SERVER AUDIT [User-Access]

    TO FILE

    (FILEPATH = N'F:\SQLdata\MSSQL10_50.A\MSSQL\Log' -- REPLACE WITH YOUR LOG PATH

    ,MAXSIZE = 0 MB

    ,MAX_ROLLOVER_FILES = 2147483647

    ,RESERVE_DISK_SPACE = OFF

    )

    WITH

    (QUEUE_DELAY = 1000

    ,ON_FAILURE = CONTINUE

    )

    GO

    ALTER SERVER AUDIT [User-Access] WITH (STATE = ON)

    GO

    USE [YOUR-DATABASE]

    GO

    CREATE DATABASE AUDIT SPECIFICATION [User-Access]

    FOR SERVER AUDIT [User-Access]

    ADD (SCHEMA_OBJECT_ACCESS_GROUP)

    GO

    ALTER DATABASE AUDIT SPECIFICATION [User-Access] WITH (STATE = ON)

    GO

    -- Let it run for a bit

    -- Now stop the capture

    USE [YOUR-DATABASE];

    GO

    ALTER DATABASE AUDIT SPECIFICATION [User-Access] WITH (STATE = OFF)

    USE master;

    GO

    ALTER SERVER AUDIT [User-Access] WITH (STATE = OFF)

    GO

    -- Get the results

    SELECT schema_name, object_name, server_principal_name, count(*)

    FROM fn_get_audit_file('F:\SQLdata\MSSQL10_50.A\MSSQL\Log\User-Access*', default, default) -- REPLACE WITH YOUR LOG PATH

    WHERE server_principal_name = 'THE-LOGIN-YOU-ARE-INTERESTED-IN'

    AND schema_name NOT IN ('sys')

    GROUP BY schema_name, object_name, server_principal_name

    ORDER BY schema_name, object_name, server_principal_name

    GO

    Hope this helps.