Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
Esta funcionalidade está na Pré-visualização Pública nas seguintes regiões: westus, westus2, eastus, eastus2, centralussouthcentralusnortheuropewesteuropeaustraliaeastbrazilsouthcanadacentralcentralindiasoutheastasiauksouth.
Esta página descreve quando e como conceder permissões de usuários e identidades do Azure Databricks a uma instância de banco de dados.
Para permitir que outros usuários usem o PostgreSQL para acessar a instância do banco de dados, o databricks_superuser deve criar funções Postgres correspondentes para eles. Para obter detalhes sobre como criar funções do Postgres, consulte Gerenciar funções do Postgres.
Quando e como as permissões são verificadas
Quando você usa a sintaxe Postgres ou se conecta por meio de uma interface PostgreSQL, o Lakebase impõe controles de acesso específicos do PostgreSQL usando o seguinte:
- Funções do Postgres
- Associações de funções
- Permissões concedidas pelo Postgres
Em todos os outros cenários, o Lakebase impõe controles de acesso específicos do Databricks:
- Identidades do Azure Databricks (usuários, grupos e entidades de serviço)
- Associações de grupos do Azure Databricks
- Listas de controle de acesso ao espaço de trabalho (ACLs)
- Privilégios do Catálogo Unity
Observação
Não há sincronização automática entre identidades e associações do Azure Databricks e funções e associações do Postgres.
| Caso de uso / Permissão ou identidade | Gerenciar instâncias de banco de dados | Criar ou excluir tabelas sincronizadas | Gerenciar pipeline de tabela sincronizada | Consultar tabelas Postgres a partir de um armazém SQL | Consultar recursos on-line no serviço de recursos e modelos | Consultar tabelas do Postgres no PostgreSQL |
|---|---|---|---|---|---|---|
| Identidades do Azure Databricks | ✅ | ✅ | ✅ | ✅ | ✅ | Requer uma função Postgres correspondente |
| Associações ao grupo Databricks | ✅ | ✅ | ✅ | ✅ | ✅ | Verificado apenas ao iniciar sessão como um grupo |
| ACLs de instância | ✅ | ✅ | ||||
| Pipeline ACLs (Listas de Controlo de Acesso) | Precisa ser proprietário de um pipeline ao reutilizar um pipeline existente ou excluir uma tabela sincronizada (que edita o pipeline) | ✅ | ||||
| Permissões de UC | ✅ | ✅ | ✅ | |||
| Funções do Postgres | ✅ | |||||
| Pertencimento a perfis do Postgres | ✅ | |||||
| Permissões do Postgres | ✅ |
Permissões de instância de base de dados
Um utilizador deve ter permissões específicas na instância da base de dados para gerir a instância e realizar operações de tabela a partir da interface, API ou SDK do Azure Databricks. Os administradores do espaço de trabalho e o criador da instância podem atribuir permissões adicionais a quaisquer usuários, grupos ou entidades de serviço desejados na página Visão geral das instâncias de banco de dados .
- Clique em Computação na barra lateral do espaço de trabalho.
- Clique em Banco de Dados OLTP.
- Clique na guia Permissões .
- Clique em Gerenciar permissões de instância no canto superior direito.
- Insira um usuário, grupo ou entidade de serviço para conceder permissões adicionais.
- Selecione a permissão que deseja conceder à identidade. Consulte ACLs de instância de banco de dados.
- Clique em + Adicionar.
- Qualquer usuário de espaço de trabalho pode exibir ou listar instâncias de banco de dados. As permissões de catálogo de banco de dados e tabela sincronizada são ainda mais regidas pelas permissões de metastore, catálogo, esquema e tabela do Unity Catalog. Para obter mais detalhes, consulte Gerenciar privilégios no Catálogo Unity.
- Clique em Salvar.
Permissões do Postgres
Para ler ou escrever numa tabela no Postgres, os utilizadores necessitam das seguintes permissões no Postgres:
-
CONNECTna base de dados -
USAGEno esquema (ouCREATEpara criar novas tabelas) -
SELECT,INSERT,UPDATE, ouDELETEna mesa
Para a lista completa de privilégios Postgres, consulte a documentação PostgreSQL.
Verifique as permissões dos utilizadores numa tabela específica no Postgres
Execute a seguinte instrução SQL para criar uma função chamada pg_temp.check_permissions que verifica as permissões de um usuário, incluindo permissões herdadas.
CREATE OR REPLACE FUNCTION pg_temp.check_permissions(TEXT, TEXT, TEXT, TEXT)
RETURNS TABLE(database_connect BOOLEAN, schema_usage BOOLEAN, table_select BOOLEAN,
table_insert BOOLEAN, table_update BOOLEAN, table_delete BOOLEAN) AS $$
SELECT
has_database_privilege($1, $2, 'CONNECT'),
has_schema_privilege($1, $3, 'USAGE'),
has_table_privilege($1, $4, 'SELECT'),
has_table_privilege($1, $4, 'INSERT'),
has_table_privilege($1, $4, 'UPDATE'),
has_table_privilege($1, $4, 'DELETE')
$$ LANGUAGE sql
;
Para usar a função, utilize a seguinte consulta:
SELECT * FROM pg_temp.check_permissions('<your_user>', '<your_database>', '<your_schema>', '<your_table>');
-- Example:
SELECT * FROM pg_temp.check_permissions('joe@acme.org', 'databricks_postgres', 'public', 'table1');
Veja todas as permissões para base de dados, esquema e tabela no Postgres
A instrução SQL a seguir cria uma função chamada pg_temp.make_owner_acl que retorna uma exibição detalhada de todas as permissões concedidas, excluindo as permissões herdadas, para todos os usuários:
CREATE OR REPLACE FUNCTION pg_temp.make_owner_acl(owner_oid OID)
RETURNS TABLE(grantor OID, grantee OID, privilege_type TEXT, is_grantable BOOLEAN) AS $$
SELECT owner_oid, owner_oid,'OWNER'::TEXT, True
$$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION pg_temp.get_all_permissions(TEXT, TEXT, TEXT)
RETURNS TABLE(type TEXT, name TEXT, role TEXT, acl TEXT, can_grant TEXT) AS $$
SELECT type, name,
CASE WHEN grantee = 0 THEN 'PUBLIC' ELSE pg_get_userbyid(grantee) END AS role, privilege_type,
CASE WHEN privilege_type = 'OWNER' THEN 'YES, ALL' WHEN is_grantable THEN 'YES' ELSE 'NO' END AS can_grant
FROM (
SELECT 'DATABASE' type, datname as name, (pg_temp.make_owner_acl(datdba)).*
FROM pg_database
WHERE datname = $1
UNION ALL
SELECT 'DATABASE' type, datname as name, (aclexplode(datacl)).*
FROM pg_database
WHERE datname = $1
UNION ALL
SELECT 'SCHEMA' type, nspname as name, (pg_temp.make_owner_acl(nspowner)).*
FROM pg_namespace
WHERE nspname = $2
UNION ALL
SELECT 'SCHEMA' type, nspname as name, (aclexplode(nspacl)).*
FROM pg_namespace
WHERE nspname = $2
UNION ALL
SELECT 'TABLE' type, relname as name, (pg_temp.make_owner_acl(relowner)).*
FROM pg_class
WHERE relname = $3
UNION ALL
SELECT 'TABLE' type, relname as name, (aclexplode(relacl)).*
FROM pg_class
WHERE relname = $3
)
$$ LANGUAGE SQL
;
Para usar a função, utilize a seguinte consulta:
SELECT * FROM pg_temp.get_all_permissions('<your_database>', '<your_schema>', '<your_table>');
-- Example:
SELECT * FROM pg_temp.get_all_permissions('databricks_postgres', 'public', 'table1');
Verificar hierarquia de herança de funções no Postgres
No Postgres, uma função pode ser membro de outra função, e a afiliação especifica se as permissões são herdadas da função pai. Para ver todas as funções das quais uma determinada função faz parte, use a seguinte instrução SQL para criar a função pg_temp.get_inherited_rolesSQL:
CREATE OR REPLACE FUNCTION pg_temp.get_inherited_roles(
role_name TEXT
)
RETURNS TABLE(inherited_roles TEXT, member_via TEXT, inherits_permissions TEXT) AS $$
WITH RECURSIVE role_tree AS (
SELECT
m.roleid,
pg_get_userbyid(m.roleid) rolname,
'DIRECT' COLLATE "C" as member_via,
m.inherit_option as inherits_permissions
FROM pg_auth_members m
WHERE m.member = (SELECT oid FROM pg_roles WHERE rolname = $1)
UNION ALL
SELECT
m.roleid,
pg_get_userbyid(m.roleid) rolname,
rt.rolname::text as member_via,
(rt.inherits_permissions AND m.inherit_option) as inherits_permissions
FROM pg_auth_members m
JOIN role_tree rt ON m.member = rt.roleid
)
SELECT
rolname AS inherited_roles,
member_via,
CASE WHEN inherits_permissions THEN 'YES' ELSE 'NO' END as inherits_permissions
FROM role_tree
GROUP BY inherited_roles, member_via, inherits_permissions
ORDER BY inherits_permissions DESC
$$ LANGUAGE sql
;
Para usar a função, substitua um nome de usuário do Azure Databricks por <your_user>:
SELECT * FROM pg_temp.get_inherited_roles('<your role>');
Encontre administradores de funções no Postgres
Para ver o administrador de uma função, use a seguinte consulta SQL e substitua o nome da função por <target_role>:
SELECT pg_get_userbyid(m.member) admin
FROM pg_auth_members m
WHERE m.roleid = (SELECT oid FROM pg_roles WHERE rolname = '<target_role>')
AND m.admin_option = true;