当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

oracle10gR2新特性透明加密(TDE)及常见错误ORA-28353和ORA-28368简介

从10gR2开始,oracle推出了透明数据加密技术(Transparent Data Encryption,TDE)。有效的保护数据的安全。 使用透明加密的时候有可能遇到ORA-28353和ORA-28368错误。
下面是有关实验

SQL>create table test (id number,name varchar2(16) ENCRYPT NO SALT);
第 1 行出现错误:
ORA-28353: 无法打开 wallet
SQL> alter system set encryption key identified by "super5281";
alter system set encryption key identified by "super5281"
*
第 1 行出现错误:
ORA-28368: 无法自动创建 wallet

原因:$ORACLE_HOME/admin/$ORACLE_SID/wallet是存放密钥的默认目录,如果没有在sqlnet.ora文件中指定密钥存放的路径,没有此目录会报ORA-28368: 无法自动创建 wallet错误。
网上有很多关于此错误的文档,总的来说解决方法有两种
1. 创建密钥的默认存放目录

$ORACLE_HOME/admin/$ORACLE_SID/wallet

2. 在sqlnet.ora文件中指定密钥的存放目录
网上很多资料都说在sqlnet.ora文件中加入以下内容

ENCRYPTION_WALLET_LOCATION=
  (SOURCE=(METHOD=FILE)(METHOD_DATA=
    (DIRECTORY=D:oracleproduct11.2.0dbhome_1adminstreamwallets))
  )

但是我建立了默认路径,也在sqlnet.ora文件中制定了路径(也是默认路径)仍然无法创建wallet,而且监听已经起不开,正确的方法是在sqlnet.ora文件中加入

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ENCRYPTION_WALLET_LOCATION=
  (SOURCE=(METHOD=FILE)(METHOD_DATA=
    (DIRECTORY=D:oracleproduct11.2.0dbhome_1adminstreamwallets))
  )
SQL> alter system set encryption key identified by "xxxx";
系统已更改。
SQL> create table test (id number,name varchar2(16) ENCRYPT NO SALT);
表已创建。
SQL> insert into test values(1,'zhangsan');
已创建 1 行。
SQL> insert into test values(2,'lisi');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from test;
        ID NAME
---------- ----------------
         1 zhangsan
         2 lisi

如果此时关闭wallet,name字段将不能查询。(重启数据库,wallet默认关闭状态。)

SQL> conn / as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  313860096 bytes
Fixed Size                  1374304 bytes
Variable Size             176162720 bytes
Database Buffers          130023424 bytes
Redo Buffers                6299648 bytes
数据库装载完毕。
数据库已经打开。
SQL> conn stream/stream
已连接。
SQL> select * from test;
select * from test
              *
第 1 行出现错误:
ORA-28365: Wallet 未打开
但是未加密列是可以查询的。

SQL> select id from test;
        ID
----------
         1
         2
SQL> alter system set encryption wallet open identified by "super5281";
系统已更改。
SQL> select * from test;

        ID NAME
---------- ----------------
         1 zhangsan
         2 lisi

除了encrypt,加密列还有另外一个属性salt,默认情况下是salt,可以通过alter table table_name modiry (column_name column_type encrypt no salt)命令修改成no salt,只有no salt的加密列上才能创建索引

SQL> create index index_name on test(name);
索引已创建。
SQL> drop index index_name;
索引已删除。
SQL> alter table test modify(name varchar2(16) encrypt);
表已更改。
SQL> create index index_name on test(name);
create index index_name on test(name)
                           *
第 1 行出现错误:
ORA-28338: 不能同时使用 salt 值索引和加密列

Sys拥有的对象不能使用透明加密。

SQL> conn / as sysdba
已连接。
SQL> create table test (id number,name varchar2(16) ENCRYPT NO SALT);
create table test (id number,name varchar2(16) ENCRYPT NO SALT)
                             *
第 1 行出现错误:
ORA-28336: 不能加密 SYS 所拥有的对象

本文固定链接: http://www.dbdream.com.cn/2011/09/oracle10gr2%e6%96%b0%e7%89%b9%e6%80%a7%e9%80%8f%e6%98%8e%e5%8a%a0%e5%af%86%ef%bc%88tde%ef%bc%89%e5%8f%8a%e5%b8%b8%e8%a7%81%e9%94%99%e8%af%afora-28353%e5%92%8cora-28368%e7%ae%80%e4%bb%8b/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2011年09月07日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: oracle10gR2新特性透明加密(TDE)及常见错误ORA-28353和ORA-28368简介 | 信春哥,系统稳,闭眼上线不回滚!
关键字:

oracle10gR2新特性透明加密(TDE)及常见错误ORA-28353和ORA-28368简介:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter