我正在尝试加密我的prostagres数据库中的一列。列名是";测试";类型为";字节";。
我的祖先代码在下面,
@ColumnTransformer(read = "pgp_sym_decrypt(" + " test, "
+ " current_setting('encrypt.key')"
+ ")", write = "pgp_sym_encrypt( " + " ?, "
+ " current_setting('encrypt.key')" + ") ")
@Column(columnDefinition = "bytea")
private String test;
postgresql.conf配置文件:encrypt.key='哇!太安全了。
将postgresql.conf配置文件放在spring-boot-appln的src/main/resources中。但是encryption.key值没有被提取。有没有一种方法可以使用application.properties传递密钥?
postgresql.conf
是Postgres服务器的配置文件。它存储在服务器上的数据目录(又称"集群"(中。
你不能把它放在客户端(你的应用程序运行的地方(。它在那里没有任何意义。
要更改其中的值,您需要编辑文件(在服务器上(或使用ALTER SYSTEM
。
如果要更改当前会话的配置设置,请使用SET
或set_config()
后两种可能是您想要初始化加密/解密函数的自定义属性的方法。
使用encrypt.key的方法,不仅用于当前会话,还将其存储在postgresql.conf中。
正确的位置在该文件的末尾;定制选项";区段:
#------------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#------------------------------------------------------------------------------
# Add settings for extensions here
encrypt.key=123456
重新加载数据库服务器的配置:
systemctl reload postgresql.service
测试它是否正常工作。打开一个pgsql会话并键入:
mydb=# show encrypt.key;
encrypt.key
-------------
123456
(1 row)
加密示例:
mydb=# select pgp_sym_encrypt('Hola mundo',current_setting('encrypt.key'));
pgp_sym_encrypt
------------------------------------------------------------------------------------------------------------------------------------------------------------
xc30d04070302255230e388dfe25e7dd23b01c5b8e62d148088a3417d3c27ed2cc11655d863b271672b9f076fffb82f1a7f074f2ecbe973df04642cd7a4f76ca5cff4a13b9a71e7cc6e693827
(1 row)
解密示例:
mydb=# select pgp_sym_decrypt('xc30d04070302255230e388dfe25e7dd23b01c5b8e62d148088a3417d3c27ed2cc11655d863b271672b9f076fffb82f1a7f074f2ecbe973df04642cd7a4f76ca5cff4a13b9a71e7cc6e693827',current_setting('encrypt.key'));
pgp_sym_decrypt
-----------------
Hola mundo
(1 row)