Je souhaite savoir comment gérer les privilèges d’objets dans les clusters de bases de données (DB) Amazon Aurora édition compatible avec PostgreSQL.
Résolution
Pour gérer les privilèges d’objets dans les clusters de bases de données Aurora compatible avec PostgreSQL, accordez aux utilisateurs ou aux rôles des autorisations spécifiques leur permettant d'effectuer diverses actions sur les objets de base de données.
Pour plus d'informations sur les types d'autorisations de base de données, consultez la page Privilèges sur le site Web de PostgreSQL.
Remarque : AWS utilise le terme « autorisation » pour « privilège ».
Créer un utilisateur et lui accorder l'autorisation d'accéder à un objet
Procédez comme suit :
- Connectez-vous à votre cluster Aurora compatible avec PostgreSQL à l'aide d'un client PostgreSQL, tel que psql.
- Pour créer un utilisateur, exécutez la commande suivante :
CREATE USER username WITH PASSWORD 'password';
Remarque : remplacez username et password par votre nom d'utilisateur et votre mot de passe.
- Pour autoriser un utilisateur ou un rôle à effectuer une action sur un objet, exécutez la commande suivante :
GRANT privilege_type ON object_name TO user_or_role;
Remarque : remplacez privilege_type par l'action de base de données que vous souhaitez que l'utilisateur exécute. Remplacez object_name par l'objet de base de données sur lequel vous souhaitez que l'utilisateur agisse. Remplacez user_or_role par l'utilisateur ou le rôle auquel vous souhaitez attribuer une autorisation d'objet.
Par exemple, vous pouvez exécuter la commande suivante pour accorder plusieurs autorisations d’objet à user_or_role :
GRANT SELECT, INSERT, UPDATE ON object_name TO user_or_role;
Pour en savoir plus, consultez la page GRANT sur le site Web de PostgreSQL.
Révoquer les autorisations accordées aux utilisateurs et aux rôles
Pour supprimer les autorisations d'un utilisateur ou d'un rôle, exécutez la commande suivante :
REVOKE privilege_type ON object_name FROM user_or_role;
Remarque : remplacez privilege_type par l'action de base de données que vous souhaitez supprimer. Remplacez object_name par l'objet de base de données. Remplacez user_or_role par l'utilisateur ou le rôle dont vous souhaitez supprimer les autorisations.
Pour en savoir plus, consultez la page REVOKE sur le site Web de PostgreSQL.
Accorder les autorisations minimales requises aux utilisateurs
Il est recommandé de n'accorder à l'utilisateur ou au rôle que les autorisations nécessaires.
Pour vérifier les autorisations figurant sur une table, exécutez la commande suivante :
\z table_name
Remarque : remplacez table_name par le nom de la table que vous souhaitez consulter.
Vous pouvez également exécuter la commande suivante :
SELECT * FROM information_schema.table_privileges WHERE table_name = 'your_table';
Créer et attribuer des rôles pour les groupes d'utilisateurs
Il est recommandé de créer des rôles pour des groupes d'utilisateurs et d'attribuer des autorisations à des rôles plutôt qu'à des utilisateurs individuels. Pour plus d'informations, consultez les pages Rôles de base de données pour l'administration du serveur et Rôles de base de données sur le site Web de PostgreSQL.
Pour créer un rôle et lui accorder l'autorisation d'accès à toutes les tables de votre base de données, exécutez la commande suivante :
CREATE ROLE analyst_role;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO analyst_role;
Remarque : remplacez schema_name par le nom de votre schéma et analyst_role par le nom de votre rôle.
Accorder des autorisations au niveau du schéma à des utilisateurs et des rôles
Pour accorder à un utilisateur ou à un rôle une autorisation au niveau du schéma, exécutez la commande suivante :
GRANT USAGE ON SCHEMA schema_name TO user_or_role;
Remarque : remplacez schema_name par le nom de votre schéma et user_or_role par le nom de votre utilisateur ou de votre rôle.
Définir une autorisation par défaut pour les futurs objets
Pour définir une autorisation par défaut sur les nouvelles tables pour readonly _role, exécutez la commande suivante :
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO readonly_role;
Remarque : remplacez schema_name par le nom de votre schéma.
Transférer la propriété d'objets entre utilisateurs
Pour éviter les problèmes de sécurité, assurez-vous de gérer la propriété d’objets.
Pour transférer la propriété à un nouveau propriétaire, exécutez la commande suivante :
ALTER TABLE table_name OWNER TO new_owner;
Remarque : remplacez table_name par le nom de la table et new_owner par le nom du nouveau propriétaire.
Surveiller les modifications d'autorisations à l'aide de flux d'activité
Pour surveiller l'activité de la base de données, démarrez un flux d'activité pour votre cluster de bases de données et utilisez un tableau JSON databaseActivityEventList. Pour plus d'informations, consultez la section Objet JSON DatabaseActivityEvents.
Planifier des révisions d’autorisations régulières
Planifiez des révisions régulières des autorisations et mettez-les à jour en fonction des exigences actuelles.
Par exemple, vous pouvez exécuter la requête suivante pour afficher toutes les autorisations que vous avez accordées sur les tables et les vues :
-- To view table and view privileges
SELECT
grantee,
table_schema,
table_name,
privilege_type
FROM
information_schema.role_table_grants
ORDER BY
grantee, table_schema, table_name, privilege_type;
-- List schema privileges
SELECT nspname, rolname, nspacl FROM pg_namespace n JOIN pg_roles r ON r.oid = n.nspowner;
-- Show all privileges for a specific role
SELECT table_catalog, table_schema, table_name, privilege_typeFROM information_schema.table_privilegesWHERE grantee = 'role_name';
-- Show role-specific schema privileges
SELECT n.nspname as schema_name,
r.rolname as role_name,
has_schema_privilege(r.oid, n.oid, 'CREATE') as has_create,
has_schema_privilege(r.oid, n.oid, 'USAGE') as has_usageFROM pg_namespace nCROSS JOIN pg_roles rWHERE n.nspname NOT LIKE 'pg_%'
AND n.nspname != 'information_schema';