Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Аудит нескольких таблиц  [new]
Vixler
Member

Откуда:
Сообщений: 90
Здравствуйте!

Пара нубских вопросов по аудиту SQL Server 2008, разбираюсь, но внятных ответов в интернетах найти не могу.

Вот хочу отслеживать CRUD-команды всех таблиц своей базы данных. Можно это быстро создать? При создании спецификации аудита не получается выбрать всю бд. При этом можно выбрать несколько таблиц, но в итоге наш выбор будет проигнорирован и аудит подцепиться только к одной таблице. Придётся создавать ещё одну строчу с той же командой.

Можно ли как-то создать аудит для всей базы? Ну или на одну строчку задать несколько таблиц? Я что-то делаю не так?

К сообщению приложен файл. Размер - 104Kb
15 авг 14, 04:43    [16444068]     Ответить | Цитировать Сообщить модератору
 Re: Аудит нескольких таблиц  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Не пользуюсь визардами, поэтому как накликать нижеприведенное в них - понятия не имею.
USE master;
GO
CREATE SERVER AUDIT CRUDAudit
TO FILE (FILEPATH = 'D:\Trash\audit\', MAXSIZE = 2 GB)
WITH (ON_FAILURE = CONTINUE);
GO
ALTER SERVER AUDIT CRUDAudit
WITH (STATE = ON);

use [AdventureWorks2008R2]
go
CREATE DATABASE AUDIT SPECIFICATION CRUDDbAuditSpec
FOR SERVER AUDIT CRUDAudit ADD (
  UPDATE, INSERT, DELETE
  ON DATABASE::[AdventureWorks2008R2] BY dbo
)
WITH (STATE = ON);

Проверка:
use [AdventureWorks2008R2]
go
insert into HumanResources.Department (Name, GroupName, ModifiedDate) values ('Foo', 'Bar', getdate());
update Person.Address set ModifiedDate=getdate() where AddressId=1;
delete Production.ProductCostHistory where ProductId=999;

select statement
from sys.fn_get_audit_file('D:\Trash\audit\CRUDAudit*', null, null)
where action_id in ('IN','UP','DL')

statement
--------------------------------------------------------------------------------------------------------
insert into HumanResources.Department (Name, GroupName, ModifiedDate) values ('Foo', 'Bar', getdate())
update Person.Address set ModifiedDate=getdate() where AddressId=1
delete Production.ProductCostHistory where ProductId=999

(3 row(s) affected)
15 авг 14, 06:17    [16444109]     Ответить | Цитировать Сообщить модератору
 Re: Аудит нескольких таблиц  [new]
Vixler
Member

Откуда:
Сообщений: 90
Угу, спасибо, заработало. Это оказывается визард тупит. Выбираю Database, потом надо выбрать собственно базу данных, при выборе Database меняется на Object, для которого надо ещё задать схему. Сохранить с Database никак не получается. Можт патчики какие поставить надо.

А вот такой вопрос ещё. Я так понял, в MS SQL реализован только такой аудит, то есть записывается в журнал, какая команда была выполнена (типа "Insert into table1 values (11, 20)). В другой СУБД в стандартный журнал пишется новое и старое значение записи. Легко искать историю изменений, зная ID. Тут такого нет?
15 авг 14, 09:27    [16444387]     Ответить | Цитировать Сообщить модератору
 Re: Аудит нескольких таблиц  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Vixler
Легко искать историю изменений, зная ID. Тут такого нет?

Тут, по-моему, нужно смотреть в сторону Change Data Capture. Либо делать аудит на DML-триггерах.
15 авг 14, 11:22    [16445085]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить