AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 83164
Accepted
Marcus Junius Brutus
Marcus Junius Brutus
Asked: 2014-11-21 06:40:36 +0800 CST2014-11-21 06:40:36 +0800 CST 2014-11-21 06:40:36 +0800 CST

PostgreSQL: Remova o requisito de senha para o usuário postgres

  • 772

Entendo que, após a instalação, o PostgreSQL não possui senha para seu usuário root do banco de dados (postgres):

postgres=# select usename, passwd is null from pg_shadow;
 usename  | ?column? 
----------+----------
 postgres | t
(1 row)

... e é aconselhável configurá-lo com:

alter role postgres password '<<very-secret>>';

(e, em seguida, atualize o pg_hba.confarquivo de acordo)

Minha pergunta é: qual é o SQL a ser usado para voltar à situação anterior quando nenhuma senha era necessária para user postgres.

Em geral, como posso remover o requisito de senha para qualquer função? Não estou perguntando como alterar a senha, mas como remover o requisito de senha ( passwdcoluna nula na tabela pg_shadow).

postgresql linux
  • 4 4 respostas
  • 172328 Views

4 respostas

  • Voted
  1. Best Answer
    Craig Ringer
    2014-11-21T18:05:23+08:002014-11-21T18:05:23+08:00

    Se uma senha é necessária ou não, não tem nada a ver pg_shadowe se uma senha está realmente definida para o usuário. Sim, eu sei, isso é estranho.

    pg_hba.confcontrola o método de autenticação. Se você quiser solicitar uma senha, use md5autenticação. Se você deseja permitir o login sem senha para ninguém, use trust. Se você quiser exigir o mesmo nome de usuário no sistema operacional que no PostgreSQL, use peer(UNIX, apenas para conexões locais) ou sspi(Windows).

    Se houver uma senha definida, mas pg_hba.confnão disser ao PostgreSQL para solicitá-la, a senha será ignorada.

    Se pg_hba.confdisser ao PostgreSQL para pedir uma senha, mas não houver nenhuma definida, todas as tentativas de login falharão, independentemente da senha fornecida.

    • 89
  2. lalligood
    2016-01-14T14:29:26+08:002016-01-14T14:29:26+08:00

    O usuário postgres por padrão não tem senha. Para remover uma senha de usuário (neste caso para o usuário/função postgres):

    alter role postgres password null;
    

    Também precisamos definir a autenticação para ver trustos detalhespg_hba.conf

    • 19
  3. Michael Besteck
    2020-11-23T06:04:34+08:002020-11-23T06:04:34+08:00

    A partir de 22/11/2020, usando o PostgreSQL 13 no Ubuntu 18, tropecei nas respostas dadas por @lalligood (e @thouliha - enquanto isso excluído), bloqueando o usuário postgres sem senha.

    O seguinte assume que o login é feito usando o programa psql (wrapper-) no computador em que o servidor PostgreSQL está sendo executado.

    Depois de ler a documentação do PostgreSQL 13.0, capítulo 20 (Autenticação do cliente), eu me perguntei por que mudar as linhas ...127.0.0.1/32.... e ...::1/128... para autenticação confiável. Os documentos dizem claro: a primeira linha em pg_hba.conf que se encaixa é tomada e todas as outras linhas são ignoradas. Portanto, deve ser suficiente usar apenas a primeira linha (padrão)

    local   all     postgres    peer
    

    Esta linha está relacionada a uma conexão de socket (unix-) (do psql) para o servidor PostgreSQL. O "problema" não mencionado é que o programa psql usa por padrão uma conexão TCP (mesmo) para localhost.

    Para provar isso, basta comentar as linhas ...127.0.0.1/32.... e ...::1/128... em pg_hba.conf e fazer o servidor PostgreSQL reler as linhas modificadas.

    Como fazer, dos documentos:

    Se você editar o arquivo em um sistema ativo, você precisará sinalizar ao postmaster (usando pg_ctl reload, chamando a função SQL pg_reload_conf(), ou usando kill -HUP) para fazê-lo reler o arquivo.

    Você também pode "brutalmente" problema

     systemctl restart postgresql 
    

    se um db-restart não importa.

    Então, ao tentar se conectar usando o programa psql, aparecerá uma mensagem de erro indicando que o psql tentou se conectar via TCP.

    Uma vez usando o psql para conectar via unix-socket a primeira linha em pg_hba.conf funciona e o (super-) usuário postgres pode definir sua senha para null ou qualquer string e ainda conectar sem ser solicitada a senha.

    Para conectar via soquete:

    psql -h /var/run/postgresql -p 5432
    

    ou

    export PGPORT=5432; psql -h /var/run/postgresql
    

    e mais adiante na sessão do console basta usar

    psql -h /var/run/postgresql
    

    Vejo:

    man psql
    

    especialmente para as opções "-h" e "-p".

    Citação do meu console, a senha não foi necessária nem solicitada (sys lang é alemão):

    postgres@hostname:/tmp$ psql -h /var/run/postgresql -p 5432

    psql (13.1 (Ubuntu 13.1-1.pgdg18.04+1))

    Geben Sie »help« für Hilfe ein.

    postgres=# alterar função postgres senha null;

    ALTERAR PAPEL

    postgres=# \q

    postgres@hostname:/tmp$ psql -h /var/run/postgresql -p 5432

    psql (13.1 (Ubuntu 13.1-1.pgdg18.04+1))

    Geben Sie »help« für Hilfe ein.

    postgres=# altera a senha do postgres 'secret';

    ALTERAR PAPEL

    postgres=# \q

    postgres@hostname:/tmp$ psql -h /var/run/postgresql -p 5432

    psql (13.1 (Ubuntu 13.1-1.pgdg18.04+1))

    Geben Sie »help« für Hilfe ein.

    Termo aditivo:

    @a_horse_with_no_name postou um comentário citando man psql:

    Se você omitir o nome do host, o psql se conectará através de um soquete de domínio Unix a um servidor no host local, ou via TCP/IP ao host local em máquinas que não possuem soquetes de domínio Unix.

    Obrigado pela dica, está correta, mas é seguida diretamente pela relativização

    O número da porta padrão é determinado em tempo de compilação. Como o servidor de banco de dados usa o mesmo padrão, você não precisará especificar a porta na maioria dos casos.

    Isso deve resultar na necessidade de especificar host ou socket-dir (argumento -h) ao executar o db-server em outra porta que não seja a porta padrão 5432.

    Devo confessar que trapaceei em "Citação do meu console" acima, pois "nome do host" não é o nome do host real do meu computador e 5432 não é a porta em que meu PostgreSQL 13 está servindo. Fiz isso por razões de privacidade e simplicidade. Na verdade, eu tenho um PostgreSQL 9.6 rodando na porta 5432 e a versão 13 rodando em outra porta simultaneamente.

    Para um teste eu desabilitei as linhas ...127.0.0.1/32.... e ...::1/128... no pg_hba.conf de ambos, 9.6 e 13 para que somente conexões de socket sejam possíveis.

    Enfim, seguindo o comentário de @a_horse_with_no_name um simples

    psql
    

    deve se conectar via socket ao meu servidor PostgreSQL 9.6. Mas não! Nem quando eu emito

    psql -p 5432
    

    O mesmo resultado se a versão 13 do servidor estiver desabilitada para que apenas um único servidor db (9.6) na porta padrão 5432 esteja em execução.

    Nem quando eu tento

    psql -p [port of my version 13 db-server]
    

    com a versão do servidor 13 em execução.

    In all that cases psql tries to connect not via socket, but via TCP. Have i overseen something? At least my solution, specifying the socket dir, should work anyway.

    On Ubuntu 18.04, providing unix-sockets, it seems that the -h argument and its parameter, specifying port or socket-dir is needed.

    By the way, neither the PGHOST nor the PGPORT environment variables were set, but undefined.

    If anyone knows better, please comment.

    • 2
  4. Computer Savvy
    2021-01-10T19:21:25+08:002021-01-10T19:21:25+08:00

    If you do not tell PSQL what user name nor database to use when connecting it uses the system $USER to identify the user logging in and attaches to the database with that name. It needs both user and the database to make the connection properly. This is out of section 1.4 of the PostgreSQL documentation.

    If you do not supply the database name then it will default to your user account name.

    AFAIK if there is no database with that name to connect to it will fail (and it did when I tested it that way). If a database exists with a name that matches $USER then it will connect to that database with "psql" and no database specified (again I tested to be sure).

    • 0

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve