Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


透明数据加密

📄字数 2.3K
👁️阅读量 加载中...

透明数据加密(TDE/Transparent Data Encryption)旨在对存储于文件系统中的静态数据文件执行加密,以防范存储介质或数据文件被盗时,其中存储的敏感数据泄露。其加解密过程对于用户以及应用而言是不可见的,由数据库在文件数据与内存数据之间转换时自动执行数据加解密。

透明数据加密启用方式:

  1. 使用具有ACL_SSO权限的用户,创建加密机,请参阅加密机
  2. 切换回业务用户,可对以下对象设置加密机,加密其范围内的敏感数据:

注意

  • 系统表不支持加密操作,仅支持对非系统表(即用户表)进行加密
  • 加密机使用优先级为:表级 > 用户级 > 库级,新插入的数据或者创建的表,会按照此优先级查找加密机,并使用首个查找到的加密机执行加密,无需对表重复设置加密机

在执行加密操作时,还有以下事项需要特别注意:

重要

在启用级联(CASCADE)或强制(FORCE)选项,加密库与加密用户下表数据时,请谨慎操作,提前评估影响数据量,是否存在数据量大的表等,避免影响业务正常运行!

一、加密库

加密当前会话所在库下表数据。

1.1 语法格式

1.2 参数说明

  • ( ICONST | SCONST ):指定加密机标识(ID或名称)
    • ICONST:指定加密机ID,取值范围为[2,255]
    • SCONST:指定加密机名称
  • opt_cascade:指定加密的迭代性
    • 未指定:设置库加密机,后续库下创建未指定加密机的表,将先尝试用户加密机加密,若不存在,再使用库加密机加密
    • CASCADE:设置库加密机,并将库下所有已有用户表,应用opt_force参数,使用库加密机加密
  • opt_force:指定是否强制执行加密
    • 未指定:当表未加密时,才使用指定加密机加密,否则不加密
    • FORCE:强制执行加密,若表已加密,则使用原加密机解密后,再使用指定加密机重新加密

1.3 示例

  • 示例1
    加密库。

    sql
    -- 使用SYSSSO安全管理员登录并创建加密机
    SQL> CREATE ENCRYPTOR 'enc_db' BY 'enc_key_value';
    
    -- 使用SYSDBA系统管理员创建库并切换库
    SQL> CREATE DATABASE db_enc;
    SQL> USE db_enc;
    
    -- 执行加密库
    SQL> ENCRYPT DATABASE BY 'enc_db';

二、加密用户

加密指定用户下表数据。

2.1 语法格式

2.2 参数说明

  • UserId:待加密用户名称
  • ( ICONST | SCONST ):指定加密机标识(ID或名称)
    • ICONST:指定加密机ID,取值范围为[2,255]
    • SCONST:指定加密机名称
  • opt_cascade:指定加密的迭代性
    • 未指定:设置用户加密机,后续用户下创建未指定加密机的表,将使用用户加密机加密
    • CASCADE:设置用户加密机,并将用户下所有已有用户表,应用opt_force参数,使用用户加密机加密
  • opt_force:指定是否强制执行加密
    • 未指定:当表未加密时,才使用指定加密机加密,否则不加密
    • FORCE:强制执行加密,若表已加密,则使用原加密机解密后,再使用指定加密机重新加密

2.3 示例

  • 示例1
    加密用户。

    sql
    -- 使用SYSSSO安全管理员登录并创建加密机
    SQL> CREATE ENCRYPTOR 'enc_user' BY 'enc_key_value';
    
    -- 使用SYSDBA系统管理员创建用户
    SQL> CREATE USER user_enc IDENTIFIED BY 'Test@2002';
    
    -- 执行加密用户
    SQL> ENCRYPT USER user_enc BY 'enc_user';

三、加密表

加密指定表数据。

3.1 创建加密表

3.1.1 语法格式

此语法格式请参阅创建表,并指定opt_encrypt语法子句。

3.1.2 示例

  • 示例1
    创建一张加密表。

    sql
    -- 使用SYSSSO安全管理员登录并创建加密机
    SQL> CREATE ENCRYPTOR 'enc_tab_new' BY 'enc_key_value';
    
    -- 切换回业务用户创建加密表
    SQL> CREATE TABLE tab_enc(id INTEGER, name VARCHAR) ENCRYPT BY 'enc_tab_new';

3.2 加密已有表

3.2.1 语法格式

3.2.2 参数说明

  • name_space:待加密表名称
  • ( ICONST | SCONST ):指定加密机标识(ID或名称)
    • ICONST:指定加密机ID,取值范围为[2,255]
    • SCONST:指定加密机名称
  • opt_force:指定是否强制执行加密
    • 未指定:当表未加密时,才使用指定加密机加密,否则不加密
    • FORCE:强制执行加密,若表已加密,则使用原加密机解密后,再使用指定加密机重新加密

3.2.3 示例

  • 示例1
    加密已有表。

    sql
    -- 使用SYSSSO安全管理员登录并创建加密机
    SQL> CREATE ENCRYPTOR 'enc_tab_old' BY 'enc_key_value';
    
    -- 切换回业务用户创建表
    SQL> CREATE TABLE tab_enc(id INTEGER, name VARCHAR);
    
    -- 执行加密表
    SQL> ENCRYPT TABLE tab_enc BY 'enc_tab_old';