由于我们在创建表空间后产生的dbf数据文件是没有加密的二进制文件,通过简单的转储或者strings便能查看里面的数据,所以存在着数据泄露的隐患,本文Raksmart美国服务器给大家说一下通过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才开始有该功能 推荐阅读:OGG的安装与配置
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个字符,且密码种必须带有数字或者特殊字符,不然回报以下错误 更多内容请阅读:RLWRAP的安装与注意事项
Invalid
password:Passwords must have a minimum length of eight characters and contain
alphabetic characters combined with numbers or special characters.