Сбор данных Изменения SQL Server 2008 года, кто внес изменение?

Вы можете передать аргумент source в поля сериализатора, например, если вы хотите добавить department_name к вашему CourseInstanceSerializer, вы можете добиться этого, добавив поле department_name = serializers.CharField(source='course.department.name'), или если вы хотите получить информацию об отделе, которую вы можете использовать department = DepartmentSerializer(source='course.department').

9
задан MrEdmundo 15 May 2009 в 15:18
поделиться

5 ответов

2
ответ дан 4 December 2019 в 11:44
поделиться

CDC на самом деле не предназначен для аудита. Если вам нужны возможности аудита, вам следует использовать Аудит SQL Server .

1
ответ дан 4 December 2019 в 11:44
поделиться

Хотя это и не идеально, по общему мнению, CDC не будет фиксировать, кто внес изменение, но мы реализовали столбцы CreatedBy / Date и UpdatedBy / Date, которые можно использовать для просмотра кто инициировал изменение. Для того, чтобы это работало, конечно, для обновления строки в операторе SP или SQL необходимо явно установить поля UpdatedBy / Date, используя suser_name () и getDate () соответственно. Я согласен, что это было бы неплохо иметь из коробки, и это заставляет CDC делать то, для чего не предназначено, но я тоже пытаюсь использовать CDC для асинхронного аудита изменений данных вместо использования традиционных триггеров.

0
ответ дан 4 December 2019 в 11:44
поделиться

MrEdmundo, CDC, на мой взгляд, еще не готов к прайм-тайму. В настоящее время, похоже, существует довольно много проблем с развертыванием проекта базы данных из Visual Studio с включенным CDC (ему не нравятся изменения DDL). Кроме того, похоже, что CDC имеет встроенную процедуру очистки данных по окончании срока службы, так что для вас могут настать плохие времена, если вы действительно хотите сохранить историю аудита на долгое время.

Кроме того, поправьте меня, если я неправильно понял, но кажется, что SQL Audit предназначен для аудита множества событий, происходящих в SQL Server, таких как неудачный вход в систему, изменения DDL и т.д.

Отслеживание изменений предназначено только для DDL, но не для DML, так что здесь вам не повезло.

Если вы действительно хотите получить "старую" запись, которая была обновлена или удалена из таблицы, то лучшим решением будет создать Audit.TableName и триггер обновления+удаления на dbo.TableName. Также убедитесь, что TableName включает столбцы CreatedBy DEFAULT SUSER, CreatedDate DEFAULT getdate(), ModifiedBy, ModifiedDate.

1
ответ дан 4 December 2019 в 11:44
поделиться

Я изменил таблицу CDC напрямую, используя: ALTER TABLE cdc.dbo_MyTable_CT ADD UserName nvarchar(50) NULL DEFAULT(SUSER_SNAME())

BTW вам не нужна информация о дате, поскольку она уже есть в начальном и конечном полях LSN.

Моя единственная проблема заключается в том, что мои пользователи входят в систему через группу Windows, которая позволяет им изменять права, но в поле UserName всегда указывается мое имя пользователя, а не их. Я не нашел способа обойти эту проблему.

7
ответ дан 4 December 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: