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.
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 |
|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ |
| — | ✅ | ✅ | — | ✅ |
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 defaultdatabricks_postgres. Membre dedatabricks_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.EXECUTEsurpg_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 :
GRANT SELECT ON TABLE schema_name.table_name TO role_name;
Accorder l'accès en écriture à une table :
GRANT INSERT, UPDATE, DELETE ON TABLE schema_name.table_name TO role_name;
Accorder tous les privilèges sur une base de données :
GRANT ALL PRIVILEGES ON DATABASE database_name TO role_name;
Accorder des autorisations au niveau du schéma :
-- 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 :
-- 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 :
-- 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 :
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 PRIVILEGESautomatique 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éesdatabricks_postgresdefault. - 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 :
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 :
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 :
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 :
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:
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é.