Aller au contenu principal

Gérer les autorisations de base de données

Octroyez des autorisations de base de données aux rôles Postgres dans votre projet Lakebase à l'aide de commandes SQL standard GRANT. Les autorisations contrôlent quelles bases de données, schémas et tables un rôle peut accéder.

remarque

Cette page couvre les autorisations de base de données (commandes Postgres GRANT). Pour les autorisations de projet (gestion de l'infrastructure), veuillez consulter Autorisations de projet. Pour un tutoriel sur la configuration des deux, veuillez consulter Tutoriel : Accorder l'accès au projet et à la base de données à un nouvel utilisateur.

Prérequis

Avant d'octroyer des autorisations, vous devez avoir créé un rôle Postgres. Vous pouvez créer des rôles OAuth pour les identités Databricks à l'aide de l'extension databricks_auth, ou créer des rôles de mot de passe Postgres natifs à l'aide de l'interface utilisateur Lakebase. Consultez Créer des rôles Postgres.

Rôles prédéfinis et autorisations default

Lorsque vous créez un projet, Lakebase crée automatiquement plusieurs rôles Postgres avec différents niveaux d'accès. Comprendre ces rôles default vous aide à décider quand accorder des autorisations supplémentaires.

Rôles pré-créés :

Rôle

Connexion

CREATEDB

CREATEROLE

Réplication

BYPASSRLS

<project_owner_role>

databricks_superuser

Rôle

Connexion

CREATEDB

CREATEROLE

Réplication

BYPASSRLS

<project_owner_role>

databricks_superuser

Default privilèges :

  • <project_owner_role> : l'identité Databricks du créateur du projet (par exemple, user@databricks.com). Possède la base de données default databricks_postgres. Membre de databricks_superuser (hérite des privilèges CREATEDB, CREATEROLE et BYPASSRLS). A également des autorisations de CONNEXION et de RÉPLICATION.
  • databricks_superuser ** ** : Rôle administratif avec tous les privilèges (avec octroi) sur toutes les bases de données, les schémas, les tables et les séquences. EXECUTE sur pg_stat_statements_reset(). Dispose des autorisations CREATEDB, CREATEROLE et BYPASSRLS. Impossible de se connecter (NOLOGIN). Ce rôle ne doit pas être utilisé dans les applications automatisées.

En savoir plus : Rôles prédéfinis

Accorder des autorisations aux rôles Postgres.

Après avoir créé un rôle Postgres, vous devez accorder des autorisations de base de données pour permettre au rôle d'accéder à des bases de données, des schémas et des tables spécifiques. By default, un rôle Postgres nouvellement créé n'a pas d'autorisations de base de données.

Utilisez les commandes Postgres GRANT standard pour attribuer des autorisations :

Accorder l'accès en lecture à une table :

SQL
GRANT SELECT ON TABLE schema_name.table_name TO role_name;

Accorder l'accès en écriture à une table :

SQL
GRANT INSERT, UPDATE, DELETE ON TABLE schema_name.table_name TO role_name;

Accorder tous les privilèges sur une base de données :

SQL
GRANT ALL PRIVILEGES ON DATABASE database_name TO role_name;

Accorder des autorisations au niveau du schéma :

SQL
-- Allow creating objects in a schema
GRANT CREATE ON SCHEMA schema_name TO role_name;

-- Allow using a schema (required to access objects within it)
GRANT USAGE ON SCHEMA schema_name TO role_name;

Accorder des autorisations sur toutes les tables existantes dans un schéma :

SQL
-- Grant read access to all existing tables in a schema
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO role_name;

-- Grant write access to all existing tables in a schema
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schema_name TO role_name;

Accorder des autorisations sur les tables futures dans un schéma :

SQL
-- Grants permissions on future tables created by the current user.
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO role_name;

-- Grants permissions on future tables created by table_creator_role_name.
-- Note that only members of table_creator_role_name can run this command.
ALTER DEFAULT PRIVILEGES FOR ROLE table_creator_role_name IN SCHEMA schema_name GRANT SELECT ON TABLES TO role_name;

Révoquer les autorisations :

SQL
REVOKE CONNECT ON DATABASE database_name FROM role_name;

En savoir plus : documentation sur les privilèges PostgreSQL

Propriété de la base de données

Dans Postgres, le propriétaire de la base de données est le rôle qui a créé la base de données ou à qui la propriété a été attribuée. La propriété de la base de données accorde des privilèges complets :

Privilèges accordés aux propriétaires de base de données :

  • Contrôle total : contrôle complet de la base de données, y compris la possibilité de la supprimer.
  • Tous les privilèges : ALL PRIVILEGES automatique sur la base de données (CREATE, CONNECT, TEMPORARY).
  • Accorder des privilèges : capacité d'accorder et de révoquer des privilèges sur la base de données à d'autres rôles.
  • Création de schémas : peut créer des schémas dans la base de données.
  • Object ownership : Possède tous les objets créés par default dans la base de données.
  • Modifier la base de données : permet de modifier les paramètres et les propriétés de la base de données.

Dans les projets Lakebase :

  • Votre rôle d’identité Databricks (par exemple, user@databricks.com) possède la base de données databricks_postgres default.
  • Les propriétaires de base de données peuvent déléguer des privilèges à d'autres rôles à l'aide des instructions GRANT.

En savoir plus : Privilèges dans la documentation PostgreSQL

Pour transférer la propriété des objets Postgres à un rôle de groupe Databricks, consultez Transférer la propriété des objets Postgres.

Vérifier les autorisations Postgres

Utilisez ces queries SQL pour vérifier les autorisations et les appartenances aux rôles dans votre projet.

Lister tous les rôles et leurs attributs

Affichez tous les rôles dans la base de données et leurs capacités :

SQL
SELECT rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin
FROM pg_roles
ORDER BY rolname;

Vérifier les adhésions aux rôles

Voyez à quels rôles un utilisateur spécifique appartient :

SQL
SELECT r.rolname as "Role name"
FROM pg_roles r
JOIN pg_auth_members m ON r.oid = m.roleid
WHERE m.member = (SELECT oid FROM pg_roles WHERE rolname = '<your_role>');

Vérifier les autorisations de table pour un rôle

Visualiser les autorisations qu'un rôle a sur les tables du schéma public :

SQL
SELECT
schemaname,
tablename,
has_table_privilege('<your_role>', schemaname||'.'||tablename, 'SELECT') as can_select,
has_table_privilege('<your_role>', schemaname||'.'||tablename, 'INSERT') as can_insert,
has_table_privilege('<your_role>', schemaname||'.'||tablename, 'UPDATE') as can_update,
has_table_privilege('<your_role>', schemaname||'.'||tablename, 'DELETE') as can_delete
FROM pg_tables
WHERE schemaname = 'public';

Vérifiez les autorisations de connexion à la base de données.

Vérifier si un rôle peut se connecter à une base de données :

SQL
SELECT has_database_privilege('<your_role>', 'databricks_postgres', 'CONNECT');

Lister les membres d'un rôle

Voir tous les rôles membres de databricks_superuser:

SQL
SELECT
pg_get_userbyid(member) as member_role
FROM pg_auth_members
WHERE roleid = (SELECT oid FROM pg_roles WHERE rolname = 'databricks_superuser');

Pour des queries avancées supplémentaires permettant de vérifier les hiérarchies d'héritage de rôle, d'afficher les matrices d'autorisations détaillées et de trouver les administrateurs de rôle, consultez Gérer les rôles Postgres dans la documentation Lakebase Provisionné.

Ressources supplémentaires