参考文件
http://docs.oracle.com/cd/E11882_01/network.112/e40393/asotrans.htm#ASOAG600
http://www.oracle.com/technetwork/cn/topics/security/tde-faq-099527-zhs.html#A11066
http://www.oracle.com/technetwork/cn/tutorials/tde-096772-zhs.html
http://www.oracle.com/technetwork/database/security/tde-faq-093689.html#A12010
TDE(Transparent Data Encryption透明数据加密)使用场景
1.保护敏感数据,禁止未授权的访问,只有打开钱包才能查看数据。
2.防止数据丢失,当加密表空间的数据文件被恶意拷贝走后,如果你没有密钥是无法还原数据的。
3.防止数据被截获,当在网络传输时加密后的信息更安全,即使截获了也无法得知其中内容。
TDE可支持的加密算法种类 AES(Advanced Encryption Standard高级加密标准) 是DES的升级版
① AES192 192位密钥加密
② AES128(default) 128位密钥加密
③ AES256 256位密钥加密
④ 3DES168 168位密钥加密 DES(Data Encryption Standard数据加密标准)
AES标准是美国联邦政府采用的一套加密标准,用来替代原先的DES标准。AES属于对称性加密算法(加密与解密使用同一密钥进行),反之非对称性加密算法(加密与解密使用不同密钥进行)例如 RSA标准有公钥与私钥。
Oracle 11G数据库加密表空间encrypted tablespaces的使用介绍。Oracle Advanced Security TDE(Transparent Data Encryption透明数据加密)提供了业界先进的数据库加密解决方案。
TDE自动对写入到Oracle数据库中的数据进行加密,既可以对像信用卡号和社会保险号这样的个别应用程序表列进行加密,也可以加密整个表空间。
备份数据库时,加密的文件在目标介质上仍保持其加密状态,能保护其上的信息不会外泄。
11g的表空间加密依赖于oracle wallet以及wallet中的密钥,要先创建一个“wallet钱包”,这个钱包里面保存着密钥,Oracle就是通过这个密钥对表空间进行加密和解密。既可以手动打开wallet (每次数据库启动以后,需要手动打开wallet),也可以自动打开wallet (每次数据库启动以后会自动打开)。
默认情况下,每次数据库被关闭,钱包也被关闭。加密表空间与wallet的关系如下
1.Oracle表空间的加密与解密完全是基于wallet钱包中的密钥进行的。
2.如果wallet是open状态,可以使用其中的密钥,进行加密与解密。
3.如果wallet是close状态,此时加密表空间是不可用的,例如查询、修改都不允许
4.删除表是不需要密钥的,无论wallet是open或close状态,可直接删除。
查看oracle数据库安装了哪些组件
SQL>select * from voption;
看一下,当前的数据库是否安装了oracle 高级安全组件,oracle是否安装了相应的加密算法。
adapters
2、指定钱包存放位置
select value from v$option
select comp_name,version,status from DBA_REGISTRY
mkdir -p ORACLE_SID/wallet
在sqlnet.ora 文件里添加: ENCRYPTION_WALLET_LOCATION 和WALLET_LOCATION参数。
默认位置是:ORACLE_SID/wallet。
–指定ORACLEWALLET的位置,这里使用ORACLE_HOME/network/admin,在sqlnet.ora里添加如下内容:
WALLET_LOCATION=
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY =ORACLE_SID/wallet)
)
)
先创建自动登录钱夹
orapki wallet create -wallet ORACLE_SID/wallet -auto_login -pwd wallet1234
主加密密钥
sqlplus / as sysdba
alter system set encryption key identified by wallet1234;
–添加完之后,重启listener,使参数生效。
创建wallet的方法分别有如下几种:
–> 手动调用OWM 进行GUI图形界面进行操作
–> 手工运行mkstore命令创建
–> alter system set encryption key identified by “xxxxx”;
查看一下密钥信息,只有一条MASTER的
[oracle@tianbaobao wallet]$ mkstore -wrl . -list
orapki wallet display -wallet .
orapki wallet display -wallet /u01/app/oracle/admin/don12/wallet
数据库启动自动打开钱包 需验证
orapki wallet create -wallet /u01/app/oracle/admin/dbrac1/wallet -auto_login
mkstore -wrl /home/ora11g/admin/roger/wallet -create
在wallet里面创建密钥key,创建后自动打开wallet,密码"oracle"不加引号时,后面使用时也不需要加引号
alter system set encryption key identified by oracle;
alter system set encryption key identified by “oracle”;
如果指定的目录中不存在加密钱夹,则系统将创建加密钱夹 ( ewallet.p12)、打开此钱夹并创建/重新创建 TDE 的万能密钥。
如果指定目录中存在加密钱夹,则系统将打开此钱夹并创建/重新创建 TDE 的万能密钥。
注:只有拥有“ alter system”权限的用户才能创建万能密钥或打开钱夹。
万能密钥只能创建一次,除非您想要使用新的加密密钥重新加密数据!!!
创建加密表空间
创建加密表空间使用ENCRYPTION 选项,通过USING 选项指定加密算法,默认使用AES128算法。注意,storage 选项必须指定ENCRYPT。 使用了表空间加密后就不允许使用NO SALT 选项。
注意: 存在在加密表空间里的数据,我们不能直接通过HEX的编辑器或者strings命令直接查看数据文件里的内容。 而如果是普通的数据文件,我么可以直接在操作系统层面查看数据文件里的内容。
CREATE TABLESPACE encrypted_jm
DATAFILE’D:\app\oradata\don\JM.DBF’ SIZE 1024M
AUTOEXTEND ON NEXT 10M
ENCRYPTION USING ‘AES256’
DEFAULT STORAGE(ENCRYPT);
–查看表空间加密情况:
SELECT tablespace_name, encrypted FROM dba_tablespaces where encrypted=‘YES’;
一般表空间不能转换成加密表空间。 可以使用export/import,alter database…move… 或者create table …as select * from … 来进行转换。或者使用在线重定义的方法
测试表空间加密
创建测试表
CREATE TABLE zxdjm (
id NUMBER(10),
data VARCHAR2(50)
)
TABLESPACE encrypted_jm;
创建测试表索引
CREATE INDEX idx_id ON zxdjm(id) TABLESPACE encrypted_jm;
插入数据
INSERT INTO zxdjm (id, data) VALUES(1, ‘This is a secret!’);
select * from vencryption_wallet; 查看钱包状态
select * from gvencryption_wallet;
select * from sys.enc
查看加密表空间的秘钥
select * from VENCRYPTED_TABLESPACES;
select * FROM XKZEKMENCWAL;
alter system set wallet open identified by oracle; 打开钱包
alter system set wallet close identified by oracle; 关闭钱包11gR2
alter system set wallet close; 关闭钱包11gR1
查看加密表空间的加密方法
SELECT NAME, ENCRYPTIONALG ENCRYPTEDTS
FROM VTABLESPACE
WHERE VENCRYPTED_TABLESPACES.TS# = VTABLESPACE.TS#;




