由于我们在创建表空间后产生的dbf数据文件是没有加密的二进制文件,通过简单的转储或者strings便能查看里面的数据
所以存在着数据泄露的隐患,我们可以通过wallets方法对创建的表空间进行加密。
加密原理:通过建立Wallet 文件,来保存主密钥,主密钥是加密算法中用于加密或解密的主密码串,一般是随机生成。
加密算法使用主密钥或基于主密 钥其生成的衍生密钥,对原始数据进行加密。只有使用主密钥或配套的衍生密钥,才能对加密数据进行解 密。
建立 Wallet 文件时要设定该密码,打开和关闭 Wallet 文件都须要提供正确密码
一、创建加密表空间
创建wallets文件夹
[oracle@potato ~]$ mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1/wallets
在sqlnet.ora文件种指定wallets文件夹位置
[oracle@potato admin]$ vi $ORACLE_HOME/network/admin/sqlnet.ora
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=file)
(METHOD_DATA= (DIRECTORY=/u01/app/oracle/product/11.2.0/dbhome_1/wallets)
)
)
查看当前数据库版本,必须是11.1以上,因为只有11.1才开始有该功能
SQL> SHOW PARAMETER COMPATIBLE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 11.2.0.0.0
建立 Wallet 文件
SQL> alter system set encryption key identified by "tomato_16";
System altered.
我们可以看到wallets文件夹下面产生了一个新的文件
[oracle@potato wallets]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/wallets
[oracle@potato wallets]$ ll
total 4
-rw-r--r-- 1 oracle oinstall 1573 Dec 14 15:30 ewallet.p12
ps:wallets文件夹下存放的信息是主密钥,丢失了该文件将无法解密表空间,即该表空间将无法访问
查看 Wallet 文件状态
SQL> col WRL_TYPE format a10
SQL> col WRL_PARAMETER format a50
SQL> col STATUS format a10
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS
---------- -------------------------------------------------- ----------
file /u01/app/oracle/product/11.2.0/dbhome_1/wallets OPEN
创建表空间并加密,可用加密算法有AES192 / 3DES168 / AES128 / AES256,默认是AES128
我们这里指定使用3DES168算法
SQL> create tablespace mytest datafile '/u01/app/oracle/oradata/orcl/mytest01.dbf' size 100m encryption using '3DES168' default storage(encrypt);
Tablespace created.
查看表空间是否加密
SQL> select tablespace_name, encrypted from dba_tablespaces;
TABLESPACE_NAME ENC
------------------------------ ---
SYSTEM NO
SYSAUX NO
UNDOTBS1 NO
TEMP NO
USERS NO
EXAMPLE NO
MYTEST YES
7 rows
查看加密信息
SQL> select * from v$encrypted_tablespaces;
TS# ENCRYPT ENC
---------- ------- ---
ENCRYTPEDKEY
----------------------------------------------------------------
MASTERKEYID BLOCKS_ENCRYPTED BLOCKS_DECRYPTED
-------------------------------- ---------------- ----------------
7 3DES168 YES
612598C962DDEC27F8C6FA4AB040B71D59D4DDF2901B83E00000000000000000
059D5A6FB4A34F2FBFC5FF6EB5CD78EC
二、关闭和开启加密
SQL> alter system set encryption wallet close identified by "tomato_16 ";
System altered.
ps:如果wallet是close状态,此时加密表空间是不可用的,例如查询、修改都不允许
SQL> alter system set encryption wallet open identified by "tomato_16 ";
System altered.
三、自动开启加密
由于数据库重启之后,加密会自动关闭
SQL> col WRL_PARAMETER format a40
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS
-------------------- ---------------------------------------- ------------------
file /u01/app/oracle/product/11.2.0/dbhome_1/ OPEN
wallets
SQL> startup force;
SQL> col WRL_PARAMETER format a40
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS
-------------------- ---------------------------------------- ------------------
file /u01/app/oracle/product/11.2.0/dbhome_1/ CLOSED
wallets
所以我们可以通过以下方式,让它在数据库开启时自启
[oracle@potato admin]$ orapki wallet create -wallet /u01/app/oracle/product/11.2.0/dbhome_1/wallets -auto_login -pwd tomato_16
SQL> startup force;
SQL> col WRL_PARAMETER format a40
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS
-------------------- ---------------------------------------- ------------------
file /u01/app/oracle/product/11.2.0/dbhome_1/ OPEN
wallets
注意:设置自动是对密码有要求的,必须长度大于等于8个字符,且密码种必须带有数字或者特殊字符,不然回报以下错误
Invalid password:Passwords must have a minimum length of eight characters and contain alphabetic characters combined with numbers or special characters.
还有第二种方法,就是使用图形化工具——owm
这个也比较简单,这里便不多做演示了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31386161/viewspace-2130584/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31386161/viewspace-2130584/