Skip to content

加密库

语法格式

ENCRYPT DATABASE  BY encry_name|encry_id [CASCADE]

参数解释

参数名称参数解释
encry_name加密机名称
encry_id加密机编号
CASCADE是否加密原有表

执行步骤

  1. 登录SYSSSO用户创建加密机。

  2. 登录SYSDBA用户创建库并在库下创建表。

  3. 查看存储文件下存储加密情况和未加密存储情况。

  4. 对库进行加密。

  5. 查看存储文件下存储加密情况和未加密存储情况。

预期结论

  • 加密前能够明文查询到表中的数据。
  • 加密后不再能明文查询到表中的数据。

示例

  • 示例1

    sql
    --使用SYSDBA用户创建测试库ENC1、ENC2
    SQL> CREATE DATABASE ENC1;
    
    SQL> CREATE DATABASE ENC2;
    
    --在ENC1与ENC2库中分别创建表插入数据
    
    SQL> USE ENC1
    
    SQL> CREATE TABLE enc1_tab(enc VARCHAR);
    
    SQL> INSERT INTO enc1_tab VALUES('qwerqwer001');
    
    SQL> USE ENC2
    
    SQL> CREATE TABLE enc2_tab(enc VARCHAR);
    
    SQL> INSERT INTO enc2_tab VALUES('asdfasdf001');
    
    SQL> CHECKPOINT;
    • 上述示例,在未使用加密机加密存储文件情况下,数据“qwerqwer001”与“asdfasdf001”在数据库存储文件中以明文方式进行存储。
    • 使用加密机“ENCRYPTOR1”加密库“ENC1”新增对象数据,使用加密机“ENCRYPTOR1”加密库“ENC2”所有数据。
  • 示例2

    sql
    --使用SYSDBA用户
    SQL> USE ENC1
    
    SQL> ENCRYPT DATABASE BY 'ENCRYPTOR1';
    
    SQL> INSERT INTO enc1_tab VALUES('qwerqwer002');
    
    SQL> CREATE TABLE enc1_tab_1(enc VARCHAR);
    
    SQL> INSERT INTO enc1_tab_1 VALUES('qwerqwer003');
    
    SQL> USE ENC2
    
    SQL> ENCRYPT DATABASE BY 'ENCRYPTOR1' CASCADE;
    
    SQL> INSERT INTO enc2_tab VALUES('asdfasdf002');
    
    SQL> CREATE TABLE enc2_tab_1(enc VARCHAR);
    
    SQL> INSERT INTO enc2_tab_1 VALUES('asdfasdf003');
    
    SQL> CHECKPOINT;
    
    SQL> USE SYSTEM
    
    SQL> SELECT db_name,encry_id FROM SYS_DATABASES WHERE db_name IN ('ENC1','ENC2');
    
    DB_NAME | ENCRY_ID |
    ------------------------------------------------------------------------------
    ENC1| 2 |
    ENC2| 2 |
    • 上述示例,在数据库存储文件中分别查询“ENC1”和“ENC2”库中插入数据。
    • 在“ENC1”库中,表“ENC1_TAB”中数据“qwerqwer001”、“qwerqwer002”仍然以明文方式存储于数据库存储文件;新建表“ENC1_TAB_1”中数据使用密文存储,在数据库存储文件中已无法查到“qwerqwer003”数据。
    • 在“ENC2”库中,表“ENC2_TAB”与表“ENC2_TAB_1”的数据均以密文方式存储于数据库存储文件,在数据库存储文件已无法查到插入的数据。