AUDIT в Oracle SQL — 100 практических примеров

🟢 AUDIT в Oracle SQL. Введение

Если любишь не только писать SQL, но и понимать, кто, что и когда сделал в базе, то AUDIT — твой большой союзник.
В Oracle тема аудита давно выросла из простой «галочки безопасности» в полноценную систему наблюдения за действиями пользователей, ролей, привилегий и SQL-операций.
Особенно красиво это раскрывается в unified auditing: ты создаёшь политику, включаешь её через AUDIT POLICY и получаешь аккуратный контроль вместо хаоса.

Синтаксис

-- создание unified audit policy
CREATE AUDIT POLICY policy_name
  ACTIONS action_list;

-- включение policy
AUDIT POLICY policy_name;

-- включение policy только для выбранных пользователей
AUDIT POLICY policy_name BY user1, user2;

-- писать запись только при ошибке или только при успехе
AUDIT POLICY policy_name WHENEVER NOT SUCCESSFUL;
AUDIT POLICY policy_name WHENEVER SUCCESSFUL;

В актуальных версиях Oracle основной путь — unified auditing:
сначала создаёшь политику через CREATE AUDIT POLICY,
потом включаешь её через AUDIT POLICY.
Традиционный аудит Oracle считает устаревшим подходом для новых систем, а в 23c он уже desupported. :contentReference[oaicite:1]{index=1}

Где используют

  • контроль доступа к чувствительным таблицам и схемам
  • отслеживание DDL и DML-изменений
  • мониторинг административных действий
  • выявление неуспешных попыток доступа
  • комплаенс, расследования и внутренний контроль
  • точечный аудит пользователей, ролей, привилегий и объектов

100 примеров

1. Базовая unified policy для входа в систему

CREATE AUDIT POLICY pol_logon
ACTIONS LOGON

2. Включение policy для всех пользователей

AUDIT POLICY pol_logon

3. Включение policy только при успешном входе

AUDIT POLICY pol_logon
WHENEVER SUCCESSFUL

4. Включение policy только при неуспешном входе

AUDIT POLICY pol_logon
WHENEVER NOT SUCCESSFUL

5. Policy для выхода из системы

CREATE AUDIT POLICY pol_logoff
ACTIONS LOGOFF

6. Включение аудита выхода

AUDIT POLICY pol_logoff

7. Policy для CREATE TABLE

CREATE AUDIT POLICY pol_create_table
ACTIONS CREATE TABLE

8. Policy для ALTER TABLE

CREATE AUDIT POLICY pol_alter_table
ACTIONS ALTER TABLE

9. Policy для DROP TABLE

CREATE AUDIT POLICY pol_drop_table
ACTIONS DROP TABLE

10. Policy для CREATE USER

CREATE AUDIT POLICY pol_create_user
ACTIONS CREATE USER

11. Policy для ALTER USER

CREATE AUDIT POLICY pol_alter_user
ACTIONS ALTER USER

12. Policy для DROP USER

CREATE AUDIT POLICY pol_drop_user
ACTIONS DROP USER

13. Policy для CREATE ROLE

CREATE AUDIT POLICY pol_create_role
ACTIONS CREATE ROLE

14. Policy для GRANT

CREATE AUDIT POLICY pol_grant
ACTIONS GRANT

15. Policy для REVOKE

CREATE AUDIT POLICY pol_revoke
ACTIONS REVOKE

16. Policy для CREATE VIEW

CREATE AUDIT POLICY pol_create_view
ACTIONS CREATE VIEW

17. Policy для CREATE INDEX

CREATE AUDIT POLICY pol_create_index
ACTIONS CREATE INDEX

18. Policy для DROP INDEX

CREATE AUDIT POLICY pol_drop_index
ACTIONS DROP INDEX

19. Policy для CREATE SEQUENCE

CREATE AUDIT POLICY pol_create_sequence
ACTIONS CREATE SEQUENCE

20. Включение нескольких policies сразу

AUDIT POLICY pol_create_table,
             pol_alter_table,
             pol_drop_table

Еще 20 примеров

21. Policy для SELECT на конкретной таблице

CREATE AUDIT POLICY pol_sel_orders
ACTIONS SELECT ON oe.orders

22. Policy для UPDATE на конкретной таблице

CREATE AUDIT POLICY pol_upd_orders
ACTIONS UPDATE ON oe.orders

23. Policy для DELETE на таблице заказов

CREATE AUDIT POLICY pol_del_orders
ACTIONS DELETE ON oe.orders

24. Policy для INSERT в таблицу клиентов

CREATE AUDIT POLICY pol_ins_customers
ACTIONS INSERT ON oe.customers

25. Policy сразу для UPDATE и DELETE на объекте

CREATE AUDIT POLICY pol_mod_orders
ACTIONS UPDATE, DELETE ON oe.orders

26. Включение policy только для одного пользователя

AUDIT POLICY pol_sel_orders
BY scott

27. Включение policy для нескольких пользователей

AUDIT POLICY pol_mod_orders
BY scott, hr

28. Policy только для ошибок UPDATE

AUDIT POLICY pol_upd_orders
WHENEVER NOT SUCCESSFUL

29. Policy только для успешных DELETE

AUDIT POLICY pol_del_orders
WHENEVER SUCCESSFUL

30. Условный аудит по HOST

CREATE AUDIT POLICY pol_host_check
ACTIONS UPDATE ON oe.orders
WHEN 'SYS_CONTEXT(''USERENV'',''HOST'') NOT IN (''sales_24'',''sales_12'')'
EVALUATE PER SESSION

31. Условный аудит по CLIENT_IDENTIFIER

CREATE AUDIT POLICY pol_clientid
ACTIONS DELETE ON oe.orders
WHEN 'SYS_CONTEXT(''USERENV'',''CLIENT_IDENTIFIER'') = ''sales_clerk'''
EVALUATE PER STATEMENT

32. Условный аудит по типу идентификации

CREATE AUDIT POLICY pol_external_auth
ACTIONS UPDATE ON oe.orders
WHEN 'SYS_CONTEXT(''USERENV'',''IDENTIFICATION_TYPE'') = ''EXTERNAL'''
EVALUATE PER STATEMENT

33. Включение условной policy

AUDIT POLICY pol_host_check

34. Включение policy кроме одного пользователя

AUDIT POLICY pol_clientid
EXCEPT jmartin

35. Policy для CREATE ANY TABLE privilege use

CREATE AUDIT POLICY pol_any_table
PRIVILEGES CREATE ANY TABLE

36. Policy для ALTER ANY TABLE privilege use

CREATE AUDIT POLICY pol_alter_any_table
PRIVILEGES ALTER ANY TABLE

37. Policy для DROP ANY TABLE privilege use

CREATE AUDIT POLICY pol_drop_any_table
PRIVILEGES DROP ANY TABLE

38. Policy для CREATE SESSION privilege

CREATE AUDIT POLICY pol_create_session
PRIVILEGES CREATE SESSION

39. Включение privilege-based policy

AUDIT POLICY pol_create_session

40. Policy для EXECUTE на конкретной процедуре

CREATE AUDIT POLICY pol_exec_proc
ACTIONS EXECUTE ON hr.calc_bonus

Еще 20 примеров

41. Policy для EXECUTE на package

CREATE AUDIT POLICY pol_exec_pkg
ACTIONS EXECUTE ON hr.pkg_utils

42. Policy для MERGE на таблице

CREATE AUDIT POLICY pol_merge_orders
ACTIONS MERGE ON oe.orders

43. Policy для TRUNCATE TABLE

CREATE AUDIT POLICY pol_truncate_table
ACTIONS TRUNCATE TABLE

44. Policy для CREATE PROCEDURE

CREATE AUDIT POLICY pol_create_proc
ACTIONS CREATE PROCEDURE

45. Policy для ALTER PROCEDURE

CREATE AUDIT POLICY pol_alter_proc
ACTIONS ALTER PROCEDURE

46. Policy для DROP PROCEDURE

CREATE AUDIT POLICY pol_drop_proc
ACTIONS DROP PROCEDURE

47. Policy для CREATE TRIGGER

CREATE AUDIT POLICY pol_create_trigger
ACTIONS CREATE TRIGGER

48. Policy для DROP TRIGGER

CREATE AUDIT POLICY pol_drop_trigger
ACTIONS DROP TRIGGER

49. Policy для CREATE VIEW и DROP VIEW вместе

CREATE AUDIT POLICY pol_view_lifecycle
ACTIONS CREATE VIEW, DROP VIEW

50. Policy для CREATE ROLE и DROP ROLE

CREATE AUDIT POLICY pol_role_lifecycle
ACTIONS CREATE ROLE, DROP ROLE

51. Включение policy только для SYS и SYSTEM не делают так без причины, но пример полезный

AUDIT POLICY pol_role_lifecycle
BY sys, system

52. Policy для CREATE DIRECTORY

CREATE AUDIT POLICY pol_create_directory
ACTIONS CREATE DIRECTORY

53. Policy для DROP DIRECTORY

CREATE AUDIT POLICY pol_drop_directory
ACTIONS DROP DIRECTORY

54. Policy для CREATE DATABASE LINK

CREATE AUDIT POLICY pol_create_dblink
ACTIONS CREATE DATABASE LINK

55. Policy для DROP PUBLIC SYNONYM

CREATE AUDIT POLICY pol_drop_public_syn
ACTIONS DROP PUBLIC SYNONYM

56. Policy для ALTER SYSTEM

CREATE AUDIT POLICY pol_alter_system
ACTIONS ALTER SYSTEM

57. Policy для CREATE TABLESPACE

CREATE AUDIT POLICY pol_create_tablespace
ACTIONS CREATE TABLESPACE

58. Policy для DROP TABLESPACE

CREATE AUDIT POLICY pol_drop_tablespace
ACTIONS DROP TABLESPACE

59. Policy для AUDIT SYSTEM GRANT option use

CREATE AUDIT POLICY pol_grant_sys_priv
PRIVILEGES GRANT ANY PRIVILEGE

60. Включение сразу privilege и object policies

AUDIT POLICY pol_any_table,
             pol_exec_proc,
             pol_sel_orders

Еще 20 примеров

61. Проверка включённых unified policies

SELECT policy_name,enabled_option
FROM audit_unified_enabled_policies

62. Просмотр всех созданных policies

SELECT policy_name,audit_option,audit_option_type
FROM audit_unified_policies
ORDER BY policy_name,audit_option

63. Просмотр unified audit trail

SELECT event_timestamp,dbusername,action_name,object_schema,object_name
FROM unified_audit_trail
ORDER BY event_timestamp DESC

64. Фильтр trail только по пользователю

SELECT event_timestamp,action_name,return_code
FROM unified_audit_trail
WHERE dbusername = 'SCOTT'
ORDER BY event_timestamp DESC

65. Фильтр trail по policy name

SELECT event_timestamp,dbusername,action_name
FROM unified_audit_trail
WHERE unified_audit_policies LIKE '%POL_SEL_ORDERS%'

66. Просмотр только неуспешных действий

SELECT event_timestamp,dbusername,action_name,return_code
FROM unified_audit_trail
WHERE return_code <> 0
ORDER BY event_timestamp DESC

67. Просмотр только успешных действий

SELECT event_timestamp,dbusername,action_name
FROM unified_audit_trail
WHERE return_code = 0
ORDER BY event_timestamp DESC

68. Trail только по конкретной таблице

SELECT event_timestamp,dbusername,action_name
FROM unified_audit_trail
WHERE object_schema = 'OE'
AND object_name = 'ORDERS'

69. Trail только по хосту клиента

SELECT event_timestamp,dbusername,userhost
FROM unified_audit_trail
WHERE userhost = 'sales_24'

70. Trail по client identifier

SELECT event_timestamp,dbusername,client_identifier,action_name
FROM unified_audit_trail
WHERE client_identifier = 'sales_clerk'

71. Trail за текущий день

SELECT event_timestamp,dbusername,action_name
FROM unified_audit_trail
WHERE event_timestamp >= TRUNC(SYSDATE)

72. Подсчёт audit events по action_name

SELECT action_name,COUNT(*) AS cnt_val
FROM unified_audit_trail
GROUP BY action_name
ORDER BY cnt_val DESC

73. Подсчёт audit events по пользователю

SELECT dbusername,COUNT(*) AS cnt_val
FROM unified_audit_trail
GROUP BY dbusername
ORDER BY cnt_val DESC

74. Подсчёт ошибок аудита по return_code

SELECT return_code,COUNT(*) AS cnt_val
FROM unified_audit_trail
GROUP BY return_code
ORDER BY cnt_val DESC

75. Последние 10 событий по orders

SELECT event_timestamp,dbusername,action_name
FROM unified_audit_trail
WHERE object_name = 'ORDERS'
ORDER BY event_timestamp DESC
FETCH FIRST 10 ROWS ONLY

76. Policies, которые реально доступны в unified audit metadata

SELECT DISTINCT policy_name
FROM audit_unified_policies
ORDER BY policy_name

77. Policy для ADMINISTER KEY MANAGEMENT

CREATE AUDIT POLICY pol_key_mgmt
ACTIONS ADMINISTER KEY MANAGEMENT

78. Policy для CREATE MATERIALIZED VIEW

CREATE AUDIT POLICY pol_create_mv
ACTIONS CREATE MATERIALIZED VIEW

79. Policy для DROP MATERIALIZED VIEW

CREATE AUDIT POLICY pol_drop_mv
ACTIONS DROP MATERIALIZED VIEW

80. Политика для чувствительной таблицы salaries

CREATE AUDIT POLICY pol_salary_access
ACTIONS SELECT, UPDATE ON hr.salaries

Еще 20 примеров

81. Включение salary policy только для HR

AUDIT POLICY pol_salary_access
BY hr

82. Salary policy только на ошибки доступа

AUDIT POLICY pol_salary_access
BY hr
WHENEVER NOT SUCCESSFUL

83. Policy для CREATE ANY PROCEDURE privilege

CREATE AUDIT POLICY pol_create_any_proc
PRIVILEGES CREATE ANY PROCEDURE

84. Policy для ALTER ANY PROCEDURE privilege

CREATE AUDIT POLICY pol_alter_any_proc
PRIVILEGES ALTER ANY PROCEDURE

85. Policy для DROP ANY PROCEDURE privilege

CREATE AUDIT POLICY pol_drop_any_proc
PRIVILEGES DROP ANY PROCEDURE

86. Policy для ALTER DATABASE

CREATE AUDIT POLICY pol_alter_database
ACTIONS ALTER DATABASE

87. Policy для CREATE PROFILE

CREATE AUDIT POLICY pol_create_profile
ACTIONS CREATE PROFILE

88. Policy для DROP PROFILE

CREATE AUDIT POLICY pol_drop_profile
ACTIONS DROP PROFILE

89. Policy для CREATE AUDIT POLICY itself

CREATE AUDIT POLICY pol_create_audit_policy
ACTIONS CREATE AUDIT POLICY

90. Policy для ALTER AUDIT POLICY

CREATE AUDIT POLICY pol_alter_audit_policy
ACTIONS ALTER AUDIT POLICY

91. Policy для DROP AUDIT POLICY

CREATE AUDIT POLICY pol_drop_audit_policy
ACTIONS DROP AUDIT POLICY

92. Просмотр trail только по policy salary access

SELECT event_timestamp,dbusername,action_name,object_name
FROM unified_audit_trail
WHERE unified_audit_policies LIKE '%POL_SALARY_ACCESS%'

93. Просмотр trail по CREATE TABLE activity

SELECT event_timestamp,dbusername,sql_text
FROM unified_audit_trail
WHERE action_name = 'CREATE TABLE'

94. Просмотр trail по LOGON activity

SELECT event_timestamp,dbusername,return_code,userhost
FROM unified_audit_trail
WHERE action_name = 'LOGON'

95. Legacy-пример традиционного AUDIT TABLE для старых систем

AUDIT TABLE

96. Legacy-пример AUDIT SESSION

AUDIT SESSION

97. Legacy-пример AUDIT SELECT TABLE, INSERT TABLE

AUDIT SELECT TABLE, INSERT TABLE

98. Legacy-пример object audit по таблице

AUDIT SELECT, UPDATE
ON oe.orders

99. Legacy-пример только при ошибке

AUDIT SESSION
WHENEVER NOT SUCCESSFUL

100. Финальный пример: полноценная policy для чувствительных заказов с условием, включением и просмотром trail

CREATE AUDIT POLICY pol_sensitive_orders
ACTIONS SELECT, UPDATE, DELETE ON oe.orders
WHEN 'SYS_CONTEXT(''USERENV'',''HOST'') NOT IN (''sales_24'',''sales_12'')'
EVALUATE PER SESSION;

AUDIT POLICY pol_sensitive_orders
WHENEVER NOT SUCCESSFUL;

SELECT event_timestamp,dbusername,action_name,object_name,return_code
FROM unified_audit_trail
WHERE unified_audit_policies LIKE '%POL_SENSITIVE_ORDERS%'
ORDER BY event_timestamp DESC

Заключение

С AUDIT Oracle становится не просто базой, а системой с памятью.
Ты уже не гадаешь, кто сделал DROP,
кто менял TABLE,
кто трогал чувствительные строки и где были неуспешные попытки.
Для новых проектов правильнее мыслить через unified auditing:
создавать понятные policies, включать их точечно и читать следы в UNIFIED_AUDIT_TRAIL.
Это и безопаснее, и взрослее, и просто красивее с точки зрения архитектуры. :contentReference[oaicite:2]{index=2}

Официальная документация Oracle:
AUDIT (Unified Auditing)
Creating Custom Unified Audit Policies
UNIFIED_AUDIT_TRAIL
AUDIT (Traditional Auditing, legacy)


 

🔜 Следующая статья:

ASC в Oracle SQL — как управлять направлением сортировки данных


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии