PostgreSQL: Como alterar a senha de usuário do PostgreSQL?

Respostas:

1406

Para senha menos login:

sudo -u user_name psql db_name

Para redefinir a senha se você esqueceu:

ALTER USER user_name WITH PASSWORD 'new_password';
solaimuruganv
fonte
126
Isso deixou a senha limpa no histórico de comandos do postgresql do usuário.
greg
118
@greg: então exclua:rm ~/.psql_history
RickyA 30/10
43
off topic, mas se alguém procurando "como alterar o nome de usuário" do que fazer ALTER USER myuser RENAME TO newname;... por algum motivo o Google estava me apontando aqui quando eu estava pesquisando que :)
equivalent8
10
Por que você está usando as aspas "e '? Quero dizer, há uma diferença, e em uma consulta DML você deve usar' ao lidar com strings, mas existe um motivo especial para usar as duas aqui?
Boyan
7
O usuário é um objeto, não uma string. Compare com ALTER TABLE "table_name" ou mesmo SELECT * FROM "table_name". Você não pode usar aspas simples nesses contextos com tabelas, e é o mesmo com usuários / funções.
P papai
630

Então digite:

$ sudo -u postgres psql

Então:

\password postgres

Então, para sair psql:

\q

Se isso não funcionar, reconfigure a autenticação.

Edite /etc/postgresql/9.1/main/pg_hba.conf(o caminho será diferente) e mude:

    local   all             all                                     peer

para:

    local   all             all                                     md5

Em seguida, reinicie o servidor:

$ sudo service postgresql restart
Clint Bugs
fonte
3
qual é a senha padrão para o postgres? mudou acidentalmente; possível redefinir?
Saad
2
(no psql 9.2) se eu digitar \p, ele me dará a senha; se eu digitar \password postgresdá os avisos senha e depois\p extra argument "assword" ignored; \p extra argument "postgres" ignored
David LeBauer
1
Isso é muito melhor do que deixar a senha no histórico de comandos SQL.
Otocan 13/02/19
1
@ZacharyScott O que você está dizendo?
TheRealChx101 21/07/19
2
Para alterar a senha do usuário do postgres no Linux:sudo passwd postgres
Punnerud 28/08/19
88

Você pode e deve ter a senha do usuário criptografada:

ALTER USER username WITH ENCRYPTED PASSWORD 'password';
yglodt
fonte
45
Esta palavra-chave não importa para a versão atual. De postgresql.org/docs/current/static/sql-caterpole.html The password is always stored encrypted in the system catalogs. The ENCRYPTED keyword has no effect, but is accepted for backwards compatibility.
John29
5
Cuidado! O comentário do John29 é verdadeiro somente no Postgresql 10 e acima. Para todas as outras versões, o sinalizador ENCRYPTED é importante.
phep 7/05/19
51

Acredito que a melhor maneira de alterar a senha é simplesmente usar:

\password

no console do Postgres.

Fonte:

É necessário ter cuidado ao especificar uma senha não criptografada com este comando. A senha será transmitida ao servidor em texto não criptografado e também poderá ser registrada no histórico de comandos do cliente ou no log do servidor. O psql contém um comando \ senha que pode ser usado para alterar a senha de uma função sem expor a senha de texto não criptografado.

de https://www.postgresql.org/docs/9.0/static/sql-alterrole.html .

Viktor Nordling
fonte
8
Isso também pode ser usado para alterar senhas para outros usuários:\password username
Martin
34

Para alterar a senha usando a linha de comando do Linux, use:

sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
Vajira Lasantha
fonte
5
Lembre-se de que isso provavelmente salvará a senha de usuário do banco de dados no seu histórico de comandos.
Pedro Cordeiro
2
você pode usar variáveis ​​de ambiente aqui? Eu quero automatizar esse em um script de deploy
TheRealChx101
26

Para alterar a senha

 sudo -u postgres psql

então

\password postgres

agora insira Nova senha e confirme

depois \qsair

Akitha_MJ
fonte
1
esta resposta me ajuda. obrigado
mohammad jawad Barati 23/03
24

Vá para o seu Postgresql Config e edite pg_hba.conf

sudo vim /etc/postgresql/9.3/main/pg_hba.conf

Então mude esta linha:

Database administrative login by Unix domain socket
local      all              postgres                                md5

para :

Database administrative login by Unix domain socket
local   all             postgres                                peer

Reinicie o serviço PostgreSQL via comando SUDO e, em seguida,

psql -U postgres

Agora você entrará e verá o terminal Postgresql

então entre

\password

e digite a NOVA senha para o usuário padrão do Postgres. Após alterar a senha com êxito novamente, vá para pg_hba.conf e reverta a alteração para "md5"

agora você estará logado como

psql -U postgres

com sua nova senha.

Deixe-me saber se você encontrar algum problema nele.

Murtaza Kanchwala
fonte
Não funciona:user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
GM
Ok, faça outro método sudo su - postgres psql Você entrará no terminal e depois mudará a senha, esta é uma maneira alternativa para isso. Deixe-me saber se isso funciona para você ou você precisa de uma explicação completa
Murtaza Kanchwala
mm Eu tentei, mas tenho outro erro: / usr / bin / psql: linha 19: use: comando não encontrado / usr / bin / psql: linha 21: use: comando não encontrado / usr / bin / psql: linha 23: use: comando não encontrado / usr / bin / psql: linha 24: use: comando não encontrado / usr / bin / psql: psql: linha 26: erro de sintaxe próximo ao token inesperado $version,' /usr/bin/psql: psql: line 26: meu ($ version, $ cluster, $ db, $ port , $ host); ' Obrigado pela ajuda!
GM
11

Para solicitar uma nova senha para o usuário do postgres (sem mostrá-la no comando):

sudo -u postgres psql -c "\password"
lcnicolau
fonte
9

A configuração que eu tenho no meu servidor foi muito personalizada e só consegui alterar a senha depois de definir a autenticação confiável no pg_hba.confarquivo :

local   all   all   trust

Não se esqueça de mudar isso de volta para senha ou md5

ruruskyi
fonte
1
você também precisa reiniciar o serviço postgres para que as alterações entrem em vigorsudo systemctl restart postgresql.service
Sampath Surineni
onde esse arquivo pg_hba.conf deve ir?
JMStudios.jrichardson
8

Este foi o primeiro resultado no google, quando eu estava procurando como renomear um usuário, então:

ALTER USER <username> WITH PASSWORD '<new_password>';  -- change password
ALTER USER <old_username> RENAME TO <new_username>;    -- rename user

Alguns outros comandos úteis para o gerenciamento de usuários:

CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;

Mover usuário para outro grupo

ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;
Salvador Dalí
fonte
7

Para o meu caso no Ubuntu 14.04 instalado com o postgres 10.3. Preciso seguir os seguintes passos

  • su - postgres mudar usuário para postgres
  • psql entrar no shell do postgres
  • \password então digite sua senha
  • \q sair da sessão shell
  • Em seguida, você volta ao root executando exite configurando o seu pg_hba.conf(o meu está em /etc/postgresql/10/main/pg_hba.conf), certificando-se de ter a seguinte linha

    local all postgres md5

  • Reinicie seu serviço postgres service postgresql restart
  • Agora mude para postgresusuário e insira o shell do postgres novamente. Ele solicitará uma senha.
haxpor
fonte
Eu não acho que você realmente precise reiniciar o serviço postgresql depois de alterar a senha. Consegui redefinir a senha reiniciando-a. \ password é a maneira mais rápida. Ou então você precisa do comando ALTER USER.
Archit Kapoor
3

usa isto:

\password

digite a nova senha desejada para esse usuário e confirme-a. Se você não se lembra da senha e deseja alterá-la, pode efetuar login como postgres e, em seguida, usar o seguinte:

ALTER USER 'the username' WITH PASSWORD 'the new password';
Chris Dare
fonte
3

Semelhante a outras respostas na sintaxe, mas deve-se saber que você também pode passar um md5 da senha para não transmitir uma senha de texto sem formatação.

Aqui estão alguns cenários de consequências não intencionais da alteração de uma senha de usuário em texto sem formatação.

  1. Se você não possui SSL e está modificando remotamente, está transmitindo a senha de texto sem formatação pela rede.
  2. Se você tiver a sua configuração de log definida para registrar as Declarações DDL log_statement = ddlou superiores, sua senha de texto sem formatação será exibida nos logs de erro.
    1. Se você não está protegendo esses logs, é um problema.
    2. Se você coletar esses logs / ETL e exibi-los onde outras pessoas têm acesso, eles poderão ver essa senha etc.
    3. Se você permitir que um usuário gerencie sua senha, ele está revelando uma senha para um administrador ou funcionário de baixo nível encarregado de revisar os logs.

Com isso dito, aqui é como podemos alterar a senha de um usuário criando um md5 da senha.

  • O Postgres, quando hash uma senha como md5, salga a senha com o nome de usuário e, em seguida, acrescenta o texto "md5" ao hash resultante.
  • ex: "md5" + md5 (senha + nome de usuário)

  • Na festança:

    ~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • No PowerShell:
    [PSCredential] $Credential = Get-Credential

    $StringBuilder = New-Object System.Text.StringBuilder

    $null = $StringBuilder.Append('md5');

    [System.Security.Cryptography.HashAlgorithm]::Create('md5').ComputeHash([System.Text.Encoding]::ASCII.GetBytes(((ConvertFrom-SecureStringToPlainText -SecureString $Credential.Password) + $Credential.UserName))) | ForEach-Object {
        $null = $StringBuilder.Append($_.ToString("x2"))
    }

    $StringBuilder.ToString();

    ## OUTPUT
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • Então, finalmente, nosso ALTER USERcomando parecerá
    ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
  • Links relevantes (Nota: eu irei vincular apenas às versões mais recentes dos documentos para versões mais antigas, mas algumas mudam, mas o md5 ainda é compatível há muito tempo.)
  • criar papel
  • A senha é sempre armazenada criptografada nos catálogos do sistema. A palavra-chave ENCRYPTED não tem efeito, mas é aceita para compatibilidade com versões anteriores. O método de criptografia é determinado pelo parâmetro de configuração password_encryption. Se a string de senha apresentada já estiver no formato criptografado por MD5 ou SCRAM, ela será armazenada como está, independentemente da senha_encryption (já que o sistema não pode descriptografar a string de senha criptografada especificada para criptografá-la em um formato diferente). Isso permite recarregar senhas criptografadas durante o dump / restore.

  • definição de configuração para password_encryption
  • doc de autenticação de senha do postgres
  • construindo a senha do postgres md5
jkdba
fonte
1

Em geral, basta usar a pg admin UI para realizar atividades relacionadas ao banco de dados.

Se, em vez disso, você se concentrar mais na automação da configuração do banco de dados para o seu desenvolvimento local, ou CI, etc.

Por exemplo, você pode usar uma combinação simples como esta.

(a) Crie um superusuário fictício via jenkins com um comando semelhante a este:

docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001

isso criará um super usuário chamado experiment001 em seu postgres db.

(b) Dê a esse usuário alguma senha executando um comando SQL NÃO Interativo.

docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "

O Postgres é provavelmente o melhor banco de dados disponível para ferramentas de linha de comando (não interativas). Criando usuários, executando SQL, fazendo backup do banco de dados etc ... Em geral, tudo é bastante básico com o postgres e, em geral, é bastante trivial integrá-lo aos scripts de instalação do desenvolvimento ou à configuração automatizada do IC.

99Sono
fonte
1

e a maneira totalmente automatizada com bash e expect ( neste exemplo , provisionamos um novo administrador do postgres com o recém-provisionado postgres pw no nível de tempo de execução do SO e do postgres)

  # the $postgres_usr_pw and the other bash vars MUST be defined 
  # for reference the manual way of doing things automated with expect bellow
  #echo "copy-paste: $postgres_usr_pw"
  #sudo -u postgres psql -c "\password"
  # the OS password could / should be different
  sudo -u root echo "postgres:$postgres_usr_pw" | sudo chpasswd

  expect <<- EOF_EXPECT
     set timeout -1
     spawn sudo -u postgres psql -c "\\\password"
     expect "Enter new password: "
     send -- "$postgres_usr_pw\r"
     expect "Enter it again: "
     send -- "$postgres_usr_pw\r"
     expect eof
EOF_EXPECT

  cd /tmp/
  # at this point the postgres uses the new password
  sudo -u postgres PGPASSWORD=$postgres_usr_pw psql \
    --port $postgres_db_port --host $postgres_db_host -c "
  DO \$\$DECLARE r record;
     BEGIN
        IF NOT EXISTS (
           SELECT
           FROM   pg_catalog.pg_roles
           WHERE  rolname = '"$postgres_db_useradmin"') THEN
              CREATE ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
              CREATEDB REPLICATION BYPASSRLS 
 PASSWORD '"$postgres_db_useradmin_pw"' LOGIN ;
        END IF;
     END\$\$;
  ALTER ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
  CREATEDB REPLICATION BYPASSRLS 
PASSWORD  '"$postgres_db_useradmin_pw"' LOGIN ;
 "
Yordan Georgiev
fonte
0

TLDR:

Em muitos sistemas, a conta de um usuário geralmente contém um período ou algum tipo de punção (usuário: john.smith, horise.johnson). Nesses casos, uma modificação deverá ser feita na resposta aceita acima. A alteração requer que o nome de usuário seja citado duas vezes.

Example:

ALTER USER "username.lastname" WITH PASSWORD 'password'; 

Racional:

O Postgres é bastante exigente quando usar uma 'aspas duplas' e quando usar uma 'aspas simples'. Normalmente, ao fornecer uma string, você usaria uma aspas simples.

FlyingV
fonte