Compartir vía


Creación de roles de Postgres

Importante

El escalado automático de Lakebase es la versión más reciente de Lakebase, con proceso de escalado automático, escalado a cero, bifurcación y restauración instantánea. Para ver las regiones admitidas, consulte Disponibilidad de regiones. Si es un usuario aprovisionado de Lakebase, consulte Aprovisionamiento de Lakebase.

Al crear un proyecto, Lakebase crea varios roles de Postgres en el proyecto:

  • Un rol de Postgres para la identidad de Azure Databricks del propietario del proyecto (por ejemplo, user@databricks.com), que posee la base de datos predeterminada databricks_postgres
  • Un databricks_superuser rol administrativo

Ambos roles están visibles en la pestaña Roles y bases de datos cuando abra el proyecto por primera vez.

La databricks_postgres base de datos se crea para que pueda conectarse y probar Lakebase inmediatamente después de la creación del proyecto.

También se crean varios roles administrados por el sistema. Estos son roles internos que usan los servicios de Azure Databricks para las operaciones de administración, supervisión y datos.

Nota:

Los roles de Postgres controlan el acceso a la base de datos (quién puede consultar datos). Para obtener permisos de proyecto (que pueden administrar la infraestructura), consulte Permisos de proyecto. Para obtener un tutorial sobre cómo configurar ambos, consulte Tutorial: Concesión de acceso de proyecto y base de datos a un nuevo usuario.

Consulte Roles creados previamente y Roles del sistema.

Creación de roles de Postgres

Lakebase admite dos tipos de roles de Postgres para el acceso a bases de datos:

  • Roles de OAuth para identidades de Azure Databricks: Cree estos mediante la interfaz de usuario de Lakebase, la databricks_auth extensión con SQL o el SDK de Python y la API REST. Permite que las identidades de Azure Databricks (usuarios, entidades de servicio y grupos) se conecten mediante tokens de OAuth.
  • Roles de contraseña de Postgres nativos: Cree estos mediante la interfaz de usuario de Lakebase, SQL o el SDK de Python y la API REST. Use cualquier nombre de rol válido con autenticación de contraseña.

Para obtener instrucciones sobre cómo elegir el tipo de rol que se va a usar, consulte Introducción a la autenticación. Cada uno está diseñado para diferentes casos de uso.

Creación de un rol de OAuth para identidades de Azure Databricks

Para permitir que las identidades de Azure Databricks (usuarios, entidades de servicio o grupos) se conecten mediante tokens de OAuth, cree un rol de OAuth mediante la interfaz de usuario de Lakebase, la databricks_auth extensión con SQL o la API REST.

Para obtener instrucciones detalladas sobre cómo obtener tokens de OAuth, consulte Obtención de un token de OAuth en un flujo de usuario a máquina y Obtención de un token de OAuth en un flujo de máquina a máquina.

Interfaz de usuario

  1. En la pestaña Roles y bases de datos>Agregar rol>OAuth , seleccione el usuario, la entidad de servicio o el grupo para conceder acceso a la base de datos.
  2. Después de crear el rol, conceda los privilegios de base de datos adecuados. Obtenga información sobre cómo: Administrar permisos

Agregar rol: pestaña OAuth

SQL

Requisitos previos:

  • Debe tener los permisos CREATE y CREATE ROLE en la base de datos.
  • Debe autenticarse como una identidad de Azure Databricks con un token de OAuth válido.
  • Las sesiones autenticadas de Native Postgres no pueden crear roles de OAuth
  1. Cree la databricks_auth extensión. Cada base de datos de Postgres debe tener su propia extensión.

    CREATE EXTENSION IF NOT EXISTS databricks_auth;
    
  2. Use la databricks_create_role función para crear un rol de Postgres para la identidad de Azure Databricks:

    SELECT databricks_create_role('identity_name', 'identity_type');
    

    Para un usuario de Azure Databricks:

    SELECT databricks_create_role('myuser@databricks.com', 'USER');
    

    Para un principal de servicio de Azure Databricks:

    SELECT databricks_create_role('8c01cfb1-62c9-4a09-88a8-e195f4b01b08', 'SERVICE_PRINCIPAL');
    

    Para un grupo de Azure Databricks:

    SELECT databricks_create_role('My Group Name', 'GROUP');
    

    El nombre del grupo distingue entre mayúsculas y minúsculas y debe coincidir exactamente con la forma en que aparece en el área de trabajo de Azure Databricks. Al crear un rol de Postgres para un grupo, cualquier miembro directo o indirecto (usuario o entidad de servicio) de ese grupo de Databricks puede autenticarse en Postgres como rol de grupo mediante su token de OAuth individual. Esto le permite administrar permisos en el nivel de grupo en Postgres en lugar de mantener los permisos para usuarios individuales.

  3. Conceda permisos de base de datos al rol recién creado.

La databricks_create_role() función crea un rol de Postgres con solo LOGIN permiso. Después de crear el rol, debe conceder los privilegios y permisos de base de datos adecuados en las bases de datos, esquemas o tablas específicos a las que el usuario necesita acceder. Obtenga información sobre cómo: Administrar permisos

SDK de Python

Establezca en identity_type, USER, SERVICE_PRINCIPAL o GROUP. Establezca postgres_role en la dirección de correo electrónico de la identidad, el ID de la aplicación (UUID) o el nombre visible del grupo, respectivamente. Este valor se convierte en el nombre del rol Postgres y es lo que se usa en las cadenas de conexión y en las instrucciones GRANT.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Role, RoleRoleSpec

w = WorkspaceClient()

operation = w.postgres.create_role(
    parent="projects/my-project/branches/production",
    role=Role(
        spec=RoleRoleSpec(
            identity_type="USER",
            postgres_role="user@example.com"
        )
    )
)
role = operation.wait()
print(f"Created role: {role.name}")

Después de crear el rol, conceda los privilegios de base de datos adecuados. Obtenga información sobre cómo: Administrar permisos

curl

Establezca en identity_type, USER, SERVICE_PRINCIPAL o GROUP. Establezca postgres_role en la dirección de correo electrónico de la identidad, el ID de la aplicación (UUID) o el nombre visible del grupo, respectivamente. Este valor se convierte en el nombre del rol Postgres y es lo que se usa en las cadenas de conexión y en las instrucciones GRANT.

curl -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": {
      "identity_type": "USER",
      "postgres_role": "user@example.com"
    }
  }' | jq

El punto de conexión devuelve una operación de ejecución prolongada. Realice el sondeo hasta que done sea true, y a continuación, use el campo de rol name para las llamadas API posteriores. Consulte Operaciones de ejecución prolongada.

Después de crear el rol, conceda los privilegios de base de datos adecuados. Obtenga información sobre cómo: Administrar permisos

Autenticación basada en grupos

Al crear un rol de Postgres para un grupo de Azure Databricks, se habilita la autenticación basada en grupos. Esto permite que cualquier miembro del grupo de Azure Databricks se autentique en Postgres mediante el rol del grupo, lo que simplifica la administración de permisos.

Funcionamiento:

  1. Cree un rol de Postgres para un grupo de Databricks.
  2. Conceda permisos de base de datos al rol de grupo en Postgres. Consulte Administración de permisos.
  3. Cualquier miembro directo o indirecto (usuario o entidad de servicio) del grupo de Databricks puede conectarse a Postgres mediante su token de OAuth individual.
  4. Al conectarse, el miembro se autentica como rol de grupo y hereda todos los permisos concedidos a ese rol.

Flujo de autenticación:

Cuando se conecta un miembro del grupo, especifican el nombre del rol postgres del grupo como nombre de usuario y su propio token de OAuth como contraseña:

export PGPASSWORD='<OAuth token of a group member>'
export GROUP_ROLE_NAME='<pg-case-sensitive-group-role-name>'

psql -h $HOSTNAME -p 5432 -d databricks_postgres -U $GROUP_ROLE_NAME

Consideraciones importantes:

  • Validación de pertenencia a grupos: La pertenencia a grupos solo se valida en el momento de la autenticación. Si se quita un miembro del grupo de Azure Databricks después de establecer una conexión, la conexión permanece activa. Se rechazan los nuevos intentos de conexión de los miembros eliminados.
  • Ámbito del área de trabajo: Solo se admiten los grupos asignados al mismo área de trabajo de Azure Databricks que el proyecto para la autenticación basada en grupos. Para obtener información sobre cómo asignar grupos a un área de trabajo, consulte Administración de grupos.
  • Distinción entre mayúsculas y minúsculas: El nombre de grupo usado en databricks_create_role() debe coincidir exactamente con el nombre del grupo tal como aparece en el área de trabajo de Azure Databricks, incluido el caso.
  • Administración de permisos: La administración de permisos en el nivel de grupo en Postgres es más eficaz que administrar permisos de usuario individuales. Al conceder permisos al rol de grupo, todos los miembros del grupo actuales y futuros heredan esos permisos automáticamente.
  • Cambio de nombre de identidad: Si el correo electrónico o el nombre para mostrar del grupo de un usuario cambia en Azure Databricks, la autenticación y los privilegios de base de datos existentes se interrumpirán. Quite el rol anterior, cree uno nuevo con el nombre actualizado y actualice las cadenas de conexión y las concesiones.

Nota:

Los nombres de rol no pueden superar los 63 caracteres y no se permiten algunos nombres. Más información: Administración de roles

Creación de un rol nativo de contraseña de Postgres

Las conexiones de contraseña se pueden deshabilitar en el nivel de proyecto o proceso. Consulte Bloquear conexiones de contraseña.

Interfaz de usuario

  1. En la pestaña Roles y bases de datos> Agregarcontraseña de>, escriba un nombre de rol y, opcionalmente, conceda databricks_superuser o atributos del sistema (CREATEDB, CREATEROLE, BYPASSRLS).
  2. Copie la contraseña generada y proporciónela de forma segura al usuario. No se vuelve a mostrar.

Agregar rol: pestaña Contraseña

SQL

CREATE ROLE role_name WITH LOGIN PASSWORD 'your_secure_password';

La contraseña debe tener al menos 12 caracteres con una combinación de minúsculas, mayúsculas, números y caracteres de símbolos. Las contraseñas definidas por el usuario se validan en tiempo de creación para garantizar la entropía de 60 bits.

SDK de Python

Omitir identity_type para crear una función de contraseña. La API devuelve una contraseña generada en la respuesta.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Role, RoleRoleSpec

w = WorkspaceClient()

operation = w.postgres.create_role(
    parent="projects/my-project/branches/production",
    role=Role(
        spec=RoleRoleSpec(
            postgres_role="my-app-role"
        )
    )
)
role = operation.wait()
print(f"Created role: {role.name}")

curl

Omitir identity_type para crear una función de contraseña. El punto de conexión devuelve una operación de ejecución prolongada. Consulte hasta que done sea true.

curl -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": {
      "postgres_role": "my-app-role"
    }
  }' | jq

Visualización de roles de Postgres

Interfaz de usuario

Para ver todos los roles de Postgres del proyecto, vaya a la pestaña Roles y bases de datos de la rama en la aplicación Lakebase. Se muestran todos los roles creados en la rama, a excepción de los roles del sistema. La columna Tipo de autenticación indica si cada rol usa autenticación de OAuth o Contraseña.

Lista de roles

PostgreSQL

Ver todos los roles con \du el comando :

Puede ver todos los roles de Postgres, incluidos los roles del sistema, mediante el \du metacomando desde cualquier cliente de Postgres (como psql) o el editor sql de Lakebase:

\du
                                      List of roles
          Role name          |                         Attributes
-----------------------------+------------------------------------------------------------
 cloud_admin                 | Superuser, Create role, Create DB, Replication, Bypass RLS
 my.user@databricks.com      | Create role, Create DB, Bypass RLS
 databricks_control_plane    | Superuser
 databricks_gateway          |
 databricks_monitor          |
 databricks_reader_12345     | Create role, Create DB, Replication, Bypass RLS
 databricks_replicator       | Replication
 databricks_superuser        | Create role, Create DB, Cannot login, Bypass RLS
 databricks_writer_12345     | Create role, Create DB, Replication, Bypass RLS

SDK de Python

Enumerar todos los roles:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

roles = w.postgres.list_roles(parent="projects/my-project/branches/production")
for role in roles:
    print(f"{role.status.postgres_role} ({role.status.identity_type or 'PASSWORD'}): {role.name}")

Obtener un rol específico:

role = w.postgres.get_role(
    name="projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx"
)
print(role)

curl

Enumerar todos los roles:

curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

Obtener un rol específico:

curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

La respuesta incluye el name campo (por ejemplo, rol-xxxx-xxxxxxxxxx) necesario para las llamadas de actualización y eliminación.

Actualización de un rol

Para actualizar los atributos de un rol en la interfaz de usuario, seleccione Editar rol en el menú rol de la pestaña Roles y bases de datos .

Usa la API para actualizar los roles del sistema o atributos de un rol. Use update_mask como parámetro de consulta para especificar los campos que se van a cambiar; solo se modifican los campos enmascarados.

Nota:

Para obtener el nombre de recurso de un rol para usarlo en las llamadas de actualización y eliminación, utilice el endpoint list roles. Los nombres de recursos de rol usan un identificador generado por el sistema (por ejemplo, rol-xxxx-xxxxxxxxxx), no el postgres_role valor proporcionado al crearse.

curl -X PATCH "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx?update_mask=spec.membership_roles%2Cspec.attributes.createdb" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx",
    "spec": {
      "membership_roles": ["DATABRICKS_SUPERUSER"],
      "attributes": { "createdb": true }
    }
  }' | jq

Para quitar databricks_superuser, pase una matriz vacía: "membership_roles": [].

Quitar un rol de Postgres

Puede quitar los roles basados en identidad de Databricks y los roles nativos de contraseña de Postgres.

Interfaz de usuario

La eliminación de un rol es una acción permanente que no se puede deshacer. Para eliminar un rol que posee una base de datos, debe especificar el rol al que se reasignarán los objetos de los que es propietario. De lo contrario, la base de datos debe eliminarse manualmente antes de eliminar el rol que posee la base de datos.

Para eliminar cualquier rol de Postgres mediante la interfaz de usuario:

  1. Vaya a la pestaña Roles y bases de datos de la rama en la aplicación Lakebase.
  2. Seleccione Eliminar rol en el menú rol y confirme la eliminación.

PostgreSQL

Puede quitar cualquier rol de Postgres mediante comandos estándar de Postgres. Para más información, consulte la documentación de PostgreSQL sobre la eliminación de roles.

Quitar un rol:

DROP ROLE role_name;

Después de quitar un rol basado en identidad de Azure Databricks, esa identidad ya no se puede autenticar en Postgres mediante tokens de OAuth hasta que se crea un nuevo rol.

SDK de Python

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

operation = w.postgres.delete_role(
    name="projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx"
)
operation.wait()

curl

curl -X DELETE "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

Roles creados previamente

Una vez creado un proyecto, Azure Databricks crea automáticamente roles de Postgres para la administración de proyectos y la introducción.

Rol Description Privilegios heredados
<project_owner_role> La identidad de Azure Databricks del creador del proyecto (por ejemplo, my.user@databricks.com). Este rol posee la base de datos predeterminada databricks_postgres y puede iniciar sesión y administrar el proyecto. Miembro de databricks_superuser
databricks_superuser Un rol administrativo interno. Se usa para configurar y administrar el acceso en el proyecto. A este rol se le conceden privilegios amplios. Hereda de pg_read_all_data, pg_write_all_data, y pg_monitor.

Más información sobre las funcionalidades y privilegios específicos de estos roles: funcionalidades de rol creadas previamente

Roles del sistema creados por Azure Databricks

Azure Databricks crea los siguientes roles de sistema necesarios para los servicios internos. Puede ver estos roles emitiendo un comando desde \du, desde psql o el Editor de SQL de Lakebase.

Rol Propósito
cloud_admin Rol de superusuario usado para la administración de infraestructuras en la nube
databricks_control_plane Rol de superusuario usado por componentes internos de Databricks para las operaciones de administración
databricks_monitor Usado por los servicios de recopilación de métricas internos
databricks_replicator Se usa para las operaciones de replicación de bases de datos
databricks_writer_<dbid> Rol por base de datos usado para crear y administrar tablas sincronizadas
databricks_reader_<dbid> Rol por base de datos que se usa para leer tablas registradas en el catálogo de Unity
databricks_gateway Se usa para conexiones internas para servicios de servicio de datos administrados

Para obtener información sobre cómo funcionan los roles, los privilegios y las pertenencias a roles en Postgres, use los siguientes recursos en la documentación de Postgres:

Pasos siguientes