【IT168 技术】在这里,您在列 SSN 和 FOLIO_ID 上使用了 TDE,它们现在以加密方式存储在表本身。但是,当用户从表中选择时,她看到以明文表示的数据,因为在检索过程中已经完成了解密。如果磁盘被盗,则包含在表段中的信息仍然保持加密状态。盗窃者需要表密钥才能看到加密的值,但是要获得表密钥,他需要功能较多密钥,而功能较多密钥存储在外部,因此无法获得。
注意列 SSN 和 FOLIO_ID 后面的子句,这些子句指定 ENCRYPT 使用 128 位高级加密标准。
数据库拥有预先配置的钱夹。要设置钱夹口令,可使用命令:
以下是代码片段:
alter system set encryption key authenticated BY "topSecret";
如果还未创建钱夹,该命令将先创建钱夹,然后将口令设置为“topSecret”(区分大小写)。然后您就可以开始在表的创建和更改期间将加密用于列定义。
为外部表加密
在以上示例中,我使用散列表为列加密。您还可以在外部表上使用 TDE。例如,如果您希望生成一个包含 ACCOUNTS 的数据的转储文件,以便发送到不同的地点,则可以使用简单的 ENCRYPT 子句。
create table account_ext
organization external
(
type oracle_datapump
default directory dump_dir
location ('accounts_1_ext.dmp',
'accounts_2_ext.dmp',
'accounts_3_ext.dmp',
'accounts_4_ext.dmp')
)
parallel 4
as
select
ACC_NO,
FIRST_NAME,
LAST_NAME,
SSN ENCRYPT IDENTIFIED BY "topSecret",
ACC_TYPE,
FOLIO_ID ENCRYPT IDENTIFIED BY "topSecret",
SUB_ACC_TYPE,
ACC_OPEN_DT,
ACC_MOD_DT
from accounts;
organization external
(
type oracle_datapump
default directory dump_dir
location ('accounts_1_ext.dmp',
'accounts_2_ext.dmp',
'accounts_3_ext.dmp',
'accounts_4_ext.dmp')
)
parallel 4
as
select
ACC_NO,
FIRST_NAME,
LAST_NAME,
SSN ENCRYPT IDENTIFIED BY "topSecret",
ACC_TYPE,
FOLIO_ID ENCRYPT IDENTIFIED BY "topSecret",
SUB_ACC_TYPE,
ACC_OPEN_DT,
ACC_MOD_DT
from accounts;
在文件 accounts_*_ext.dmp 中,SSN 和 FOLIO_ID 的值不会是明文,而是加密形式。如果您希望使用这些文件作为外部表,则必须提供 topSecret 作为口令以读取这些文件。
在这里您可以看到,TDE 是访问控制的理想补充(而不是替代)。