O que explica as diferentes instruções de configuração de senha para postgres?

1

Estou seguindo esta postagem no blog link para instalar o postgres no ubuntu. Estas são as etapas dois e três.

STEP 2: INSTALL POSTGRESQL ON YOUR SYSTEM


sudo apt-get update
sudo apt-get install postgresql-9.1

STEP 3: CONFIGURE YOUR POSTGRESQL PASSWORD

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

No entanto, eu também estou olhando para um RailsCast que instala postgres no Ubuntu. Primeiro, Ryan Bates faz isso

root@li349-144:~# apt-get install postgresql libpq-dev

e, em seguida, ele define uma senha como esta     root @ li349-144: ~ # sudo -u postgres psql

terminal
postgres=# \password
Enter new password: 
Enter it again:

Portanto, uma grande diferença está em como a senha é configurada, em que o Railscast não toca em algo chamado template descrito na Etapa 3 do blogpost

Olhando as instruções para a instalação do postgres no link do Ubuntu, ele é semelhante ao Railscasts, pois não possui esta referência a template para criar o usuário

Você pode explicar a diferença e se devo ou não dar esse passo?     PASSO 3: CONFIGURE SUA SENHA DE POSTGRESQL

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';
    
por Leahcim 10.06.2013 / 00:03

2 respostas

2

Não há diferença real entre os dois métodos. As funções de usuário / login e as senhas são armazenadas em todo o servidor e não em todo o banco de dados. Em outras palavras, a senha é para se conectar ao servidor, portanto, não importa qual banco de dados você se conecta. O comando

sudo -u postgres psql template1 (Agradecimentos a Daniel Vérité pelo comentário)

em efeito informa ao sistema para alternar para o usuário postgres e executar o cliente CLI (psql) para se conectar ao servidor e usar o banco de dados "template1". Se nenhum nome de usuário e / ou banco de dados for especificado, o psql tentará se conectar como usuário atual e "usar" um banco de dados com o mesmo nome do usuário atual (postgres neste caso - o que torna o parâmetro "template" supérfluo)

Isto é o que o comando acima está fazendo passo a passo:

sudo -u postgres Isso alterna para o usuário postgres. Observe a ausência do parâmetro -p do sudo. Isto é essencial, porque o "os usuário postgres" (que não tem senha e seu único propósito é possuir os processos do servidor em execução) é diferente de "usuário de banco de dados postgres" (quem é o usuário raiz do banco de dados ou precisa de uma senha.)

psql --username=postgres --database=template1 Isso se conecta ao localhost usando o banco de dados username postgres e o banco de dados template1.

Para o seu propósito, esta linha pode ser abreviada para

sudo -u postgres psql

ALTER USER postgres with encrypted password 'your_password';

Isso mudará para o usuário postgres e se conectará ao host local como usuário postgres no banco de dados chamado postgres e, em seguida, definirá a senha.

Se você precisar de mais esclarecimentos, pergunte. Ficarei feliz em ajudar.

Uma breve nota sobre bancos de dados de modelos . Ao criar um novo banco de dados, o postgres usa um modelo chamado template1 . Isso é algo como o arquivo de esqueleto usado para definir o padrão do usuário ao criar contas de usuário no linux. Geralmente é modificado pelo dba para garantir que determinadas ferramentas e comportamentos sejam aplicados em todo o servidor. Mas por que 1 você pode perguntar. Bem, existe outro banco de dados de modelos chamado template0 e é uma cópia protegida de "limpo ardósia" de template1 apenas no caso de algo ir para o sul com ele. Aqui é uma página wiki descrevendo tal cenário.

    
por hmayag 10.06.2013 / 01:57
0

Não faça isso ...

terminal
postgres=# \password
Enter new password: 
Enter it again:

Você está ativando um usuário que não deve ser ativado. Em vez disso, (uma cópia da minha resposta)

Configurando o PostgreSQL

Esta é uma cópia do meu post original aqui

Existem dois métodos que você pode configurar. Ambos exigem a criação de um usuário e um banco de dados.

  1. Usando createuser e createdb ,

    $ sudo -u postgres createuser -s $USER
    $ createdb mydatabase
    $ psql -d mydatabase
    
  2. Usando os comandos de administração do SQL e conectando-se a uma senha pelo TCP

    $ sudo -u postgres psql postgres
    

    E, em seguida, no shell do psql

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;
    

    Então você pode entrar,

    $ psql -h localhost -d mydatabase -U myuser -p <port>
    

    Se você não conhece a porta, pode sempre obtê-la executando o seguinte, como o postgres user,

    SHOW port;
    

    Ou

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf

Sidenote: o postgres user

Sugiro que NÃO modifique o postgres user.

  1. Normalmente é bloqueado no sistema operacional. Ninguém deve "efetuar login" no sistema operacional como postgres . Você deveria ter raiz para autenticar como postgres .
  2. Normalmente, não é protegido por senha e delega ao sistema operacional do host. Esta é uma coisa boa . Isso normalmente significa que, para efetuar login como postgres , que é o equivalente do PostgreSQL do SA do SQL Server, você precisa ter acesso de gravação aos arquivos de dados subjacentes. E isso significa que você normalmente poderia arruinar o caos de qualquer maneira.
  3. Ao manter isso desativado, você remove o risco de um ataque de força bruta através de um superusuário nomeado. Ocultar e obscurecer o nome do superusuário tem vantagens.
por Evan Carroll 12.01.2017 / 05:33