Eu errei um pouco com uma instância Dockerizada do PostgreSQL e acidentalmente substituí os valores que eu tinha para POSTGRES_USER
and POSTGRES_PASSWORD
. Eles foram gerados aleatoriamente, então adivinhá-los está basicamente fora de questão. Por natureza do PostgreSQL Dockerizado, se você especificar seu próprio nome de usuário, a função postgres
não será criada. Isso significa que postgres
, admin
, root
são funções inválidas na minha instância de banco de dados.
Agora estou preso a um diretório de dados em um volume que posso acessar e psql
que não consigo acessar porque não conheço nenhum nome de usuário válido nesse banco de dados. Existe uma lista de nomes de usuário neste diretório de dados que eu possa acessar de alguma forma para entrar e alterar a senha?
Ok, encontrei um jeito. De acordo com os documentos do PostgreSQL sobre a estrutura do diretório de dados :
Então me conectei ao contêiner que executa o banco de dados
docker exec -it <container-name> /bin/sh
e fui para/var/lib/postgresql/data/global
. Havia vários arquivos binários e comecei a imprimir seu conteúdo um por um até encontrar uma string que reconheci. Foi encontrado em file1260
, embora eu duvide que seja esse o caso o tempo todo.Então simplesmente me conectei ao banco de dados (a versão Docker do banco de dados está configurada de forma que você não precisa de uma senha para se conectar de dentro) usando
psql -U <recovered-username>
e alterei a senha com\password '<recovered-username>'
. Sucesso!Salvá-lo em texto não criptografado em qualquer lugar anularia o objetivo das senhas !!!
Sua única opção é salvar o que puder e reinstalar. Desta vez, use GIT ou algo assim para manter backups sucessivos de arquivos importantes.