Какие SQL-запросы создаются с помощью ExaPlus для создания меню слева (схема, таблица и представления, ... соединения)? - PullRequest
0 голосов
/ 26 марта 2019

Я рассматриваю, какую информацию следует предоставить в соответствии со статьей 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 Ответ

0 голосов
/ 28 марта 2019

Клиенты графической базы данных, такие как 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 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 включен аудит.

Невозможно выборочно включить аудит. Все или ни один из запросов не записан в системные таблицы.

То, что вы можете сделать, это периодически (например, раз в ночь) вставлять все записи таблиц аудита, которые не принадлежат мета-сеансам, в другую таблицу. А затем используйте TRUNCATE AUDIT LOGS для очистки таблиц аудита.

Но обычно в этом нет необходимости, поскольку и пользовательские запросы, и мета-запросы должны регистрироваться - или ни один из них.

Вот некоторые запросы, которые 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')));
...