Estou usando autenticação de certificado para clientes em um servidor de banco de dados PostgreSQL 9.1. Vários nomes comuns de certificados são mapeados para um único usuário do banco de dados em pg_ident.conf .
Não desejo criar um usuário de banco de dados para cada certificado porque é mais fácil gerenciar certificados aceitos com pg_ident.conf. Mas agora preciso de alguma consulta para mapear um processo de back-end para o nome comum usado para a conexão. Existe uma maneira de obter o nome comum (campo CN) do certificado com o qual um usuário se conectou ao banco de dados?
EDITAR
Obrigado araqnid por me indicar a extensão sslinfo ( source ). A função ssl_client_dn_field('CN') fornece exatamente as informações de que preciso. Mas as funções sslinfo funcionam apenas para a conexão/backend da sessão atual, prefiro precisar dessas informações para outras conexões/backends (consulte pelo ID do processo de backend).
A extensão sslinfo usa a variável global MyProcPort (definida em globals.c ) do tipo struct Port* para obter as informações SSL necessárias. Talvez alguém possa me dar uma dica de como a MyProcPort
variável de outros backends pode ser acessada em uma extensão (também conhecido como módulo contrib).
Adicione a extensão
sslinfo
: http://www.postgresql.org/docs/9.1/static/sslinfo.htmlIsso fornecerá a
ssl_client_dn
função para o nome completo do assunto, ou acredito que você possassl_client_dn_field('CN')
extrair apenas o nome comum.