Как проверить активность базы данных без проблем с производительностью и масштабируемостью? - PullRequest
6 голосов
/ 16 сентября 2008

У меня есть необходимость проводить аудит всей активности базы данных независимо от того, была ли она получена из приложения или кто-то выдал какой-то sql другим способом. Таким образом, аудит должен проводиться на уровне базы данных. Рассматриваемая база данных - Oracle. Я смотрел на это с помощью триггеров, а также с помощью так называемого детального аудита, который предоставляет Oracle. В обоих случаях мы включили аудит для определенных таблиц и определенных столбцов. Однако мы обнаружили, что производительность действительно плохая, когда мы используем любой из этих методов.

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

Ответы [ 4 ]

1 голос
/ 10 апреля 2010

Нет необходимости «кататься самостоятельно». Просто включите аудит:

  1. Установить параметр базы данных AUDIT_TRAIL = DB.
  2. Запустите экземпляр.
  3. Войти с помощью SQLPlus.
  4. Введите оператор
    audit all;
    Это включает аудит для многих критических операций DDL, но DML и некоторые другие операторы DDL все еще не проверены.
  5. Чтобы включить аудит для этих других действий, попробуйте утверждения, подобные этим:
    audit alter table; -- DDL audit
    audit select table, update table, insert table, delete table; -- DML audit

Примечание. Вся деятельность "as sysdba" ВСЕГДА проверяется в O / S. В Windows это означает журнал событий Windows. В UNIX это обычно $ ORACLE_HOME / rdbms / audit.

Ознакомьтесь с главой аудита Oracle 10g R2 *1020* Справочника по базе данных SQL.

Контрольный журнал базы данных можно просмотреть в представлении SYS.DBA_AUDIT_TRAIL.

Следует отметить, что внутренний аудит Oracle по определению будет высокопроизводительным. Он спроектирован именно так, и очень трудно представить что-либо еще, способное конкурировать с ним по производительности. Кроме того, существует высокий уровень «детального» контроля аудита Oracle. Вы можете получить это так же точно, как вы хотите. Наконец, таблицу SYS.AUD $ вместе с ее индексами можно переместить в отдельное табличное пространство, чтобы предотвратить заполнение табличного пространства SYSTEM.

С уважением, Opus

1 голос
/ 12 апреля 2010

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

Golden Gate очищает журналы повторов транзакций со списком интересующих вас таблиц. Эти изменения записываются в «Trail File» и могут быть применены к другой схеме в той же базе данных или отправлены в целевую систему. система и применяется там (идеально подходит для снижения нагрузки на исходную систему).

После того, как вы получили файл трассировки в целевой системе, есть некоторые настройки, вы можете установить опцию для проведения аудита, и при необходимости вы можете вызвать 2 функции Golden Gate для получения информации о транзакции:

1) Установите параметр репликации INSERTALLRECORDS, чтобы вставить новую запись в таблицу назначения для каждой операции изменения, выполненной в исходной таблице. Остерегайтесь, это может занять много места, но если вам нужен всесторонний аудит, это, вероятно, ожидается.

2) Если у вас еще нет CHANGED_BY_USERID и CHANGED_DATE, прикрепленных к вашим записям, вы можете использовать функции Golden Gate на целевой стороне, чтобы получить эту информацию для текущей транзакции. Проверьте следующие функции в Справочном руководстве GG: GGHEADER ( "USERID") GGHEADER ( "TIMESTAMP")

Так что нет, оно не бесплатное (требует лицензирования через Oracle) и потребует некоторых усилий для ускорения, но, вероятно, потребует гораздо меньше усилий / затрат, чем внедрение и поддержка настраиваемого решения, переходящего на собственное, и вы получаете дополнительное преимущество: отправка данных в удаленную систему, чтобы вы могли гарантировать минимальное влияние на исходную базу данных.

1 голос
/ 16 сентября 2008

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

Отправка необработанных данных между приложением и базой данных другому машина и расшифровывается и анализируется там.

Я использовал PostgreSQL, декодировал трафик и превращал его в поток операций базы данных, которые могли быть зарегистрированы, был относительно простой. Я предполагаю, что это будет работать на любой базе данных, где пакет хотя формат задокументирован.

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

Кроме того, это был пассивный мониторинг, он записывал всю активность, но не может заблокировать какие-либо операции, поэтому может быть не совсем то, что вы ищете.

0 голосов
/ 29 марта 2011

если вы используете oracle, есть функция CDC (изменение данных захвата), которая является более эффективным решением для требований аудита.

...