云数据库 GAUSSDB-透明数据加密:操作加密表

时间:2024-11-13 10:05:08

操作加密表

  1. 创建加密表。

    创建表时,通过在WITH子句中设置enable_tde=on参数,即可设置该表为加密表。

    数据库默认使用'AES_128_CTR'算法对加密表进行加密,如需使用其他算法,可通过encrypt_algo参数设置。

    gaussdb=# CREATE TABLE t1 (c1 INT, c2 TEXT) WITH (enable_tde = on);
    CREATE TABLE
    gaussdb=# CREATE TABLE t2 (c1 INT, c2 TEXT) WITH (enable_tde = on, encrypt_algo = 'SM4_CTR');
    CREATE TABLE

  2. 查看加密表基本信息。

    加密表基本信息存储在pg_class系统表中的reloptions字段中。其中,dek_cipher为数据密钥密文,由数据库自动生成,并由密钥管理服务加密。每个加密表都有1个独立的数据密钥。
    gaussdb=# SELECT relname,reloptions FROM pg_class WHERE relname = 't1';
     relname | reloptions
    ---------+-----------------------------------------------------------------------------------------------------------------------
     t1      | {orientation=row,enable_tde=on,encrypt_algo=AES_128_CTR,compression=no,storage_type=USTORE,key_type=...,dek_cipher=...

  3. 向加密表写入数据。

    操作加密表与非加密表的语法一致。数据库将表中数据写入磁盘前,才会自动对加密表的数据进行加密。
    gaussdb=# INSERT INTO t1 VALUES (1, 'tde plain 123');
    INSERT 0 1

  4. 从加密表查询数据。

    对于合法用户而言,查询加密表与非加密表的语法一致,加解密操作由数据库自动实现。如果攻击者绕过数据库,直接读取磁盘上加密表对应的数据文件,会发现文件中的数据均已被加密。
    gaussdb=# SELECT * FROM t1;
     c1 |      c2
    ----+---------------
      1 | tde plain 123
    (1 row)

  5. 轮转加密表的密钥。

    为提高安全性,建议定期使用以下语法轮转加密表的数据密钥,即使用新的密钥对数据进行加密。

    gaussdb=# ALTER TABLE t1 ENCRYPTION KEY ROTATION;
    ALTER TABLE

    轮转密钥后,数据库仍可以正常解密由旧密钥加密的数据。

  6. 加密表与非加密表转换。

    透明加密支持将加密表转换为非加密表,以及将非加密表转换为加密表。建议在每次转换后,手动执行VACUUM FULL tablename命令,以强制同步转换表中所有数据。

    gaussdb=# CREATE TABLE t3 (c1 INT, c2 TEXT);
    CREATE TABLE
    gaussdb=# ALTER TABLE t3 SET (enable_tde = on);
    ALTER TABLE
    gaussdb=# VACUUM FULL t3;
    VACUUM
    gaussdb=# ALTER TABLE t3 SET (enable_tde = off);
    ALTER TABLE
    gaussdb=# VACUUM FULL t3;
    VACUUM

  7. 删除加密表。

    gaussdb=# DROP TABLE IF EXISTS t1, t2, t3;
    DROP TABLE

support.huaweicloud.com/fg-gaussdb-dist-v8/gaussdb-18-0019.html