我的问题
我可以为用户设置权限(例如postgres
:)以使该用户只允许从 TCP 本地主机登录,而不允许从 Internet 登录吗?
远程控制的可信套接字与密码
我知道您可以初始化 postgres 以允许本地用户无需密码登录,并允许远程主机使用密码登录:
initdb \
-D "$POSTGRES_DATA_DIR/" \
--username postgres --pwfile "$PWFILE" \
--auth-local=trust --auth-host=password
内部网与互联网
对于任何通过互联网连接的系统,我都希望使用具有非常非常强(不可记忆)的随机 128 位字符串的用户。
但是,对于本地和内联网访问,我希望能够拥有我能记住(并输入)的用户名和密码。
我可以这样做吗...或者我只需要为每个允许连接的系统设置一个用户,.pgpass
每个用户都有一个?
(我不想在计算机之间共享纯文本文件中的密钥)
答案1
您没有提供有关 PostgreSQL 版本的任何信息,我假设您使用的是 PostgreSQL 12。
我可以为用户(例如:postgres)设置权限,使得该用户只允许从 TCP 本地主机登录,而不允许从 Internet 登录吗?
是的,使用pg_hba.conf
。您可能希望先通过以下方式加载hba_file
运行时配置。
但是,对于本地和内联网访问,我希望能够拥有我能记住(并输入)的用户名和密码。
如果要添加受密码保护的本地用户,请添加
local <database_name> <local-only_user_name> scram-sha-256
在你的pg_hba.conf
。
您可能希望首先通过以下方式创建用户CREATE ROLE
:
CREATE ROLE username LOGIN ENCRYPTED PASSWORD 'insert-your-password-here';
您可能还想检查host
并hostssl
记录要添加到您的条目,pg_hba.conf
以配置您的内部网和基于互联网的身份验证。
查看链接的文档以获取更多信息。