是否可以向 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 的产品经理。
是否可以在列级别添加元数据字段(在 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 的产品经理。