是否可以向 Oracle 数据字典添加自定义元数据字段?

Is it possible to add a custom metadata field to Oracle Data Dictionary?

是否可以在列级别添加元数据字段(在 Oracle 数据字典中)?

目的是持有一个标志,标识 table 中的各个数据项已被匿名化。

我是一名分析师(不是 DBA),我正在使用 Oracle SQL Developer,它显示(并允许查询)COLUMN_NAME、DATA_TYPE、NULLABLE、我们的 Oracle 数据库的 DATA_DEFAULT、COLUMN_ID 和 COMMENTS 元数据字段(见图)。

我希望在此级别添加另一个元数据字段(本质上是添加第二个 'COMMENTS' 字段)以保存 'Anonymisation' 标志,以支持轻松查询我们标记的 -匿名数据。

如果可能(并且建议/支持table),对于描述启用此功能所需步骤的任何建议,我将不胜感激,然后我可以与我们的开发人员和 DBA 讨论。

[TL;DR] 不要这样做。另辟蹊径。


If it's advisable

永远不要修改数据字典; (除非 Oracle 支持告诉您)您可能会使您与 Oracle 的支持合同失效,并可能破坏数据库并使其无法使用。

If it's possible

不要这样做。

如果你真的想尝试,那还是不要。

如果您真的非常想尝试,然后找到一个您不关心的数据库(不关心位很重要!)并以 SYSDBA 用户身份登录并:

ALTER TABLE whichever_data_dictionary_table ADD anonymisation_flag VARCHAR2(10);

然后您可以测试数据库是否损坏(它可能不会立即损坏,但会在稍后某个时候损坏),但如果确实损坏,那么您几乎肯定不会得到 Oracle 的任何修复支持。

我们说过“不要这样做”吗……我们是认真的。

如您所知,您不应该那样做。

但是,没有什么能阻止您创建自己的 table,其中将包含此类信息。

例如:

SQL> CREATE TABLE my_comments
  2  (
  3     table_name      VARCHAR2 (30),
  4     column_name     VARCHAR2 (30),
  5     anonymisation   VARCHAR2 (10)
  6  );

Table created.

用一些数据填充它:

SQL> insert into my_comments (table_name, column_name)
  2    select table_name, column_name
  3    from user_tab_columns
  4    where table_name = 'DEPT';

3 rows created.

设置匿名标志:

SQL> update my_comments set anonymisation = 'F' where column_name = 'DEPTNO';

1 row updated.

当您想获取此类信息(以及来自 user_tab_columns 的更多数据时,请使用(外部)连接:

SQL> select u.table_name, u.column_name, u.data_type, u.nullable, m.anonymisation
  2  from user_tab_columns u left join my_comments m on m.table_name = u.table_name
  3                                                 and m.column_name = u.column_name
  4  where u.column_name = 'DEPTNO';

TABLE_NAME COLUMN_NAME     DATA_TYPE    N ANONYMISATION
---------- --------------- ------------ - ---------------
DEPT       DEPTNO          NUMBER       N F
DSV        DEPTNO          NUMBER       N
DSMV       DEPTNO          NUMBER       Y
EMP        DEPTNO          NUMBER       Y

SQL>

优点:您不会破坏数据库并且您将获得额外的信息。

缺点:您必须手动维护 table

简答:否

但是您可以在哪里保存这些信息?

在您的数据模型中。

Oracle 提供免费的数据建模解决方案,Oracle SQL Developer Data Modeler。它提供了将 table/view 列标记为敏感或 PII 的功能。

可以将这些相同的模型存储回您的数据库中,以便可以通过 SQL 访问它们。

一旦您标记了所有敏感信息 attributes/columns,并将其存回数据库,您就可以查询回来了。

免责声明:我在 Oracle 工作,我是 Data Modeler 的产品经理。