Skip to main content
Las cuentas de servicio de base de datos pueden ser tan simples como un usuario con una contraseña independiente o un certificado para la autenticación. Los usuarios más avanzados quizá quieran configurar cuentas cuyo alcance de permisos pueda cambiarse dinámicamente con SET ROLE, para cambiar rápidamente entre perfiles sin cerrar sesión ni recargar el contenido.

Descripción general

SET ROLE puede utilizarse para delimitar dinámicamente los permisos de una cuenta de servicio durante una sesión. Para ello, limita los permisos efectivos de un usuario únicamente a los concedidos por los roles activados. Este enfoque tiene varias ventajas:
  • A las cuentas de servicio se les pueden asignar varios roles, pero activar solo el necesario para una consulta concreta.
  • Si la cuenta de servicio se ve comprometida, los atacantes solo podrán usar los permisos del rol activo.
  • Una sola cuenta puede realizar tareas diversas cambiando de rol, en lugar de requerir credenciales distintas para cada tarea.
  • Los permisos pueden actualizarse para toda una clase de cuentas de servicio modificando un único rol, en lugar de actualizar usuarios individuales.
  • Los logs pueden registrar qué rol concreto estaba activo durante una consulta, lo que aporta un contexto más claro para las auditorías de seguridad.
En la práctica:
  1. Diseñe roles que definan los límites permitidos (read_only, maintenance, etc.)
  2. Concédaselos a la cuenta de servicio
  3. Al establecer la conexión, elija el rol o los roles activos mediante SET ROLE (o el parámetro de rol), restringiendo así lo que esa sesión puede hacer

Configurar un rol de servicio

1

Conceder roles a la cuenta de servicio

Primero, cree roles con los privilegios/la configuración que desee y, a continuación, concédalos a la cuenta de servicio.
2

Usar SET ROLE para definir los límites de la sesión

Al inicio de una sesión, la cuenta de servicio elige qué roles están activos:
o:
SET ROLE activa roles para el usuario actual; los privilegios efectivos son la unión de todos los roles activos más los concedidos directamente al usuario.También puede desactivar todos los roles:
o activar varios roles:
Los roles activos actualmente se pueden consultar mediante system.current_roles.
3

Establecer roles predeterminados para la cuenta de servicio

Para garantizar que la cuenta de servicio siempre se inicie en un modo restringido, configure los roles predeterminados:
o
4

Uso de SET ROLE mediante HTTP / de forma programática

Si la cuenta de servicio se conecta mediante HTTP, no puede enviar SET ROLE; SELECT … como una sentencia múltiple. En su lugar, pase el rol como parámetro de consulta:
?role=… equivale a ejecutar SET ROLE read_only_role antes de la sentencia. Varios parámetros de rol se comportan como SET ROLE role 1, role 2.Algunos drivers (p. ej., ClickHouse Connect para Python) también exponen una configuración de rol que se envía con cada solicitud y que el server usa como rol de la sesión.
Última modificación el 23 de julio de 2026