#audit #exasolution
#аудит #окончательное решение
Вопрос:
Я рассматриваю, какая информация должна быть предоставлена в соответствии со статьей 15 (3) GDPR относительно использования Exasol и ExaPlus. У меня нет SELECT ANY DICTIONARY
системных привилегий, чтобы разобраться с этим вопросом самостоятельно.
Какие SQL-запросы создаются с помощью ExaPlus для создания меню, особенно в левой части.:
(1) Пользователи,
(2) Схемы (таблица и представления, ..),
(3) Соединения,
(4) Роли?
Хранятся ли эти запросы в системных таблицах, таких как EXA_DBA_AUDIT_SQL
и EXA_DBA_AUDIT_SESSIONS
? Можно предположить, что Auditing
флаг включен.
Для чего нужна запись USER_NAME
в EXA_DBA_AUDIT_SESSIONS
?
Как определить, было ли что-то выполнено ExaPlus или сделано самим пользователем?
Есть ли разница между локальной историей пользователя в ExaPlus и записями в системных таблицах Exasol для одного и того же пользователя?
Как администратор может отключить аудит в EXA_DBA_AUDIT_SQL
технических запросах на построение меню ExaPlus?
Ответ №1:
Графические клиенты баз данных, такие как DB Visualizer, DBeaver или Exaplus, отправляют запросы в базу данных Exasol, когда пользователь щелкает через браузер базы данных, чтобы просмотреть схемы, таблицы, представления и т.д. Это запросы к системным таблицам, таким как EXA_ALL_TABLES, EXA_ALL_COLUMNS и так далее. Также функции автозаполнения в других клиентах отправляют такие запросы.
Когда вы смотрите в системную таблицу EXA_DBA_SESSIONS (или EXA_ALL_SESSIONS), вы видите, что каждое окно Exaplus открывает два сеанса: например, один с CLIENT = ‘EXAplus 6.0.8’ и один с CLIENT = ‘[Meta] EXAplus 6.0.8’. Запросы на просмотр базы данных отправляются в рамках последнего «Мета» сеанса. Во-первых, чтобы не смешивать мета-запросы и ваши собственные запросы в таблицах аудита и т.д., И, во-вторых, чтобы не блокировать браузер схемы, когда в данный момент выполняется запрос.
Вы можете использовать следующий запрос, чтобы узнать, какие наборы состояний были отправлены в базу данных в рамках мета-сеанса Exaplus:
SELECT q.sql_text
FROM EXA_DBA_AUDIT_SESSIONS s JOIN EXA_DBA_AUDIT_SQL q ON s.SESSION_ID=q.SESSION_ID
WHERE s.client LIKE '[Meta] EXAplus %';
Для сеансов SQL client DB Visualizer вы не можете так просто отличить пользовательские сеансы от мета-сеансов. Для клиентского DBeaver это похоже на Exaplus. Вы находите значение типа «DBeaver-Meta 6.0.1.201903251040» в клиентском столбце EXA_ALL_SESSIONS, EXA_DBA_SESSIONS_LAST_DAY и EXA_DBA_AUDIT_SESSIONS.
Exaplus и другие клиенты имеют локальную историю запросов. Они сохраняются на клиентском компьютере. С другой стороны, EXA_DBA_AUDIT_SQL управляется базой данных. Каждый запрос, отправляемый в базу данных, записывается там. Но только если аудит включен в настройках базы данных в Exaoperation.
Выборочно включить аудит невозможно. Либо все, либо ни один из запросов не записывается в системные таблицы.
Что вы можете делать, так это периодически (например, один раз за ночь) вставлять все записи таблиц аудита, которые не принадлежат к мета-сеансам, в другую таблицу. А затем используйте УСЕЧЕНИЕ ЖУРНАЛОВ АУДИТА, чтобы очистить таблицы аудита.
Но обычно все это не обязательно, потому что должны регистрироваться как пользовательские запросы, так и мета-запросы — или ни один из них.
Вот некоторые запросы, которые Exaplus отправляет в базу данных Exasol при нажатии на схемы, таблицы, пользователей, роли и соединения:
select COLUMN_NAME, COLUMN_TYPE, COLUMN_IS_DISTRIBUTION_KEY, COLUMN_DEFAULT, COLUMN_IS_NULLABLE, COLUMN_IDENTITY, COLUMN_COMMENT from SYS.EXA_ALL_COLUMNS where COLUMN_SCHEMA='RF' and COLUMN_TABLE='TEST' order by COLUMN_ORDINAL_POSITION;
SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION from SYS.EXA_DBA_SYS_PRIVS;
select OBJECT_NAME, OBJECT_TYPE, OBJECT_ID, CREATED,LAST_COMMIT, OWNER, OBJECT_COMMENT, OBJECT_IS_VIRTUAL from SYS.EXA_ALL_OBJECTS where ((OBJECT_TYPE = 'TABLE') or (OBJECT_TYPE = 'VIEW')) and (ROOT_ID = 35510272);
select "OBJECT_NAME", "OBJECT_TYPE", "SCHEMA_NAME", "OBJECT_COMMENT"from SYS.EXA_SYSCAT;
SELECT GRANTEE, GRANTED_ROLE, ADMIN_OPTION from SYS.EXA_DBA_ROLE_PRIVS;
select OBJECT_NAME, OBJECT_TYPE, OBJECT_ID, CREATED,LAST_COMMIT, OWNER, OBJECT_COMMENT, OBJECT_IS_VIRTUAL from SYS.EXA_ALL_OBJECTS where ((OBJECT_TYPE = 'TABLE') or (OBJECT_TYPE = 'VIEW')) and (ROOT_ID = 35510272);
SELECT GRANTEE, GRANTED_CONNECTION, ADMIN_OPTION from SYS.EXA_DBA_CONNECTION_PRIVS;
SELECT C.CONSTRAINT_TYPE C_TYPE, C.CONSTRAINT_NAME C_NAME, ORDINAL_POSITION, COLUMN_NAME, REFERENCED_SCHEMA, REFERENCED_TABLE, REFERENCED_COLUMN, CONSTRAINT_ENABLED FROM SYS.EXA_ALL_CONSTRAINT_COLUMNS CC join SYS.EXA_ALL_CONSTRAINTS C on C.CONSTRAINT_SCHEMA = CC.CONSTRAINT_SCHEMA and C.CONSTRAINT_TABLE = CC.CONSTRAINT_TABLE and C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME WHERE C.CONSTRAINT_SCHEMA like 'RF' and C.CONSTRAINT_TABLE like 'TEST' and CC.CONSTRAINT_SCHEMA like 'RF' and CC.CONSTRAINT_TABLE like 'TEST' ORDER BY C.CONSTRAINT_NAME,ORDINAL_POSITION
select OBJECT_NAME, OBJECT_TYPE, OBJECT_ID, ROOT_ID, CREATED, LAST_COMMIT, OWNER, OBJECT_COMMENT from SYS.EXA_DBA_OBJECTS where ((ROOT_ID = 35510272) and ((OBJECT_TYPE = 'FUNCTION') or (OBJECT_TYPE = 'PROCEDURE') or (OBJECT_TYPE = 'SCRIPT')));
Комментарии:
1. Идеально! Большое вам спасибо!