Настройка SQL Server Audit: входы, изменения разрешений и доступ к таблицам
SQL ServerБезопасностьКоманда
USE master;
CREATE SERVER AUDIT [Audit_DBA]
TO FILE (FILEPATH = N'D:\Audit\', MAXSIZE = 256 MB, MAX_ROLLOVER_FILES = 20, RESERVE_DISK_SPACE = OFF)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT [Audit_DBA] WITH (STATE = ON);
-- Server-wide (covers all databases):
CREATE SERVER AUDIT SPECIFICATION [AuditSpec_Server]
FOR SERVER AUDIT [Audit_DBA]
ADD (FAILED_LOGIN_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP),
ADD (AUDIT_CHANGE_GROUP)
WITH (STATE = ON);
-- Database: access to a sensitive table:
USE [Musteri];
CREATE DATABASE AUDIT SPECIFICATION [AuditSpec_Musteri]
FOR SERVER AUDIT [Audit_DBA]
ADD (SELECT, INSERT, UPDATE, DELETE ON OBJECT::[dbo].[Siparis] BY [public])
WITH (STATE = ON);
-- Read:
SELECT event_time, action_id, succeeded, server_principal_name, database_name,
schema_name, object_name, LEFT(statement, 200) AS stmt, client_ip, application_name
FROM sys.fn_get_audit_file(N'D:\Audit\Audit_DBA_*.sqlaudit', DEFAULT, DEFAULT)
WHERE event_time >= DATEADD(HOUR, -24, SYSUTCDATETIME())
ORDER BY event_time DESC;Что делает
Создаёт аудит сервера с записью в файл; фиксирует неудачные входы, членство в ролях, изменения участников и разрешений на уровне сервера и доступ SELECT/DML к выбранной таблице на уровне базы, а также читает записи средствами T-SQL.
Когда использовать
Для требований аудита/соответствия (GDPR, PCI, SOX), для вопросов "кто читал/изменял эту таблицу" или при подозрении на повышение привилегий.
Внимание
Аудит SELECT на нагруженной таблице генерирует записи очень быстро и снижает производительность; сужайте его по объекту и участнику. ON_FAILURE = SHUTDOWN останавливает сервер, если аудит не удаётся записать; используйте только по требованию. Папка аудита должна быть доступна на запись учётной записи службы SQL Server и защищена от удаления не-DBA. event_time — в UTC. Спецификация аудита базы данных восстанавливается вместе с базой, но остаётся потерянной (orphaned), если GUID аудита сервера не совпадает.
Связанные материалы
- Настройка TDE: главный ключ, сертификат, резервная копия сертификата и ход шифрования
- Поиск потерянных пользователей и их привязка к логинам (после восстановления / AG)
- Аудит логинов и разрешений: члены sysadmin, рискованные разрешения, слабые пароли
- Создание ledger-таблицы, чтение истории изменений и проверка целостности