Реализация аудита
Аудит обеспечивает видимость действий базы данных, помогая обнаруживать угрозы безопасности, отслеживать соответствие требованиям и исследовать инциденты. Записывая, кто обращается к данным и когда, аудит создает след подотчетности, который поддерживает как мониторинг безопасности, так и нормативные требования.
Базы данных SQL Server, SQL Azure и SQL в Microsoft Fabric предоставляют встроенные возможности аудита, которые фиксируют события базы данных без необходимости вносить изменения в приложение. Общие сведения о настройке аудита и управлении ими помогают обеспечить соответствующий надзор за средами базы данных.
Общие сведения о параметрах аудита
Аудит записывает события базы данных и записывает их в журнал аудита. События аудита, место хранения журналов и их анализ зависят от требований безопасности и инфраструктуры.
Аудит SQL Server использует инфраструктуру расширенных событий для записи действий. Записи аудита можно записывать в файлы, журнал безопасности Windows или журнал приложений Windows. Эта гибкость позволяет интегрироваться с существующими системами управления журналами.
Аудит базы данных SQL Azure записывает данные в хранилище объектов Azure Blob, Log Analytics или шлюзы событий Azure. Управляемая служба обрабатывает инфраструктуру, поэтому вы можете сосредоточиться на принятии решений о том, что следует аудитировать, а не управлять хранилищем.
Базы данных SQL в Microsoft Fabric используют ведение журнала действий Fabric и Microsoft Purview для данных аудита. Эта интеграция с Microsoft Purview предоставляет унифицированный аудит по всей вашей инфраструктуре данных.
Настройка аудита SQL Server
Для аудита SQL Server требуется создать объект аудита сервера, определяющий место записи аудита, а затем создать спецификации аудита, определяющие, что необходимо записать.
Начните с создания аудита сервера, который записывает данные в файл.
CREATE SERVER AUDIT SecurityAudit
TO FILE (FILEPATH = 'C:\AuditLogs\', MAXSIZE = 100 MB, MAX_ROLLOVER_FILES = 10)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
Параметр QUEUE_DELAY указывает, сколько миллисекундах требуется для буферных событий перед записью. Более низкие значения обеспечивают ведение журнала в режиме реального времени, но могут повлиять на производительность. Настройка ON_FAILURE определяет поведение в случае сбоя записи аудита. Используется SHUTDOWN для критически важных сценариев соответствия требованиям, в которых отсутствующие записи аудита неприемлемы.
Теперь включите аудит:
ALTER SERVER AUDIT SecurityAudit WITH (STATE = ON);
Затем создайте спецификацию аудита сервера для записи событий на уровне сервера:
CREATE SERVER AUDIT SPECIFICATION ServerAuditSpec
FOR SERVER AUDIT SecurityAudit
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP)
WITH (STATE = ON);
Для событий уровня базы данных создайте спецификацию аудита базы данных:
USE MyDatabase;
GO
CREATE DATABASE AUDIT SPECIFICATION DatabaseAuditSpec
FOR SERVER AUDIT SecurityAudit
ADD (SELECT, INSERT, UPDATE, DELETE ON dbo.SensitiveData BY public),
ADD (EXECUTE ON SCHEMA::dbo BY public),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP)
WITH (STATE = ON);
Эта спецификация проверяет все случаи доступа к данным в таблице SensitiveData, выполнение хранимых процедур и изменения членства в ролях.
Настройка аудита SQL Azure
Аудит базы данных SQL Azure настраивается на уровне сервера или базы данных. Политики уровня сервера применяются ко всем базам данных на логическом сервере.
Вы можете включить аудит на портале Azure или с помощью T-SQL:
-- Enable auditing to blob storage (configured in Azure portal)
ALTER DATABASE AUDIT SPECIFICATION AzureAuditSpec
ADD (SELECT, INSERT, UPDATE, DELETE ON DATABASE::MyDatabase BY public)
WITH (STATE = ON);
Для более детального управления настройте аудит с помощью политик Azure или шаблонов ARM. Ниже приведен пример, указывающий учетную запись хранения, период хранения и группы действий аудита:
{
"properties": {
"state": "Enabled",
"storageEndpoint": "https://myauditlogs.blob.core.windows.net",
"retentionDays": 90,
"auditActionsAndGroups": [
"SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP",
"FAILED_DATABASE_AUTHENTICATION_GROUP",
"BATCH_COMPLETED_GROUP"
]
}
}
Замечание
Аудит SQL Azure в Log Analytics обеспечивает мощные возможности запросов и оповещений с помощью языка запросов Kusto (KQL). Эта интеграция упрощает мониторинг безопасности и отчеты о соответствии.
Выбор действий аудита
Выберите действия аудита на основе требований к безопасности и соответствию требованиям. К общим группам действий относятся:
События проверки подлинности:
-
SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP— успешные входы -
FAILED_DATABASE_AUTHENTICATION_GROUP— неудачные попытки входа
Изменения разрешений:
-
DATABASE_PERMISSION_CHANGE_GROUP— Предоставление, отзыв, запрет операций -
DATABASE_ROLE_MEMBER_CHANGE_GROUP— Изменения в составе роли -
DATABASE_PRINCIPAL_CHANGE_GROUP— создание и изменение пользователей
Доступ к данным:
-
BATCH_COMPLETED_GROUP— Все завершенные партии (большой объем) -
SELECTдля определенных объектов — целевой мониторинг доступа для чтения -
INSERTUPDATE,DELETEдля определенных объектов — отслеживание изменений данных
Изменения схемы:
-
SCHEMA_OBJECT_CHANGE_GROUP— изменения таблиц и объектов -
DATABASE_OBJECT_CHANGE_GROUP— инструкции DDL
Это важно
Начните с целенаправленного набора действий аудита вместо того, чтобы фиксировать всё. Аудит с большим объемом влияет на производительность и создает журналы, которые трудно проанализировать.
Запрос и анализ журналов аудита
Для аудита на основе файлов SQL Server используйте функцию fn_get_audit_file для запроса журналов:
SELECT
event_time,
action_id,
succeeded,
session_server_principal_name AS UserName,
database_name,
object_name,
statement
FROM fn_get_audit_file('C:\AuditLogs\*.sqlaudit', DEFAULT, DEFAULT)
WHERE event_time > DATEADD(day, -7, GETUTCDATE())
ORDER BY event_time DESC;
Если вы используете аудит SQL Azure с Log Analytics, вы можете запросить с помощью KQL:
AzureDiagnostics
| where Category == "SQLSecurityAuditEvents"
| where TimeGenerated > ago(7d)
| where action_name_s == "SELECT"
| summarize count() by client_ip_s, server_principal_name_s
| order by count_ desc
Этот запрос определяет, какие пользователи и IP-адреса создали самые запросы SELECT за прошлую неделю, помогая определить необычные шаблоны доступа.
Внедрение сохранности и защиту данных аудита
Журналы аудита нуждаются в защите от незаконного изменения, и их необходимо сохранить в соответствии с требованиями соответствия.
Для SQL Server настройте неизменяемое хранилище для файлов аудита и используйте разрешения файловой системы Windows для предотвращения удаления. Для SQL Azure настройте хранилище с неизменяемым хранилищем BLOB-объектов и задайте политики хранения в управлении жизненным циклом службы хранилища Azure.
Это важно
Храните журналы аудита отдельно от отслеживаемой базы данных. Это гарантирует, что даже если злоумышленники компрометируют базу данных, они не могут изменить путь аудита.
Для сценариев соответствия рассмотрим следующие методики хранения:
- Определение периодов хранения на основе нормативных требований (часто семь лет для финансовых данных)
- Использование неизменяемого хранилища для предотвращения удаления журнала
- Реализация архивации журналов в холодное хранилище для управления затратами
- Создание процессов для проверки и оповещения журнала аудита
Регулярный просмотр данных аудита помогает выявлять проблемы безопасности, прежде чем они становятся инцидентами. Создание оповещений о неудачных попытках входа, изменения разрешений за пределами периодов обслуживания и необычных шаблонов доступа к данным.