Oracle Wallet 的初步使用和维护

 

1) Wallet作用

从Oracle10gR2开始, 通过使用Oracle Wallet达到任意用户不使用密码登录数据库(非操作系统认证方式), 这对在shell中要使用用户密码登录数据库进行操作的脚本来说是非常有用的, 可以不暴露用户密码. 比如在Oracle客户端通过mkstore命令设置Wallet认证信息, 然后通过"sqlplus /@connect_string"方式就可以直接连接数据库.

本例是让u_test用户无需使用密码登录系统, mkstore用法如下:

$ $ORACLE_HOME/bin/mkstore

mkstore [-wrl wrl] [-create] [-createSSO] [-delete] [-deleteSSO] [-list] [-createEntry alias secret] [-viewEntry alias] [-modifyEntry alias secret] [-deleteEntry alias] [-help]

2) 创建Wallet, 存放于某目录下

$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet -create

Enter password:<输入钱包密码>

Enter password again:<确认钱包密码>

$ ll $ORACLE_HOME/network/admin/wallet

total 16

-rw------- 1 oracle oinstall 7940 Sep 24 13:46 cwallet.sso

-rw------- 1 oracle oinstall 7912 Sep 24 13:46 ewallet.p12

3) 建立网络连接串, 注意每个网络连接串对应一个数据库用户

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

db_utest =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = DataGuard)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = MNTR.LK)

)

)

4) 加入用户认证信息到Wallet

其中db_utest是前面设置的网路连接串, "iamENCY3_"是用户u_test的密码.

$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet -createCredential db_utest u_test "iamENCY3_"

Enter wallet password:<输入钱包密码>

Create credential oracle.security.client.connect_string1

5) 确认用户认证信息已经加入到Wallet

$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet -listCredential

Enter wallet password:<输入钱包密码>

List credential (index: connect_string username)

1: db_utest u_test

6) 加入Wallet位置信息到sqlnet.ora

$ vi $ORACLE_HOME/network/admin/sqlnet.ora

WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/app/oracle/product/10.2.0/db_1/network/admin/wallet)))

SQLNET.WALLET_OVERRIDE=TRUE

7) 登录OWM(图形界面), 确认是否自动登录(默认是), 本步只是确认一下可忽略

$ $ORACLE_HOME/bin/owm &

先open目录/u01/app/oracle/product/10.2.0/db_1/network/admin/wallet下的Wallet, 然后从菜单栏里查看"Auto Login"是否已经选中.

8) 登录测试

$ sqlplus /@db_utest

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Sep 24 14:05:17 2009

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show user;

USER is "U_TEST"

登录成功, 设置完毕!以后就可以在shell里直接使用"sqlplus /@db_utest"登录数据库操作了, 无需设置密码.

9) 修改用户密码测试

SQL> alter user u_test identified by "iamENCY3_2";

SQL> exit

$ sqlplus /@db_utest

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Sep 24 14:07:05 2009

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

ERROR:

ORA-01017: invalid username/password; logon denied

10) 如果修改了用户密码, 则需要重新修改认证信息

$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet/ -modifyCredential db_utest u_test "iamENCY3_2"

Enter wallet password:<输入钱包密码>

Modify credential

Modify 1

11) 删除Wallet认证的方法

$ $ORACLE_HOME/bin/mkstore -wrl $ORACLE_HOME/network/admin/wallet/ -deleteCredential db_utest

Enter wallet password:<输入钱包密码>

Delete credential

Delete 1

--END--


oracle Wallet的使用(即内部加密技术TDE(Transparent Data Encryption ))

1. TDE是Oracle10gR2中推出的一个新功能,使用时要保证Oracle版本是在10gR2或者以上
--查看oracle版本:
select * from v$version;

2、创建一个新目录,并指定为Wallet目录
D:oracleproduct10.2.0adminora10ora_wallet

3. 设置wallet目录,在参数文件sqlnet.ora中,按照下面的格式加入信息:
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)
(METHOD_DATA=(DIRECTORY=D:oracleproduct10.2.0adminora10ora_wallet)))

4. 创建master key文件,指定wallet密码,使用SYS用户登入系统,建立加密文件
SQL> alter system set encryption key identified by "wallet";
System altered

-- 密码"wallet"不加引号时,后面使用时也不需要用引号
此时在设置的目录下,多出一个Personal Information Exchange类型的文件,相当于我们生成的master key文件。D:oracleproduct10.2.0adminora10ora_walletewallet.p12

5、启动、关闭Wallet
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet";
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet"
ORA-28354: wallet 已经打开

SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE; --关闭
System altered

SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet"; --打开
System altered
到此,已经成功配置了Wallet,创建了master key。

下面看如何使用TDE进行数据加密:

加密数据列:
对数据列加密是TDE一个常用的功能。常需要对数据库中某个表的某个敏感数据进行加密处理,方式信息的外泄。

首先,在定义数据表中的数据列(或者修改数据列)的时候,使用ENCRYPT进行标注。表示这个字段是使用加密保护的重要字典。
--建临时表:
create table t_tmp_emplorey
as
select * from emplorey t

--加密数据列,使用了ENCRYPT进行标志,表明需要对这个字段进行加密处理,采用默认的加密配置。
alter table scott.t_tmp_emplorey modify (sal encrypt);

注意:在默认不指定的情况下,Oracle在加密之前,对明文都要进行salt处理。所谓salt处理是一种强化加密数据的方法。通过在加密前明文中掺入一个随机字符串,来强化加密层级,防止进行字典攻击和其他类型的破解操作。如果不需要进行salt处理,就是在ENCRYPT后面加 No Salt。

--例: alter table scott.t_tmp_emplorey modify (sal encrypt no salt);

--指定加密算法
alter table scott.t_tmp_emplorey modify (sal encrypt using '3DES168');

--如果要对一个已经加密处理的数据列,解除加密,使用alter table…和DECRYPT关键字就可以实现。
SQL> alter table scott.t_tmp_emplorey modify (sal DECRYPT) ;
Table altered
--解除加密后,关闭Wallet后,查询数据不受影响。

6. 对查询、索引的影响:
查询结果似乎和一般的没有差别,但是如果关闭了解密Wallet会如何?
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
System altered

--再次查询时报错
select * from scott.t_tmp_emplorey t;
ORA-28365: Wallet 未打开

--能够查找到数目
select count(1) from scott.t_tmp_emplorey t;

--对索引的影响,如果列加密使用了salt,在对该列进行索引的时候,会报错。:
SQL> create index ind_t_tmp_emplorey on t_tmp_emplorey(sal);

create index ind_t_tmp_emplorey on t_tmp_emplorey(sal);
ORA-28338: 无法使用 salt 值加密索引列

SQL> create index ind_t_tmp_emplorey on t_tmp_emplorey(EMPNO);
Index created
--没有加密的列可以建立索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值