Comment puis-je résoudre un message d'avertissement indiquant « no privileges could be revoked for "public" » (aucun privilège pourrait être révoqué pour « public ») lorsque je tente de révoquer l'accès sur le schéma public d'une instance de base de données PostgreSQL Amazon RDS ?

Date de la dernière mise à jour : 05/03/2020

J'essaie d'exécuter REVOKE CREATE ON SCHEMA public FROM PUBLIC sur une instance de base de données PostgreSQL Amazon Relational Database Service (Amazon RDS). Mais je reçois le message d'avertissement suivant : « no privileges could be revoked for "public" » (aucun privilège pourrait être révoqué pour « public »)

Comment puis-je résoudre le problème décrit dans ce message d'avertissement ?

Brève description

Par défaut, les utilisateurs ne peuvent pas accéder à des objets dans des schémas qu'ils ne possèdent pas. Pour utiliser des objets à l'intérieur d'un schéma, le privilège « USAGE » (UTILISATION) pour ce schéma doit être accordé à l'utilisateur. De même, pour la création d'objets, le privilège « CREATE » (CRÉER) doit être accordé sur ce schéma. Cependant, tous les utilisateurs disposent des privilèges « CREATE » (CRÉER) et « USAGE » (UTILISATION) sur le schéma public. Les utilisateurs qui peuvent se connecter à une base de données ont donc des privilèges pour créer des objets dans le schéma public de la base de données. Si vous ne voulez pas que tous les utilisateurs puissent créer des objets dans un schéma public, révoquez le privilège :

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

Remarque : dans cette commande, public est le schéma et PUBLIC signifie tous les utilisateurs :public est un identifiant et PUBLIC est un mot-clé.

Lorsque vous révoquez le privilège « CREATE » (CRÉER) sur le schéma public pour une instance de base de données Amazon RDS PostgreSQL, vous pouvez recevoir un message d'avertissement indiquant « no privileges could be revoked for "public" » (aucun privilège pourrait être révoqué pour « public »). Ce message d'avertissement s'affiche généralement dans les instances de base de données RDS lorsque le propriétaire du schéma public de la base de données à laquelle vous êtes connecté est rdsadmin et non le propriétaire de la base de données. Le propriétaire du schéma public, rdsadmin, se produit le plus souvent lorsque la base de données est créée à l'aide de template0 au lieu de la valeur par défaut, qui est template1. Pour plus d'informations, consultez la documentation de PostgreSQL relative aux Bases de données modèles.

Dans Amazon RDS PostgreSQL, le propriétaire de la base de données template0 est rdsadmin et le propriétaire de template1 est l'utilisateur principal. Si vous créez une base de données à l'aide de template0, le schéma public appartient à rdsadmin et non à votre utilisateur principal ou propriétaire de base de données. Consultez l'exemple de base de données suivant qui est créé à l'aide de template0 :

testpg=> create database tmp0 template template0;
CREATE DATABASE
tmp0=> SELECT n.nspname AS "Name",
  pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"
FROM pg_catalog.pg_namespace n
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
ORDER BY 1;
List of schemas
Name  |  Owner   
--------+----------
public | rdsadmin
(1 row)

Comme le propriétaire est rdsadmin, un message d'avertissement est renvoyé lorsque la commande « REVOKE » (RÉVOQUER) est exécutée :

tmp0=> REVOKE CREATE ON SCHEMA public FROM PUBLIC;
WARNING:  no privileges could be revoked for "public"
REVOKE

Résolution

1.    Modifiez le propriétaire du schéma public :

ALTER SCHEMA public OWNER TO user1;

Remarque : dans cet exemple de commande, user1 est le propriétaire de la base de données.

2.    Vérifiez que la propriété a été modifiée :

SELECT n.nspname AS "Name",
  pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"
FROM pg_catalog.pg_namespace n
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
ORDER BY 1;
List of schemas
Name  |  Owner   
--------+----------
public | user1
(1 row)

3.    Exécutez la commande « REVOKE » (RÉVOQUER) depuis l'intérieur de la base de données en utilisant le nom d'utilisateur qui possède la base de données (user1).

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

Documentation PostgreSQL pour le schéma public

PostgreSQL sur Amazon RDS

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?