我使用PostgreSQL数据库和postgres_fdw
扩展来查询外部数据。
CREATE EXTENSION postgres_fdw;
CREATE SERVER foreign_fake_database
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '....', port '5432', dbname 'fake_database');
当我创建用户Map来查询这个外部数据库时,我必须清楚地写上用户名和密码:
CREATE USER MAPPING FOR fake_user SERVER foreign_fake_database
OPTIONS ("user" 'fake_user', password 'fake_password');
由于明显的安全原因,这种方法对我来说似乎很脆弱,所以我正在寻找用户的反馈。
要保持良好的安全级别而不将密码存储为明文,最佳做法是什么?我可以加密此密码吗?对于多个用户,是否可以使用同一个用户进行连接?它不会使系统过载或产生冲突吗?
2条答案
按热度按时间nwlls2ji1#
从性能的Angular 来看,不同的用户Map到远程服务器上的相同用户还是不同用户并不重要,这纯粹是出于安全考虑。
没有办法隐藏或加密密码,但是您可以使用password file将密码存储在服务器上,或者使用根本不需要密码的身份验证方法,如certificate authentication(然后您可以在用户Map中使用
sslkey
和sslcert
)。请注意,必须在用户Map上将
password_required
设置为false
,以允许非超级用户在用户Map中不使用显式密码进行连接。这个选项是在PostgreSQL v13中引入的。bvjxkvbb2#
要保持良好的安全级别而不将密码存储为明文,最佳做法是什么?我可以加密此密码吗?对于多个用户,是否可以使用同一个用户进行连接?它不会使系统过载或产生冲突吗?
当然,“良好的安全级别”取决于您的限制,但是值得注意的是,外部用户Map中的密码在默认情况下已经隐藏,您不需要做任何事情。只有超级用户可以看到它(用户甚至无法看到自己的用户Map的密码)。
磁盘上应该没有加密。如果您对服务器具有读访问权限,则始终可以复制数据,启动指向此数据的群集,以超级用户身份连接并读取数据。
除了保护服务器之外,如果你想加密存储本身,那么你可能想看看official doc,尽管我不确定他们的建议是否适用于系统表。
还有pgsodium,但同样,我不确定你能用它加密系统列。