Pular para o conteúdo principal

gerenciar permissões

info

Beta

O Lakebase Postgres (beta com escalonamento automático) é a próxima versão do Lakebase, disponível apenas para avaliação. Para cargas de trabalho de produção, utilize a versão de pré-visualização pública do Lakebase. Consulte a seção "Como escolher entre as versões" para entender qual versão é a mais adequada para você.

Aprenda como conceder permissões de banco de dados para funções do Postgres em seu projeto de banco de dados Lakebase.

Pré-requisito: Antes de conceder permissões, você deve ter criado uma função do Postgres. Você pode criar funções de senha nativas do Postgres usando a interface do usuário do Lakebase ou criar funções OAuth para identidades do Databricks usando a extensão databricks_auth . Consulte Criar funções do Postgres.

Acesso ao nível do projeto em versão Beta

O recurso Autoscale Beta do Lakebase não oferece suporte a ACLs (Listas de Controle de Acesso) para projetos de banco de dados. Qualquer identidade Databricks com acesso ao workspace pode acessar e administrar projetos de banco de dados por meio da interface do usuário do aplicativo Lakebase.

No entanto, para conectar-se através do Postgres (usando psql, JDBC, etc.), os usuários precisam de:

  1. Uma função Postgres correspondente
  2. Permissões explícitas de banco de dados concedidas a essa função.

Funções pré-criadas e permissões default

Ao criar um projeto de banco de dados, o Lakebase cria automaticamente várias funções do Postgres com diferentes níveis de acesso. Compreender essas funções default ajuda você a decidir quando conceder permissões adicionais.

Funções pré-criadas:

Função

CONECTE-SE

CRIADOB

CREATEROLE

REPLICAÇÃO

BYPASSRLS

<project_owner_role>

databricks_superuser

privilégios padrão:

  • <project_owner_role> : A identidade Databricks do criador do projeto (por exemplo, user@databricks.com). Possui o banco de dados default databricks_postgres . Membro de databricks_superuser (herda os privilégios CREATEDB, CREATEROLE e BYPASSRLS). Possui também permissões de LOGIN e REPLICAÇÃO.
  • databricks_superuser : Função administrativa com todos os privilégios (com concessão) em todos os bancos de dados, esquemas, tabelas e sequências. EXECUTE em pg_stat_statements_reset(). Possui as permissões CREATEDB, CREATEROLE e BYPASSRLS. Não foi possível efetuar o login (NOLOGIN). Esta função não deve ser usada em aplicações automatizadas.

Saiba mais: Funções pré-criadas

Conceder permissões a funções do Postgres

Após criar uma função do Postgres, você deve conceder permissões de banco de dados para permitir que a função acesse bancos de dados, esquemas e tabelas específicos. Por default, uma função Postgres recém-criada não possui permissões de banco de dados.

Use o comando padrão do Postgres GRANT para atribuir permissões:

Conceder acesso de leitura a uma tabela:

SQL
GRANT SELECT ON TABLE schema_name.table_name TO role_name;

Conceda permissão de escrita a uma tabela:

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

Conceder todos os privilégios em um banco de dados:

SQL
GRANT ALL PRIVILEGES ON DATABASE database_name TO role_name;

Conceder permissões em nível de esquema:

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;

Conceder permissões em todas as tabelas de um esquema:

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;

-- Automatically grant permissions on future tables in a schema
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO role_name;

Revogar permissões:

SQL
REVOKE CONNECT ON DATABASE database_name FROM role_name;

Saiba mais: Documentação sobre privilégios do PostgreSQL

Propriedade do banco de dados

No Postgres, o proprietário do banco de dados é a função que criou o banco de dados ou à qual a propriedade foi atribuída. A propriedade do banco de dados concede privilégios abrangentes:

Privilégios concedidos aos proprietários de bancos de dados:

  • Controle total : Controle completo sobre o banco de dados, incluindo a capacidade de excluí-lo.
  • Todos os privilégios : Automático ALL PRIVILEGES no banco de dados (CREATE, CONNECT, TEMPORARY)
  • Conceder privilégios : Capacidade de conceder e revogar privilégios no banco de dados para outras funções.
  • Criação de esquemas : É possível criar esquemas dentro do banco de dados.
  • Propriedade do objeto : detém a propriedade de todos os objetos criados por default no banco de dados.
  • Alterar banco de dados : Permite modificar as configurações e propriedades do banco de dados.

Em projetos Lakebase:

  • Sua função de identidade Databricks (por exemplo, user@databricks.com) é proprietária do banco de dados default databricks_postgres
  • Os proprietários de bancos de dados podem delegar privilégios a outras funções usando instruções GRANT

Saiba mais: Privilégios na documentação do PostgreSQL

Verificar permissões do Postgres

Utilize essas consultas SQL para verificar permissões e associações de funções em seu projeto de banco de dados.

Liste todas as funções e seus atributos.

Veja todas as funções no banco de dados e suas respectivas atribuições:

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

Verificar associações de funções

Veja a que funções um determinado usuário pertence:

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>');

Verifique as permissões da tabela para uma função.

Veja quais permissões uma função possui nas tabelas do esquema 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';

Verificar permissões de conexão com o banco de dados

Verificar se uma função pode se conectar a um banco de dados:

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

Listar os membros de uma função

Veja todas as funções que são membros 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');

Para consultas avançadas adicionais que permitam verificar hierarquias de herança de funções, view matrizes de permissões detalhadas e encontrar administradores de funções, consulte a documentação de pré-visualização pública do Lakebase para gerenciar funções do Postgres .

Próximos passos