由于我们在创建表空间后产生的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:如果walletclose状态,此时加密表空间是不可用的,例如查询、修改都不允许

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.