应用于:
oracle服务器 - 企业级版本 - 10.2.0.1.到11.2.0.2
文档中的信息应用于任何平台
目标:
解决方式可以应用于下面的一些情景:
#1.为TDE加密一个非加密的表
#2.为一个已经存在的加密表重新生成密钥或者改变加密算法
#3.从column模式到tablespace模式移除一个已加密的表
解决方式:
参照文档:
"一个表可以暂时的在加密开启的情况下访问写操作,列数据正在重新生成密钥,或者加密算法正在被改变。 你也可以在这个程序中使用在线表格定义来确保表格对写操作是可以用的"
以下是一个对于如何使用DBMS_REDEFINITION来重新生成密钥表的一个基本的例子。默认情况下,加密算法是AES192和AES256:
--对象的架构的所有者的用户名为admin
drop table test;
drop table temp_table;
create table test(id number, name varchar2(20) encrypt);
insert into test values(1,'Test username');
commit;
alter table test add constraint pk_id primary key(id);
create table temp_table as
select *
from test where 1=2;
(drop the NOT NULL constraints that have been defined on table temp_table as a result of the CTAS.)
(If the table to encrypt/decrypt/re-encrypt is partitioned, extract its definition with:
select dbms_metadata.get_ddl('TABLE','TEST','<test owner schema>') from dual;
remove all the attached constraints and use this definition to create the temp_table.)
alter table temp_table modify (name encrypt using 'aes256');
EXEC DBMS_REDEFINITION.can_redef_table('admin', 'test');
EXEC DBMS_REDEFINITION.start_redef_table('admin', 'test', 'temp_table');
DECLARE
num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
'ADMIN','TEST','TEMP_TABLE',DBMS_REDEFINITION.CONS_ORIG_PARAMS,
TRUE, TRUE, TRUE, FALSE, num_errors, TRUE);
END;
/
EXEC DBMS_REDEFINITION.SYNC_INTERIM_TABLE('admin', 'test', 'temp_table');
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('admin', 'test', 'temp_table');
Now the tables have swapped the encryption algorithm and table TEST has retained all its dependent objects. To check this, run the following queries:
SQL> select constraint_name from user_constraints where table_name='TEST';
CONSTRAINT_NAME
------------------------------
PK_ID
SQL> select constraint_name from user_constraints where table_name='TEMP_TABLE';
CONSTRAINT_NAME
------------------------------
TMP$$_PK_ID0
SQL> select * from user_encrypted_columns;
TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT
------------ ---------------- ----------------------------- -------
TEST NAME AES 192 bits key YES
TEMP_TABLE NAME AES 256 bits key YES
最后,删除中介表:
SQL> drop table temp_table;
这段注释没有覆盖所有的重定义的方面,像使用ROWID和不是主键来重定义一���表
限制条件:
重定义在一段时间不能做一些部分,因为在表中的所有模块必须同时用相同的算法加密