Как установить Спецификацию аудита базы данных для всех таблиц в БД - PullRequest
3 голосов
/ 07 октября 2010

Мне нужно создать аудит для отслеживания всех событий CRUD для всех таблиц в базе данных, Теперь у меня есть более 100 таблиц в БД, есть ли способ создать спецификацию, которая будет включать все таблицы в БД?

P.S .: Я использую SQL Server 2008

Ответы [ 3 ]

2 голосов
/ 07 ноября 2017

У меня был тот же вопрос.Ответ на самом деле проще, чем ожидалось, и ему не нужно специальное приложение на C # для генерации большого количества SQL, чтобы покрыть все таблицы.Пример SQL ниже.Важным моментом было указать базу данных и общедоступные для INSERT / UPDATE / DELETE.

USE [master]
GO

CREATE SERVER AUDIT [CancerStatsAudit]
TO FILE 
(   FILEPATH = N'I:\CancerStats\Audit\'
    ,MAXSIZE = 128 MB
    ,MAX_ROLLOVER_FILES = 64
    ,RESERVE_DISK_SPACE = OFF
)
WITH
(   QUEUE_DELAY = 1000
    ,ON_FAILURE = CONTINUE
    ,AUDIT_GUID = '5a0a18cf-fe42-4171-ad01-5e19af9e27d1'
)
ALTER SERVER AUDIT [CancerStatsAudit] WITH (STATE = ON)
GO

USE [CancerStats]
GO

CREATE DATABASE AUDIT SPECIFICATION [CancerStatsDBAudit]
FOR SERVER AUDIT [CancerStatsAudit]
ADD (INSERT ON DATABASE::[CancerStats] BY [public]),
ADD (UPDATE ON DATABASE::[CancerStats] BY [public]),
ADD (DELETE ON DATABASE::[CancerStats] BY [public]),
ADD (EXECUTE ON DATABASE::[CancerStats] BY [public]),
ADD (DATABASE_OBJECT_CHANGE_GROUP),
ADD (SCHEMA_OBJECT_CHANGE_GROUP)
WITH (STATE = ON)
GO

Примечание: DATABASE_OBJECT_CHANGE_GROUP и SCHEMA_OBJECT_CHANGE_GROUP не нужны для аудита INSERT, UPDATE и DELETE - см. Дополнительные примечания ниже.1005 * Дополнительные примечания:

Приведенный выше пример также включает DATABASE_OBJECT_CHANGE_GROUP и SCHEMA_OBJECT_CHANGE_GROUP.Они были включены, поскольку моим требованием было также отслеживать действия CREATE / ALTER / DROP над объектами базы данных.Стоит отметить, что документация не подходит для них.https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions

На этой странице указано, что DATABASE_OBJECT_CHANGE_GROUP отслеживает CREATE, UPDATE и DELETE.Это не так (я тестировал в SQL Server 2016), отслеживается только CREATE, см .: https://connect.microsoft.com/SQLServer/feedback/details/370103/database-object-change-group-audit-group-does-not-audit-drop-proc

Фактически, для отслеживания CREATE, UPDATE, DELETE, используйте SCHEMA_OBJECT_CHANGE_GROUP.Несмотря на то, что на странице документации docs.microsoft.com указано, что это работает только для схем, на самом деле это работает и для объектов в схеме.

0 голосов
/ 14 октября 2010

Нашел способ создать спецификацию аудита базы данных, написал код на C #, который динамически генерировал SQL-оператор для всех таблиц и всех необходимых мне действий, и выполнил результирующую строку. Откровенно говоря, предоставленный мастер не поможет, если вы создаете спецификацию аудита базы данных для нескольких таблиц.

0 голосов
/ 07 октября 2010

Сбор данных об изменении

Вы можете использовать механизм функциональности Change Data Capture, предоставляемый SQL Server 2008.

http://msdn.microsoft.com/en-us/library/bb522489.aspx

Обратите внимание, что это будет только создавать, обновлять и удалять.

Таблицы триггеров и аудита

Даже для 100 таблиц вы можете использовать один сценарий, который будет генерировать таблицы аудита и необходимые триггеры. Обратите внимание, что это не очень хороший механизм - он будет замедлять управление, которое не будет возвращено, пока не завершится выполнение триггера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...