Funções, acesso e privilégios do banco de dados
Visualização
Esse recurso está em Public Preview nas seguintes regiões: us-east-1
, us-west-2
, eu-west-1
, ap-southeast-1
, ap-southeast-2
, eu-central-1
, us-east-2
, ap-south-1
.
Esta página descreve como identidades, funções e permissões funcionam ao usar o Lakebase.
Quando você cria uma instância de banco de dados, uma função do Postgres é automaticamente configurada para o criador da instância do banco de dados. O criador recebe a função databricks_superuser
, que tem um alto nível de acesso a todos os dados na instância do banco de dados. Para obter mais informações sobre essa função e seus privilégios, consulte Tipos de funções e permissões do banco de dados.
Como databricks_superuser
, o senhor pode permitir que outros usuários acessem a instância do banco de dados por meio do PostgreSQL criando uma função correspondente no Postgres para eles. Para saber mais sobre como criar funções do Postgres, consulte Criar e gerenciar funções do Postgres para identidades do Databricks.
Quando e como as permissões são verificadas
Quando o senhor usa a sintaxe do Postgres ou se conecta por meio de uma interface do PostgreSQL, o Lakebase impõe controles de acesso específicos do PostgreSQL usando o seguinte:
- Funções do Postgres
- Associações a funções
- Permissões concedidas pelo Postgres
Em todos os outros cenários, o Lakebase aplica controles de acesso específicos do Databricks, como:
- Databricks identidades (usuários, grupos e entidade de serviço)
- Membros do grupo Databricks
- listas de controle de acesso ao espaço de trabalho (ACLs)
- Unity Catalog privilégios
Não há sincronização automática entre as identidades e associações do Databricks e as funções e associações do Postgres.
Caso de uso//Permissão ou identidade | Gerenciar instâncias de banco de dados | Crie tabelas sincronizadas | gerenciar tabela sincronizada pipeline | Consultar tabelas Postgres a partir de um SQL warehouse | Consultar recurso on-line em recurso e servindo modelo | Consultar tabelas Postgres no PostgreSQL |
---|---|---|---|---|---|---|
Identidades da Databricks | Sim | Sim | Sim | Sim | Sim | requer uma função Postgres correspondente |
Membros do grupo Databricks | Sim | Sim | Sim | Sim | Sim | verificado apenas no login ao fazer login como um grupo |
ACLs de instância | Sim | Sim | ||||
ACLs de pipeline | Sim | Sim | ||||
Permissões de UC | Sim | Sim | Sim | |||
Funções do Postgres | Sim | |||||
Associações a funções do Postgres | Sim | |||||
Permissões do Postgres | Sim |
Verifique as permissões do Postgres
Para ler ou gravar em uma tabela no Postgres, os usuários precisam das seguintes permissões:
- CONNECT no banco de dados
- USO no esquema
- USO na mesa
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, inclusive as 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, substitua um nome de usuário do Databricks por <your_user>
, o nome da instância por databricks_postgres
e o nome da tabela por <my_table>
na consulta a seguir:
SELECT * FROM pg_temp.check_permissions('<your_user>', 'databricks_postgres', 'public', '<my_table>');
O seguinte comando SQL cria uma função chamada pg_temp.make_owner_acl
que retorna um view detalhado 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, substitua o nome da instância por databricks_postgres
e o nome da tabela por <my_table>
na consulta a seguir:
SELECT * FROM pg_temp.get_all_permissions('databricks_postgres', 'public', '<mytable>');
No Postgres, uma função pode ser membro de outra função, e a associação especifica se as permissões são herdadas da função principal. 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 SQL pg_temp.get_inherited_roles
:
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 Databricks por <your_user>
:
SELECT * FROM pg_temp.get_inherited_roles('<your role>');
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;
Identidades do Databricks e funções do Postgres
O senhor pode se conectar a uma instância de banco de dados usando identidades de usuário, grupo ou entidade de serviço Databricks com credenciais OAuth usando um cliente Postgres.
Os usuários com permissão CAN USE
na instância do banco de dados podem view as funções existentes do Postgres associadas às identidades Databricks ou adicionar uma função para sua própria identidade na instância.
Os usuários com CAN MANAGE
podem também criar funções para outras identidades da Databricks, inclusive com privilégios adicionais, e eliminar funções para qualquer identidade da Databricks.
Adicionar uma função Postgres para uma identidade Databricks
Ao criar uma nova função do Postgres, você pode adicionar membros à função databricks_superuser
e habilitar alguns atributos da função.
databricks_superuser
tem amplo acesso para ler e gravar todos os dados na instância e view métricas do sistema. Especificamente, databricks_superuser
é membro das funções padrão do Postgres pg_read_all_data
, pg_write_all_data
e pg_monitor
. Configure permissões de acesso mais granulares diretamente no Postgres quando conectado como uma função com privilégios suficientes para emitir as concessões necessárias.
Você pode configurar os seguintes atributos de função:
CREATEDB
: concede permissão para criar novos bancos de dadosCREATEROLE
: concede permissão para criar novas funçõesBYPASS RLS
: concede permissão para ignorar toda a segurança em nível de linha na instância
Para criar uma nova função Postgres, clique em Add PostgreSQL Role (Adicionar função PostgreSQL ) e use o modelo para adicionar privilégios. O senhor deve selecionar uma identidade Databricks que ainda não tenha uma função Postgres na instância. Opcionalmente, você pode adicionar associação a uma função padrão ou a atributos de função específicos, se tiver a permissão CAN MANAGE
na instância do banco de dados.
gerenciar funções do Postgres
Usuários com permissão CAN_MANAGE
em uma instância de banco de dados podem realizar as seguintes ações:
- Criar funções do Postgres para outras identidades do Databricks, incluindo a atribuição de privilégios adicionais, conforme necessário.
- Remova as funções do Postgres de qualquer identidade do Databricks usando a interface do usuário ou a API.
Usuários com permissão CAN_USE
em uma instância de banco de dados podem realizar as seguintes ações:
- Adicione uma função para sua própria identidade, sem privilégios adicionais.
As ações de gerenciamento de funções são regidas pelas permissões concedidas na instância do banco de dados. Certifique-se de que o senhor tenha o nível de acesso adequado antes de tentar gerenciar as funções.
Conceder privilégios de instância às identidades do Databricks
Um usuário deve ter permissões específicas na instância do banco de dados para gerenciar a instância e realizar operações de tabela. 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 de visão geral das instâncias do banco de dados .
- Clique em Computação na barra lateral do workspace.
- Clique em Instâncias de banco de dados.
- Clique na guia Permissões .
- Clique em gerenciar permissões de instância no canto superior direito.
- Digite um usuário, grupo ou entidade de serviço para conceder privilégios adicionais.
- Selecione a permissão que você deseja conceder à identidade. Consulte ACLs de instâncias de banco de dados.
- Clique em + Adicionar .
- Qualquer usuário do site workspace pode view ou listar as instâncias do banco de dados. As permissões do catálogo do banco de dados e da tabela sincronizada são regidas ainda pelas permissões de metastore, catálogo, esquema e tabela do Unity Catalog. Para obter mais detalhes, consulte gerenciar privilégios em Unity Catalog.