pg_ident.conf 是 PostgreSQL 的一个配置文件,用于配置用户身份映射,以便允许系统用户(操作系统用户)以数据库用户的身份连接到 PostgreSQL 数据库。这在使用 IDENT 或 PEER 认证方法时特别有用。
1、文件位置
默认情况下,pg_ident.conf 文件位于 PostgreSQL 数据目录中。你可以通过查看 PostgreSQL 配置文件 postgresql.conf 来确认其路径:
SHOW ident_file;
pg_ident.conf 格式
pg_ident.conf 文件的格式非常简单,每行包含三个字段:
- MAPNAME:映射名称,可以是任意字符串。
- SYSTEM-USERNAME:操作系统用户名。
- PG-USERNAME:PostgreSQL 数据库用户名。
字段之间以空格或制表符分隔。例如:
# MAPNAME SYSTEM-USERNAME PG-USERNAME
mymap osuser1 dbuser1
mymap osuser2 dbuser2
othermap osuser3 dbuser3
2、示例配置
假设你有以下需求:
操作系统用户 alice 映射到 PostgreSQL 用户 pg_alice
操作系统用户 bob 映射到 PostgreSQL 用户 pg_bob
你可以这样配置 pg_ident.conf:
# This is the pg_ident.conf file.
# MAPNAME SYSTEM-USERNAME PG-USERNAME
mymap alice pg_alice
mymap bob pg_bob
3、配置 pg_hba.conf 使用映射
SHOW hba_file;
要使这些映射生效,还需要配置 pg_hba.conf 文件,并指定使用 IDENT 或 PEER 认证方法以及对应的映射名称。
假设你希望本地连接使用 IDENT 认证和你定义的映射 mymap,可以如下配置 pg_hba.conf:
# TYPE DATABASE USER ADDRESS METHOD
# Allow local connections using the "mymap" ident map
local all all ident map=mymap
或者,如果你使用的是 PEER 认证(通常在 Unix 系统上用于本地连接):
# TYPE DATABASE USER ADDRESS METHOD
# Allow local connections using the "mymap" peer map
local all all peer map=mymap
4、完整示例
假设你的需求是:
操作系统用户 os_user1 映射到 PostgreSQL 用户 db_user1
操作系统用户 os_user2 映射到 PostgreSQL 用户 db_user2
pg_ident.conf 配置:
# This is the pg_ident.conf file.
# MAPNAME SYSTEM-USERNAME PG-USERNAME
mymap os_user1 db_user1
mymap os_user2 db_user2
pg_hba.conf 配置:
# TYPE DATABASE USER ADDRESS METHOD
# Allow local connections using the "mymap" ident map
local all all ident map=mymap
5、重启 PostgreSQL 服务
每次修改 pg_ident.conf 或 pg_hba.conf 文件后,必须重载或重启 PostgreSQL 服务以使配置生效:
sudo systemctl reload postgresql-14
或者:
sudo systemctl restart postgresql-14
6、验证配置
修改配置文件并重启服务后,你可以尝试以操作系统用户的身份连接到 PostgreSQL,验证映射是否有效:
sudo -u os_user1 psql -U db_user1
如果配置正确,你应该能够成功登录到 PostgreSQL。
7、总结
通过配置 pg_ident.conf 文件,你可以灵活地将操作系统用户映射到 PostgreSQL 用户,从而实现安全的用户管理和认证。