数据仓库服务 GAUSSDB(DWS)-实现数据列的加解密:应用示例

时间:2023-11-01 16:48:56

应用示例

  1. 连接数据库。

    具体步骤参见使用gsql命令行客户端连接集群

  2. 创建表student,有id,name和score三个属性。使用哈希函数加密保存name,使用对称密码算法保存score。

    1
    2
    3
    4
    CREATE TABLE student (id int, name text, score text, subject text);
    INSERT INTO student VALUES (1, gs_hash('alice', 'sha256'), gs_encrypt('95', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('math', '1234'));
    INSERT INTO student VALUES (2, gs_hash('bob', 'sha256'), gs_encrypt('92', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('english', '1234'));
    INSERT INTO student VALUES (3, gs_hash('peter', 'sha256'), gs_encrypt('98', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('science', '1234'));
    

  3. 不使用密钥查询表student,通过查询结果可知:没有密钥的用户即使拥有了select权限也无法看到name和score这两列加密数据。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    select * from student;
     id |                               name                               |                                                          score                                                           |
                                    subject
    ----+------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+-----------
    -----------------------------------------------------------------------------------
      1 | 2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90 | AAAAAAAAAABAuUC3VQ+MvPCDAaTUySl1e2gGLr4/ATdCUjTEvova3cb/Ba3ZKqIn1yNVGEFBvJnTq/3sLF4//Gm8qG7AyfNbbqdW3aYErLVpbE/QWFX9Ig== | aFEWQR2gkj
    iu6sfsAad+dHzfFDHePZ6xd44zyekh+qVFlh9FODZ0DoaFAJXctwUsiqaiitTxW8cCSEaNjS/E7Ke1ruY=
      2 | 81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9 | AAAAAAAAAABAuUC3VQ+MvPCDAaTUySl1taXxAoDqE793hgyCJvC0ESdAX5Mtgdq2LXI1f5ZxraQ73WIJVtIBX8oe3gTDxoXGlHbHht4kzM4U8dOwr5rjgg== | aFEWQR2gkj
    iu6sfsAad+dM8tPTDo/Pds6ZmqdmjGiKxf39+Wzx5NoQ6c8FrzihnRzgc0fycWSu5YGWNOKYWhRsE84Ac=
      3 | 026ad9b14a7453b7488daa0c6acbc258b1506f52c441c7c465474c1a564394ff | AAAAAAAAAACnyusORPeApqMUgh56ucQu3uso/Llw5MbPFMkOXuspEzhhnc9vErwOFe6cuGtx8muEyHCX7V5yXs+8FxhNh3n5L3419LDWJJLY2O4merHpSg== | zomphRfHV4
    H32hTtgkio1PyrobVO8N+hN7kAKwtygKP2E7Aaf1vsjmtLHcL88jyeJNe1lxe0fAvodzPJAxAuV3UJN4M=
    (3 rows)
    

  4. 使用密钥查询表student,通过查询结果可知:拥有密钥的用户通过使用gs_encrypt对应的解密函数gs_decrypt解密后,可以查看加密数据。

    1
    2
    3
    4
    5
    6
    7
    select id, gs_decrypt(score, '12345', 'aes128', 'cbc', 'sha256'),gs_decrypt_aes128(subject, '1234') from student;
     id | gs_decrypt | gs_decrypt_aes128
    ----+------------+-------------------
      1 | 95         | math
      2 | 92         | english
      3 | 98         | science
    (3 rows)
    

support.huaweicloud.com/bestpractice-dws/dws_05_0092.html