使用 ExaPlus 创建哪些 SQL 查询以在左侧生成菜单(架构、table 和视图、.. 连接)?

What SQL queries are created with ExaPlus to produce the menu in the left side (schema, table & views,.. connections)?

我正在考虑应根据 GDPR 第 15 (3) 条提供有关 Exasol 和 ExaPlus 使用的哪些信息。我没有 SELECT ANY DICTIONARY 系统权限,无法自己解决这个问题。

使用 ExaPlus 创建了哪些 SQL 查询以在左侧生成菜单,尤其是:

(1) 个用户,

(2) 架构(table 和视图,..),

(3) 个连接,

(4) 角色?

这些查询是否保存在系统 table 中,例如 EXA_DBA_AUDIT_SQLEXA_DBA_AUDIT_SESSIONS?您可以假设 Auditing 标志已启用。

EXA_DBA_AUDIT_SESSIONSUSER_NAME 的条目是什么?

如何判断某件事是ExaPlus执行的还是用户自己完成的?

用户在 ExaPlus 中的本地历史记录与同一用户在 Exasol 系统中的条目 tables 之间是否存在差异?

管理员如何禁用技术 ExaPlus 菜单构建查询的 EXA_DBA_AUDIT_SQL 审核?

当用户通过数据库浏览器单击以检查模式、tables、视图等时,图形数据库客户端(如 DB Visualizer、DBeaver 或 Exaplus)会向 Exasol 数据库发送查询。这些是对系统的查询table如EXA_ALL_TABLES、EXA_ALL_COLUMNS等。其他客户端中的自动完成功能也会发送此类查询。

当您查看系统 table EXA_DBA_SESSIONS(或 EXA_ALL_SESSIONS)时,您会看到每个 Exaplus window 打开两个会话:例如,一个 CLIENT = 'EXAplus 6.0.8' 和一个带有 CLIENT = '[Meta] EXAplus 6.0.8'。浏览数据库的请求在后一个 "Meta" 会话中发送。首先,不要在审计 tables 等中混合元查询和您自己的查询,其次,当当前查询是 运行.

时不要阻止模式浏览器

您可以使用以下查询找出在 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 客户端 DB Visualizer 的会话,您无法轻易区分用户会话和元会话。对于客户端 DBeaver,它类似于 Exaplus。您在 EXA_ALL_SESSIONS、EXA_DBA_SESSIONS_LAST_DAY 和 EXA_DBA_AUDIT_SESSIONS.

的 CLIENT 列中找到类似 "DBeaver-Meta 6.0.1.201903251040" 的值

Exaplus 和其他客户端具有本地查询历史记录。这些保存在客户端机器上。另一方面,EXA_DBA_AUDIT_SQL 由数据库管理。发送到数据库的每个查询都写在那里。但前提是在 Exaoperation 的数据库设置中启用了审计。

无法有选择地启用审核。所有或 none 的查询都写入系统 tables.

您可以定期(例如,每晚一次)将不属于元会话的所有审核条目 table 插入另一个 table。然后使用TRUNCATE AUDIT LOGS清空审计tables.

但通常情况下,这一切都不是必需的,因为用户查询和元查询都应该被记录 - 或者其中 none 个。

以下是 Exaplus 在单击模式、tables、用户、角色和连接时发送到 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')));