MariaDB是否有Postgres pgp_sym_encrypt等效函数?数据迁移方案咨询
MariaDB 对应PGP加密功能及数据迁移方案
一、MariaDB的类似加密解密功能
MariaDB 支持PGP对称加密解密,需要先启用crypto插件:
INSTALL SONAME 'crypto';
启用后,可用pgp_sym_encrypt()和pgp_sym_decrypt()实现和PostgreSQL一致的逻辑,语法高度兼容:
插入加密数据示例
INSERT INTO a_table ( normal_value, secret_value ) VALUES ( 'normal', pgp_sym_encrypt('0.123', 'secret_key') );
查询解密数据示例
SELECT normal_value, CAST(pgp_sym_decrypt(secret_value, 'secret_key') AS DOUBLE) FROM a_table;
注:MariaDB的pgp_sym_encrypt默认接受字符串输入,无需额外类型转换,用法和PostgreSQL基本一致。
二、数据迁移的可选方案
方案1:明文中转迁移(最直接)
先从PostgreSQL导出解密后的明文数据,再用MariaDB的加密函数重新加密插入:
- 在PostgreSQL执行导出明文的查询:
SELECT normal_value, CAST(pgp_sym_decrypt(secret_value, 'secret_key') AS TEXT) AS secret_value_plain FROM a_table;
将结果保存为CSV或SQL脚本。
- 在MariaDB中插入并加密:
INSERT INTO a_table (normal_value, secret_value) VALUES ('normal', pgp_sym_encrypt('0.123', 'secret_key')), -- 其他数据行... ;
优缺点:操作简单易验证;但中间过程会出现明文数据,需确保传输、存储过程的安全性(比如加密传输、用完即删明文文件)。
方案2:直接迁移加密数据,兼容解密
由于PGP是通用加密标准,PostgreSQL用pgp_sym_encrypt生成的加密数据,可直接在MariaDB中用pgp_sym_decrypt解密:
- 将PostgreSQL中的
a_table(包含加密的secret_value)直接导出为SQL或CSV,导入MariaDB。 - 直接用MariaDB的解密函数查询:
SELECT normal_value, CAST(pgp_sym_decrypt(secret_value, 'secret_key') AS DOUBLE) FROM a_table;
如果需要统一加密格式(实际无需转换,已兼容),也可批量更新:
UPDATE a_table SET secret_value = pgp_sym_encrypt(pgp_sym_decrypt(secret_value, 'secret_key'), 'secret_key');
优缺点:全程无明文落地,安全性高;无需额外转换逻辑,迁移成本低。
方案3:替换为MariaDB内置AES加密(轻量替代)
如果不需要PGP兼容性,可改用MariaDB内置的AES加密函数(无需额外插件),性能更优:
- 从PostgreSQL导出明文数据(同方案1第一步)。
- 在MariaDB中用
AES_ENCRYPT插入:
INSERT INTO a_table ( normal_value, secret_value ) VALUES ( 'normal', AES_ENCRYPT('0.123', 'secret_key') );
- 查询时用
AES_DECRYPT解密:
SELECT normal_value, CAST(AES_DECRYPT(secret_value, 'secret_key') AS DOUBLE) FROM a_table;
优缺点:无需安装插件,性能更好;但和原PGP加密逻辑不兼容,需修改应用代码中的加密解密语句。
内容的提问来源于stack exchange,提问作者DJDaveMark
相关产品推荐
相关产品推荐

