Eu executei o seguinte SQL no psql:
CREATE USER bspu LOGIN;
CREATE DATABASE bsp OWNER bspu;
GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu;
\c bsp
CREATE TABLE users (
id SERIAL PRIMARY KEY,
client_id VARCHAR(20) NOT NULL,
api_key VARCHAR(100) NOT NULL,
api_secret VARCHAR(100) NOT NULL,
auth_token VARCHAR(128) NOT NULL
);
Quando eu logo como bspu
e tento consultar a users
tabela, recebo o erro:
permission denied for relation users
Eu tentei correr:
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;
Mas isso não ajuda. O que estou fazendo errado? Por que o proprietário do banco de dados NÃO tem permissão para consultar seu próprio banco de dados?
EDIT: atualizei bspu
para superusuário por enquanto, para poder continuar trabalhando. Qualquer orientação adicional apreciada.
postgresql
permissions
se __name__ for Nenhum
fonte
fonte
\dt "users"
mostra a saída do show?SELECT session_user, current_user
na parte superior do seu script? E qual é a sua versão do Postgres?Respostas:
DEFAULT PRIVILEGES
se não alterar as permissões para existentes objetos. Eles são os privilégios padrão para objetos recém-criados e apenas para a função específica à qual pertencem. Se você não definir a função ao executarALTER DEFAULT PRIVILEGES
, o padrão será a função atual (ao executar aALTER DEFAULT PRIVILEGES
instruçãoAlém disso, como você está usando uma
serial
coluna, que cria aSEQUENCE
, também será necessário definir privilégios padrão para sequências.Execute isso no usuário com o qual você cria objetos, antes de executar o
CREATE
comando:Se você deve usar o pgAdmin, uma palavra de cautela. Há um erro na versão atual 1.20 (ou mais antiga) na exibição do script SQL de engenharia reversa para
DEFAULT PRIVILEGES
. O visor ignora o usuário proprietário e, portanto, está incorreto em determinadas situações. Eu relatei o bug, o assunto está pendente .Para objetos existentes , você também pode estar interessado neste formulário "em lote" do
GRANT
comando :Mais nesta questão relacionada ao SO:
fonte
fonte