ERREUR: permission refusée pour le schéma user1_gmail_com à caractère 46
J'ai besoin de limiter l'accès de l'utilisateur, l'accès uniquement sur un particulier de schéma de tables seulement.J'ai donc essayé de suivre la requête et la connexion comme user1_gmail_com. Mais j'ai eu le message d'erreur suivant lorsque j'essaie de parcourir n'importe quel schéma de la table.
Ma Requête:
SELECT clone_schema('my_application_template_schema','user1_gmail_com');
CREATE USER user1_gmail_com WITH PASSWORD 'myloginpassword';
REVOKE ALL ON ALL TABLES IN SCHEMA user1_gmail_com FROM PUBLIC;
GRANT SELECT ON ALL TABLES IN SCHEMA user1_gmail_com TO user1_gmail_com;
Erreur SQL:
ERROR: permission denied for schema user1_gmail_com at character 46
In statement:
SELECT COUNT(*) AS total FROM (SELECT * FROM "user1_gmail_com"."organisations_table") AS sub
Jour De Travail De La Requête:
SELECT clone_schema('my_application_template_schema','user1_gmail_com');
CREATE USER user1_gmail_com WITH PASSWORD 'myloginpassword';
REVOKE ALL ON ALL TABLES IN SCHEMA user1_gmail_com FROM PUBLIC;
GRANT USAGE ON SCHEMA user1_gmail_com TO user1_gmail_com;
GRANT SELECT ON ALL TABLES IN SCHEMA user1_gmail_com TO user1_gmail_com;
- Donc, ce n'est
clone_schema()
faire? - Il prend la copie de toutes les tables de my_application_template_schema à user1_gmail_com schéma.wiki.postgresql.org/wiki/Clone_schema
- Ni le
clone_schema()
ni vos exemples contiennent de l'instruction où l'erreur se produit. D'où vient donc que l'instruction qui génère l'erreur vient? - Je n'ai eu aucune erreur lors de l'exécution requête ci-dessus. Lorsque je me connecte en tant que user1_gmail_com et essayez d'accéder aux tables en user1_gmail_com schéma, j'ai eu d'erreur ci-dessus
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour donner accès non seulement aux tables dans le schéma, mais aussi pour le schéma lui-même.
De la manuel:
Donc soit faire votre utilisateur créé le propriétaire du schéma, ou de la subvention d'UTILISATION sur le schéma de cet utilisateur.
Ce qui me confond. Toujours pas sûr que je suis le manipuler correctement. Exécuter
\h grant
pour la syntaxe dans psql. Voici comment j'ai réussi à obtenir mes autres utilisateurs et de groupes de travail que j'avais besoin:GRANT ALL PRIVILEGES ON DATABASE xx TO yy
n'implique pasGRANT USAGE ON SCHEMA zz
quandzz
est un schéma de la base de donnéesxx
, étrangeJ'ai continué à obtenir cette erreur lors de l'utilisation de
flyway
pour déployer les modifications de base de données. Je fais un peu de configuration manuelle d'abord, comme la création de la base de données, de sorte que la voie de migration n'aurait pas besoin de ces super-admin autorisations.Mon Fix
J'ai eu à assurer que l'utilisateur de base de données de la voie de migration de travail utilisée a des droits de propriété sur le schéma public, de sorte que la voie de migration de l'utilisateur pourrait alors attribuer le droit d'utiliser le schéma pour d'autres rôles.
La configuration de Détails
Je suis en utilisant AWS RDS (à la fois régulière et Aurora), et qu'elles ne permettent pas des super-utilisateurs dans les bases de données. RDS réserves des super-utilisateurs pour une utilisation par AWS, seulement, de sorte que les consommateurs sont incapables de briser la réplication des trucs qui se construit dans. Cependant, il y a un catch-22, que vous devez être un propriétaire dans postgres pour être en mesure de le modifier.
Ma solution a été de créer un rôle qui agit à titre de propriétaire (propriétaire "rôle"), puis les affecter à la fois mon utilisateur admin et de la voie de migration de l'utilisateur pour le rôle de propriétaire et de l'utilisation
ALTER
des scripts pour chaque objet d'assigner le propriétaire de l'objet pour le rôle de propriétaire.J'ai raté le schéma public, car c'est une auto-créé quand j'ai créé le script de base de données manuellement. Le schéma public par défaut à mon rôle d'administrateur plutôt que de le partagé rôle de propriétaire. Ainsi, lorsque la voie de migration de l'utilisateur a essayé d'attribuer schéma public des autorisations à d'autres rôles, il n'avait pas l'autorité pour le faire. Une erreur n'a été levée au cours de la voie de migration de l'exécution, cependant.