0

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

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

(1) 用户,

(2)模式(表和视图,..),

(3) 连接,

(4) 角色?

这些查询是否保存在像EXA_DBA_AUDIT_SQL和这样的系统表中EXA_DBA_AUDIT_SESSIONS?您可以假设该Auditing标志已启用。

USER_NAMEin的条目是EXA_DBA_AUDIT_SESSIONS什么?

如何确定某事是由 ExaPlus 执行的还是由用户自己完成的?

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

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

4

1 回答 1

0

当用户单击数据库浏览器以检查模式、表、视图等时,图形数据库客户端(如 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 元会话中哪些 statemets 被发送到数据库:

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 的数据库设置中启用了审计。

无法选择性地启用审计。所有查询或没有查询都写入系统表中。

您可以做的是定期(例如,每晚一次)将不属于元会话的审计表的所有条目插入另一个表中。然后使用 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')));
于 2019-03-28T13:14:10.773 回答