Eu adicionei o usuário myuser
ao Postgres.
Em seguida, adicionei o banco de dados mydatabase
na GUI do pgAdmin III e restaurei a partir de um arquivo de backup. Portanto, o proprietário de mydatabase
é o superusuário postgres
.
Então tentei dar todos os direitos de acesso e modificação mydatabase
para myuser
. Entrei psql
como usuário postgres
:
psql -d template1 -U postgres
e então eu executei esta consulta:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser
Agora eu posso usar myuser
para logar, mas se eu tentar uma consulta simples, recebo este erro:
ERROR: permission denied for relation table_name
Estou esquecendo de algo? Você pode me ajudar a resolver isso?
Você concedeu privilégios
CREATE
,CONNECT
, eTEMPORARY
no banco de dados,myuser
mas ainda não concedeu privilégiosSELECT
deINSERT
tabela. Você vai precisar de algo como:Além disso, você precisa de privilégios em sequências se tiver colunas seriais ou outros padrões de coluna extraídos de sequências. Geralmente, o
USAGE
privilégio é suficiente paraINSERT
que as operações funcionem, mas como você pediu"give all rights"
:Detalhes no
GRANT
manual.Use o comando fornecido por @Gord para objetos já existentes .
Você provavelmente vai querer conceder
DEFAULT PRIVILEGES
também. Assim, seu usuáriomyuser
também pode acessar objetos futuros automaticamente.Pode ser feito por esquema :
Se você omitir o esquema, ele se aplica a todo o banco de dados:
Aplica-se apenas a objetos criados pela função especificada (padrão para a função que executa este comando):
Disponível desde o PostgreSQL 9.0.
Não se esqueça de
GRANT
privilégiosSEQUENCES
em adição, se você tiver algum. (Por exemplo, como fonte para valores padrão em uma coluna serial.)Embora as outras respostas a esta pergunta estejam corretas, permita-me propor outra opção. Quando um banco de dados é restaurado, você pode controlar o usuário com o qual o banco de dados é restaurado. Não tenho certeza sobre os detalhes de como fazer isso com o pgAdmin3, mas os utilitários pg_dump e pg_restore incluem opções específicas para permitir que isso seja feito.
Se você usar
pg_dump --no-owner
, o arquivo de despejo não incluirá nenhuma restauração de propriedade. Quando você restaura um dump criado usando--no-owner
, o usuário que você usou para fazer a restauração será o proprietário de todos os objetos. Se você tiver um arquivo de despejo de formato personalizado e estiver usando pg_restore, poderá usar a--no-owner
opção com pg_restore para que ele ignore qualquer restauração de propriedade ao restaurar o banco de dados.Observe que isso exigirá que o usuário que está fazendo a restauração tenha os direitos necessários no banco de dados para criar os objetos que existem no arquivo de despejo. De um modo geral, conceder "CREATE" no nível do banco de dados ao usuário que está fazendo a restauração será suficiente.