J'ai exécuté le SQL suivant dans 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
);
Lorsque je me connecte en tant que bspu
et essaie d'interroger la users
table, j'obtiens l'erreur:
permission denied for relation users
J'ai essayé de courir:
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;
Mais ça n'aide pas. Qu'est-ce que je fais mal? Pourquoi le propriétaire de la base de données N'A PAS les autorisations pour interroger sa propre base de données?
EDIT: J'ai mis bspu
à niveau vers superutilisateur pour l'instant, donc je peux continuer à travailler. Toute autre orientation appréciée.
postgresql
permissions
si __name__ est Aucun
la source
la source
\dt "users"
?SELECT session_user, current_user
en haut de votre script? Et quelle est votre version Postgres?Réponses:
DEFAULT PRIVILEGES
ne modifiez pas les autorisations pour les objets existants . Ce sont les privilèges par défaut pour les objets nouvellement créés et uniquement pour le rôle particulier auquel ils appartiennent. Si vous ne définissez pas le rôle lors de l'exécutionALTER DEFAULT PRIVILEGES
, il correspond par défaut au rôle actuel (lors de l'exécution de l'ALTER DEFAULT PRIVILEGES
instruction.De plus, puisque vous utilisez une
serial
colonne, qui crée unSEQUENCE
, vous souhaiterez également définir des privilèges par défaut pour les séquences.Exécutez ceci sur l'utilisateur avec lequel vous créez des objets, avant d'exécuter la
CREATE
commande:Si vous devez utiliser pgAdmin, un mot d'avertissement. Il y a un bogue dans la version actuelle 1.20 (ou plus ancienne) dans l'affichage du script SQL inversé pour
DEFAULT PRIVILEGES
. L'affichage ignore l'utilisateur propriétaire et est donc incorrect dans certaines situations. J'ai signalé le bug, l'affaire est en suspens .Pour les objets existants , vous pouvez également être intéressé par cette forme "batch" de la
GRANT
commande :Plus sur cette question connexe sur SO:
la source
la source