# Control de Acceso Basado en Roles (RBAC)

NOTA

Esta guía solo es aplicable a la versión de DB 0.9.6 o superior.

Después de crear un clúster, se considera al administrador del clúster con los privilegios de control de acceso más altos.

TIP

Consulte Detalles de conexión para obtener instrucciones detalladas sobre cómo encontrar el nombre de usuario y la contraseña del administrador del clúster.

Para compartir sus clústeres con otros usuarios o proporcionar acceso de solo lectura a personas específicas, puede utilizar la función de Control de Acceso Basado en Roles (RBAC) de MyScale para administrar el intercambio de datos entre múltiples usuarios.

NOTA

Los usuarios creados a través de la función RBAC de MyScale no están vinculados a los usuarios en la consola web.

# RBAC de MyScale: ¿Por qué es importante?

Aislar a los usuarios en bases de datos y restringir el acceso a los datos de cada usuario se considera una buena práctica y se logra de la siguiente manera:

  • Crear una base de datos separada para cada usuario y nombrarla según el usuario.
  • Otorgar todos los permisos en esa base de datos respectiva a su usuario.

Este enfoque permite a los usuarios realizar operaciones en sus bases de datos, como crear tablas, consultar datos, eliminar tablas y modificar estructuras de tablas, sin afectar negativamente a otros usuarios. Los administradores de bases de datos no necesitan otorgar permisos individualmente a cada usuario para crear tablas o consultar tablas en la base de datos única.

Elimina la necesidad de asignar permisos de consulta a los usuarios cada vez que se crea una nueva tabla, reduciendo la carga administrativa y asegurando que los usuarios no autorizados no accedan a la base de datos. Cuando haya necesidad de compartir datos entre usuarios específicos, los administradores pueden otorgar permisos de solo lectura a otros usuarios en bases de datos y tablas específicas.

# Uso de RBAC de MyScale para administrar el control de acceso de los usuarios

Veamos el siguiente caso de uso antes de describir cómo utilizar RBAC de MyScale para administrar el control de acceso de los usuarios.

Supongamos que los departamentos de una empresa de recuperación de documentos almacenan sus datos en MyScale. Cada departamento tiene varios administradores con privilegios de lectura/escritura en los datos de su departamento. Otros usuarios del departamento tienen privilegios de solo lectura en estos datos, utilizando consultas SQL y de búsqueda de vectores.

TIP

También puede haber casos en los que los datos de un departamento en particular deben compartirse entre otros departamentos.

Con los privilegios de access_management, el administrador del clúster es responsable de administrar los permisos de acceso basados en roles para todos los usuarios y roles, incluyendo tareas como crear y otorgar acceso a bases de datos y tablas de bases de datos.

Veamos cómo el administrador del clúster utiliza RBAC (Control de Acceso Basado en Roles) en MyScale para administrar el acceso a la base de datos.

# Iniciar sesión como administrador del clúster

El primer paso es iniciar sesión en MyScale como administrador del clúster utilizando una de las siguientes opciones:

  • Utilice el Espacio de trabajo SQL en la consola web de MyScale, lo que le permite ejecutar todas las consultas como administrador del clúster.
  • Utilice herramientas de desarrollo como el Cliente de Python, insertando el nombre de usuario y la contraseña del administrador del clúster en su código de Python.

Los siguientes escenarios describen cómo el administrador del clúster utiliza RBAC de MyScale para administrar los permisos de acceso de los usuarios basados en roles.

# Escenario 1

En este escenario, el administrador del clúster realiza las siguientes tareas:

  • Crea dos bases de datos: department_A y department_B.
  • Crea usuarios administradores para cada base de datos del departamento.
  • Establece los permisos de la siguiente manera:
    • Otorga permisos de acceso de lectura/escritura (o completos) a los usuarios administradores del Departamento A y B para sus respectivas bases de datos.
    • No otorga ningún permiso de acceso a los usuarios del Departamento A/B para la otra base de datos.

Después, los administradores de la base de datos pueden crear tablas en sus respectivas bases de datos.

Para repetir este proceso:

# Crear bases de datos

Inicie sesión en MyScale utilizando la cuenta de administrador del clúster y cree usuarios administradores para los departamentos A y B (como se describe en la siguiente declaración SQL).

TIP

Utilice el método SHA256_hash para la seguridad de las contraseñas al crear cuentas de usuario.

-- Crear una base de datos y el usuario administrador correspondiente para el departamento A
CREATE DATABASE department_A ON CLUSTER '{cluster}';
-- La contraseña para el administrador del departamento A es 123456@Qwerty
CREATE USER department_A_admin ON CLUSTER '{cluster}' IDENTIFIED WITH sha256_hash BY 'eccd885c4d63d89a91ee6f3f8f9f4aa1010c0e1f84b97c9d9954768ba5cc478b' DEFAULT DATABASE department_A;
-- Crear una base de datos y el usuario administrador correspondiente para el departamento B
CREATE DATABASE department_B ON CLUSTER '{cluster}';
-- La contraseña para el administrador del departamento B es 123456#Qwerty
CREATE USER department_B_admin ON CLUSTER '{cluster}' IDENTIFIED WITH sha256_hash BY '23f356509386377ebdc7298241fdce8cdef594353cd3ef787802dd86526130c5' DEFAULT DATABASE department_B;
-- Otorgar todos los permisos al usuario administrador correspondiente.
GRANT ON CLUSTER '{cluster}' ALL ON department_A.* TO department_A_admin;
GRANT ON CLUSTER '{cluster}' ALL ON department_B.* TO department_B_admin;

TIP

Dado que los usuarios con privilegios inferiores a los administrativos no pueden establecer su propia contraseña, pida al usuario que cifre su contraseña utilizando un generador como este (opens new window) antes de dársela al administrador para configurar la cuenta. Las contraseñas deben cumplir con los requisitos mínimos especificados por ClickHouse, que se pueden encontrar aquí (opens new window).

# Crear tabla del Departamento A

Utilice una herramienta de desarrollo para iniciar sesión en MyScale como el usuario department_A_admin y crear la tabla department_A.chatPDF_meta.

NOTA

Recuerde que el administrador del departamento A solo puede iniciar sesión a través de una herramienta de desarrollo, no de la consola web, ya que este usuario fue creado utilizando RBAC de MyScale.

-- Crear tabla.
CREATE TABLE department_A.chatPDF_meta (
    `pdf` String, 
    `title` String, 
    `authors` Array(String), 
    `abstract` String, 
    `pub_date` Nullable(Date32), 
    `doi` String, 
    `publisher` String, 
    `article_type` String, 
    `vector` Array(Float32), 
    VECTOR INDEX vec_idx vector TYPE MSTG('metric_type=Cosine'), 
    CONSTRAINT vec_len CHECK length(vector) = 512
  ) ENGINE = ReplacingMergeTree ORDER BY pdf SETTINGS index_granularity = 8192;

NOTA

Otros usuarios no pueden ver ni manipular datos en esta tabla además del administrador del departamento.

# Otorgar permisos a usuarios adicionales

Como administrador del clúster, otorgue permisos de acceso a otros usuarios iniciando sesión en MyScale y ejecutando la siguiente declaración SQL para otorgar permisos de SELECT al usuario U1.

-- Agregar usuario de solo lectura U1 al departamento A.
CREATE USER department_A_U1 ON CLUSTER '{cluster}' IDENTIFIED WITH sha256_hash BY '20388ae66ef3c7e13dc5fe9b3808637c2d89a517d46276a7ba19bbaa488c5e78' DEFAULT DATABASE department_A;
-- Otorgar permiso SELECT al usuario U1.
GRANT ON CLUSTER '{cluster}' SELECT ON department_A.chatPDF_meta TO department_A_U1;

NOTA

Después de que esta declaración SQL se haya ejecutado correctamente, el usuario U1 del Departamento A tiene la capacidad de ver y seleccionar datos de la tabla department_A.chatPDF_meta.

# Escenario 2

El usuario U1 del Departamento A solo tiene permisos de solo lectura para la tabla chatPDF_meta. Sin embargo, si el usuario U1 necesita actualizar los datos en esta tabla, se pueden otorgar permisos de lectura/escritura a este usuario.

NOTA

En este punto, para evitar la eliminación accidental de datos, el usuario U1 no puede eliminar datos de la tabla department_A.chatPDF_meta.

# Otorgar permisos de ALTER TABLE

Inicie sesión en MyScale como administrador del clúster y otorgue permisos de ALTER TABLE al usuario U1.

-- Otorgar permiso ALTER TABLE al usuario U1.
GRANT ON CLUSTER '{cluster}' ALTER TABLE ON department_A.chatPDF_meta TO department_A_U1;

Ahora el usuario U1 tiene la capacidad de realizar operaciones ALTER en la tabla chatPDF_meta.

Para revocar estos permisos, vuelva a iniciar sesión en MyScale como administrador del clúster y ejecute la siguiente declaración SQL.

REVOKE ON CLUSTER '{cluster}' ALTER TABLE ON department_A.chatPDF_meta FROM department_A_U1;

# Escenario 3

Inicialmente, el administrador del departamento A creó la tabla de datos chatPDF_user sin otorgar ningún permiso de acceso a los usuarios dentro del departamento o a usuarios externos. En consecuencia, estos usuarios no pueden realizar ninguna operación CRUD en los datos de esta tabla.

Por ejemplo:

  • El usuario U1 del Departamento A no puede ver los datos ni realizar ninguna operación en la tabla chatPDF_user.

    department_A_U1 :) SHOW TABLES FROM department_A;
    ┌─name─────────┐
    │ chatPDF_meta │
    └──────────────┘
    
  • El administrador del departamento B no puede ver los datos ni realizar ninguna operación en la tabla chatPDF_user.

    department_B_admin :) SHOW TABLES FROM department_A;
    Ok.
    0 rows in set. Elapsed: 0.002 sec.
    

# Escenario 4

Otorgue permisos de acceso a los usuarios del departamento en bloque sin necesidad de otorgar permisos a usuarios individuales uno por uno. Cuando varios usuarios de un departamento o departamentos necesitan acceso a los datos en una tabla/base de datos, es común agrupar diferentes permisos operativos y administrarlos utilizando roles. El primer paso es crear estos roles. Una vez que se hayan creado los roles de usuario, los siguientes pasos son agrupar a los usuarios y agregarlos al rol correspondiente.

# Crear roles

Inicie sesión en MyScale como administrador del clúster para crear los roles necesarios y otorgar permisos a cada rol, según la siguiente declaración SQL.

-- Crear diferentes roles dentro del departamento A.
CREATE ROLE department_A_role_1 ON CLUSTER '{cluster}';
CREATE ROLE department_A_role_2 ON CLUSTER '{cluster}';
-- Otorgar los permisos correspondientes a los diferentes roles según los requisitos.
GRANT ON CLUSTER '{cluster}' SELECT ON department_A.chatPDF_meta TO department_A_role_1;
GRANT ON CLUSTER '{cluster}' SELECT, INSERT ON department_A.chatPDF_meta TO department_A_role_2;
GRANT ON CLUSTER '{cluster}' SELECT, INSERT, ALTER TABLE ON department_A.chatPDF_user TO department_A_role_2;

# Agregar usuarios a los roles

Al agregar un nuevo usuario U2 al Departamento A, otorgue permisos de lectura y escritura para las tablas chatPDF_user y chatPDF_meta otorgando un rol al usuario.

Por ejemplo:

-- Simplemente agregue a U2 al rol department_A_role_2.
GRANT ON CLUSTER '{cluster}' department_A_role_2 TO department_A_U2;

# Escenario 5

Utilice la función QUOTA para restringir las cuotas de usuario y la utilización de recursos. Por ejemplo, puede establecer límites en el tiempo máximo de ejecución y el número máximo de consultas para un rol específico, de la siguiente manera:

Inicie sesión en MyScale como administrador del clúster para crear una cuota y otorgar la cuota a un rol.

CREATE QUOTA department_A_quota_role1 ON CLUSTER '{cluster}' FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321 TO department_A_role_1;
Last Updated: Tue May 07 2024 02:28:12 GMT+0000