Devo estar faltando alguma coisa com relação à configuração do PostgreSQL. O que eu gostaria de fazer é criar vários bancos de dados e usuários isolados um do outro, para que um usuário específico tenha acesso apenas aos bancos de dados especificados. No entanto, pelo que posso determinar, qualquer usuário criado tem acesso a todos os bancos de dados sem conceder nenhuma concessão específica.
Aqui está o que eu faço no Ubuntu Server 12.04:
- apt-get install postgresql
- sudo -u postgres createuser -DRSP mike1 (Especificando a senha para o novo usuário)
- sudo -u postgres createdb data1
- psql -h localhost -U mike1 data1 (Especificando a senha para o usuário mike1 efetuar login)
Parece que o novo usuário "mike1" não tem problemas para conectar-se ao banco de dados "data1" e criar tabelas etc. E isso sem executar nenhum comando GRANT (e o proprietário do "data1" é "postgres", pois não especifiquei um proprietário na etapa 3). É realmente assim que deve funcionar?
O que eu gostaria de fazer é conceder ao mike1 acesso total aos dados1 e repetir isso para mais usuários e bancos de dados, certificando-se de que os usuários tenham acesso apenas a um (ou possivelmente a vários) bancos de dados de minha escolha.
fonte
Respostas:
No nível SQL, todo usuário pode realmente se conectar a um banco de dados recém-criado, até que o seguinte comando SQL seja emitido:
Uma vez feito, cada usuário ou função que deve poder se conectar deve receber explicitamente o privilégio de conexão:
Editar: em um cenário de vários inquilinos, mais do que apenas o
connect
privilégio seria removido. Para obter dicas e práticas recomendadas para a multilocação, leia o wiki público do postgresql: Hospedagem de banco de dados compartilhado e gerenciamento de direitos no PostgreSQL .fonte
postgres
pode acessar todos os bancos de dados.PUBLIC tem acesso ao banco de dados por padrão, mas não pode acessar os dados. Você pode REVOGAR o PÚBLICO:
Se você deseja essa configuração para todos os bancos de dados futuros, revogue CONNECT no banco de dados template1 (banco de dados de modelo padrão para criar um novo banco de dados):
fonte
Além de revogar os privilégios de conexão do PUBLIC por padrão e concedê-los conforme desejado, o outro nível no qual você pode controlar o acesso é por meio do arquivo pg_hba.conf.
Você pode encontrar onde o arquivo está armazenado:
Se você optar por usar esse mecanismo, existem comentários incorporados que podem ser suficientes para você começar. Os documentos estão aqui:
http://www.postgresql.org/docs/current/interactive/auth-pg-hba-conf.html
fonte
GRANT
/REVOKE
discutida em outras respostas provavelmente será mais fácil. Por um lado, você só precisa de uma conexão de banco de dados de superusuário para isso, em vez de precisar de um login do SO que possa editar o arquivo.Me deparei com esse segmento procurando uma maneira de impedir que os usuários listem os outros nomes de banco de dados. O
REVOKE CONNECT
não impede isso.De acordo com as respostas a esta pergunta do SO, não existe uma maneira (recomendável) de alcançá-lo.
fonte