我在 PostgreSQL 9.1 数据库服务器上为客户端使用证书身份验证。几个证书通用名称映射到pg_ident.conf中的单个数据库用户。
我不想为每个证书创建一个数据库用户,因为使用 pg_ident.conf 更容易管理接受的证书。但是现在我需要一些查询来将后端进程映射到用于连接的通用名称。有没有办法获取用户连接到数据库的证书的通用名称(CN 字段)?
编辑
感谢araqnid向我指出sslinfo扩展(来源)。函数ssl_client_dn_field('CN')提供了我需要的信息。但是 sslinfo 函数仅适用于当前会话的连接/后端,我宁愿需要此信息用于其他连接/后端(通过后端进程 ID 查询)。
sslinfo 扩展使用struct Port*类型的全局变量MyProcPort(在globals.c中定义)来获取所需的 SSL 信息。也许有人可以给我提示如何在扩展(又名 contrib 模块)中访问其他后端的变量。MyProcPort
添加扩展名
sslinfo
:http ://www.postgresql.org/docs/9.1/static/sslinfo.html这将为您
ssl_client_dn
提供完整主题名称的功能,或者我相信您可以ssl_client_dn_field('CN')
只提取通用名称。