从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:\oracle\product\11.2.0\dbhome_1\admin\stream\wallets))
)
但是我建立了默认路径,也在sqlnet.ora文件中制定了路径(也是默认路径)仍然无法创建wallet,而且监听已经起不开,正确的方法是在sqlnet.ora文件中加入
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE)(METHOD_DATA=
(DIRECTORY=D:\oracle\product\11.2.0\dbhome_1\admin\stream\wallets))
)
SQL> alter system set encryption key identified by "super5281";
系统已更改。
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
已连接。
QL> 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
数据库装载完毕。
数据库已经打开。
Wallet关闭,加密的字段已不能查询。
SQL> conn stream/stream
已连接。
SQL> select * from test;
select * from test
*
第 1 行出现错误:
ORA-28365: Wallet 未打开
未被加密的字段可以查询。
SQL> select id from test;
ID
----------
1
2
打开wallet之后,加密的字段可以被查询。
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拥有的对象不能使用透明加密。
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 所拥有的对象
分享到:
相关推荐
Oracle 透明数据加密 (TDE) 能够加密存储在表和表空间中的敏感数据,例如手机号码,身份证号等,对于有权访问数据的数据库用户或应用程序,加密数据将被透明地解密。 TDE 可在存储介质或数据文件被盗时保护存储在...
在Oracle的最新版本10g R2中,出现最及时的技术应该是透明数据加密技术(Transparent Data Encryption,TDE)。 TDE用来对数据加密,通常 SQL 执行的应用程序逻辑不需要进行更改,仍能正常运行。 换言之,应用程序...
松下 KX-TDE100 TDE200 使用手册
TDE2-2021
SQL_2008_安全性——透明的_数据加密_TDE
TDE MSDN 说明: “透明数据加密”(TDE) 可对数据和日志文件执行实时 I/O 加密和解密。这种加密使用数据库加密密钥 (DEK),该密钥存储在数据库引导记录中以供恢复时使用。DEK 是使用存储在服务器的 master 数据库中...
TDE-2 前端开发TDE 2:创建Google的功能副本
注意:Sql server 2008以上的并且是企业版或开发版才支持TDE加密,注意数据库要打最新的版本补丁,此文档所述操作步骤基于企业版Sql Server 2014+Sp1补丁实现。
最完整的SQL2012 TDE加密教程,有全面的拓扑图、配置截图和步骤讲解。SQL server越来越完善了,TDE加密功能非常实用。这是最好的教程,没有之一。
使用差分算子改进粒子群优化算法,以增强优化基准函数的能力
ORACLE数据的加密 语句的加密及加密的方式 oracle钱夹
武汉中地数码公司的MAPGIS-TDE空间数据模型介绍
mapgis 二次开发框架搭建及通过用点线面要素等进行模型构建
一篇关于TDE使用介绍的文章,原本是繁体字的。比SQLServer2008中的联机丛书介绍的要详细。
对一个数据库管理员来说,当要保护你所支持的数据库时,安全是要考虑的最...SQL Server 2008推出了一个新的特性来保护数据库,它叫做透明数据加密(Transparent Data Encryption)——TDE,它对整个数据库提供了保护。
PUCPR_2020.2-IA-TDE02:TDE光纤总线系统框架,在去中心化之前运行PacMan
Oracle Advanced Security Transparent Data Encryption (TDE) Frequently Asked Questions (FAQ)
MapGis K9 TDE 平台的开发文档,需要的朋友可以看下