Use TDE to protect confidential data, such as credit card and social security numbers, stored in table columns. You can also use TDE to encrypt entire tablespaces.
用TDE保护机密的数据,例如存储在表列中的信用卡与社会保障号,也可以使用TDE加密全部的表空间。
Note:
Oracle Database 11g Release 1 (11.1) and higher versions ensure greater security by protecting data in temporary tablespaces during operations such as JOIN and SORT. The data in temporary tablespaces stays encrypted during these operations.ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/u01/ora_wallet)))2、创建master key文件,指定wallet密码,使用SYS用户登入系统,建立加密文件
The master encryption key should only be created once, unless you want to reencrypt your data with a new encryption key.
Only users with the ALTER SYSTEM privilege can create a master encryption key or open the wallet.
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "wallet";
-- 密码"wallet"不加引号时,后面使用时也不需要用引号
此时在设置的目录下,多出一个Personal Information Exchange类型的文件,相当于我们生成的master key文件。/u01/ora_wallet/ewallet.p12
3、启动、关闭WalletSQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet";
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
CREATE TABLE cust_payment_info (first_name VARCHAR2(11), last_name VARCHAR2(10), order_number NUMBER(5), credit_card_number VARCHAR2(16) ENCRYPT NO SALT, active_card VARCHAR2(3));
INSERT INTO cust_payment_info VALUES ('Jon', 'Oldfield', 10001, '5446959708812985','YES');
INSERT INTO cust_payment_info VALUES ('Chris', 'White', 10002, '5122358046082560','YES');
INSERT INTO cust_payment_info VALUES ('Alan', 'Squire', 10003, '5595968943757920','YES');
INSERT INTO cust_payment_info VALUES ('Mike', 'Anderson', 10004, '4929889576357400','YES');
INSERT INTO cust_payment_info VALUES ('Annie', 'Schmidt', 10005, '4556988708236902','YES');
INSERT INTO cust_payment_info VALUES ('Elliott', 'Meyer', 10006, '374366599711820','YES');
INSERT INTO cust_payment_info VALUES ('Celine', 'Smith', 10007, '4716898533036','YES');
INSERT INTO cust_payment_info VALUES ('Steve', 'Haslam', 10008, '340975900376858','YES');
INSERT INTO cust_payment_info VALUES ('Albert', 'Einstein', 10009, '310654305412389','YES');
所有插入到credit_card_number列中的数据都以加密的形式存储在磁盘上。CREATE INDEX cust_payment_info_idx ON cust_payment_info (credit_card_number);3、将表中已有的列修改为加密列
SQL> ALTER TABLE employees MODIFY (emp_ssn ENCRYPT);修改后的状态
SQL> DESC employees Name Null? Type ----------------------------------------- -------- ---------------------------- FIRSTNAME VARCHAR2(11) LASTNAME VARCHAR2(10) EMP_SSN VARCHAR2(9) ENCRYPT DEPT VARCHAR2(20)4、创建加密表空间
SQL> CREATE TABLESPACE securespace 2 DATAFILE '/u01/oradata/orcl11/secure01.dbf' 3 SIZE 150M 4 ENCRYPTION 5 DEFAULT STORAGE(ENCRYPT);5、在加密表空间上创建表
SQL> CREATE TABLE customer_payment_info 2 (first_name VARCHAR2(11), 3 last_name VARCHAR2(10), 4 order_number NUMBER(5), 5 credit_card_number VARCHAR2(16), 6 active_card VARCHAR2(3))TABLESPACE securespace;
| Column | Datatype | NULL | Description |
|---|---|---|---|
|
OWNER |
VARCHAR2(30) |
NOT NULL |
Owner of the table |
|
TABLE_NAME |
VARCHAR2(30) |
NOT NULL |
Name of the table |
|
COLUMN_NAME |
VARCHAR2(30) |
NOT NULL |
Name of the column |
|
ENCRYPTION_ALG |
VARCHAR2(29) |
Encryption algorithm used to protect secrecy of data in this table:
|
|
|
SALT |
VARCHAR2(3) |
Indicates whether the column is encrypted with SALT (YES) or not (NO) |
|
|
INTEGRITY_ALG |
VARCHAR2(12) |
Integrity algorithm used for the table:
|
·DBA_ENCRYPTED_COLUMNS
TS#
NUMBER
Tablespace number
ENCRYPTIONALG
VARCHAR2(7)
Encryption algorithm:
NONE
3DES168
AES128
AES192
AES256
ENCRYPTEDTS
VARCHAR2(3)
Indicates whether the tablespace is encrypted (YES) or not (NO)
WRL_TYPE
VARCHAR2(20)
Type of the wallet resource locator (for example, FILE)
WRL_PARAMETER
VARCHAR2(4000)
Parameter of the wallet resource locator (for example, absolute filename ifWRL_TYPE = FILE)
STATUS
VARCHAR2(9)
Status of the wallet:
OPEN
CLOSED
UNDEFINED
OPEN_NO_MASTER_KEY
显示数据库中所有的加密列的加密信息。此视图的详细信息与ALL_ENCRYPTED_COLUMNS视图是相同的。
·USER_ENCRYPTED_COLUMNS
比ALL_ENCRYPTED_COLUMNS视图少了OWNER列,只属于用户表的数据被显示。
·V$ENCRYPTED_TABLESPACES
显示被加密的表空间的信息。
Column
Datatype
Description
·V$WALLET
displays metadata information for a PKI certificate, which may be used as a master key for TDE
·V$ENCRYPTION_WALLET
显示wallet状态信息与wallet位置信息。
Column
Datatype
Description
五、遇到的问题
1、ORA-28368:不能自动创建wallet
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "wallet";
ORA-28368:不能自动创建wallet
原因:缺少相关路径。我没有使用sqlnet.ora指定路径,使用的是默认路径。后来才发现默认路径下没有wallet文件夹,手动在默认路径下创建也wallet文件夹,问题解决。
2、ORA-28353: 无法打开 wallet
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "wallet1";
ORA-28353: 无法打开 wallet
原因:已经存在了一个旧的WALLET文件,因此如果要建立新的WALLET,则删除了旧的WALLET。
3、ORA-28362:未找到主键
SQL>SELECT * FROM EMP; -- ename字段加密了
ORA-28362:未找到主键
原因:因为前边创建了默认路径的wallet,现在想创建一个指定路径的wallet,则把默认路径下的wallet文件夹给删除了。没办法恢复了,即使再创建一个wallet,使用相同的密码也是不能惰性的,还是会报此错误。
4、删除旧的wallet后,在sqlnet.ora文件中指定了wallet路径,然后执行下面的语句,还是报错
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "wallet";
ORA-28368:不能自动创建wallet
经试验,是系统去默认的路径去找wallet文件夹了。不知道为什么设置了指定的路径后还会去寻找默认的路径,还请知道原因的朋友给予指点。
我找到原因 了:因为我设置的路径下的文件夹是ora_wallet,这样是不行的,不管是在什么路径下,最终的文件夹名称都要是wallet,我改后就可以了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27661381/viewspace-1338792/ ,如需转载,请注明出处,否则将追究法律责任。