¿Qué son los roles y los perfiles?

Gestión de Roles en Bases de Datos

Valoración: 4.91 (2216 votos)

La gestión de permisos es un pilar fundamental de la seguridad en cualquier sistema de bases de datos. Controlar quién tiene acceso a qué recursos y qué acciones puede realizar es crucial para proteger la información sensible. En este contexto, los roles emergen como una herramienta esencial, permitiendo agrupar permisos y simplificar la administración. Este artículo explorará cómo investigar los roles existentes en Microsoft SQL Server y cómo definir nuevos roles en Oracle Database, dos de los sistemas de gestión de bases de datos más relevantes del mercado, basándonos estrictamente en la información proporcionada.

https://www.youtube.com/watch?v=0gcJCdgAo7VqN5tD

Índice de Contenido

Entendiendo la Función de los Roles

Los roles en una base de datos, ya sea SQL Server u Oracle, cumplen un propósito similar: ayudar a los administradores a gestionar los permisos sobre los datos y los objetos de la base de datos. En lugar de asignar permisos individualmente a cada usuario para cada objeto, los permisos se otorgan a un rol, y luego se asignan los usuarios a ese rol. Esto simplifica enormemente la administración, especialmente en entornos con muchos usuarios y objetos.

¿Qué son los permisos de base de datos?
Los permisos de base de datos son derechos de acceso y privilegios otorgados a usuarios o roles dentro de una base de datos o plataforma de datos . Permiten especificar qué acciones pueden realizar los usuarios o roles en diversos objetos de la base de datos, como tablas, vistas, esquemas o incluso la base de datos completa.

En sistemas como SQL Server, existen roles a nivel de servidor y a nivel de base de datos. Los roles de servidor otorgan acceso y permisos que aplican a toda la instancia de SQL Server, similar a cómo funcionan los grupos en entornos Windows. Por otro lado, cada base de datos individual puede tener sus propios roles y permisos específicos, que solo aplican dentro del contexto de esa base de datos.

Cómo Encontrar Roles Asignados en SQL Server con Herramientas Nativas

Mantener la seguridad y cumplir con diversas regulaciones, como PCI DSS y HIPAA, requiere saber exactamente qué roles a nivel de servidor y base de datos están asignados a cada usuario. Conocer esta información es vital para auditorías y para garantizar que solo las personas autorizadas tengan el acceso necesario. Sin embargo, obtener una vista completa utilizando solo las herramientas nativas de SQL Server puede ser un proceso desafiante y laborioso.

Información a Nivel de Servidor

La configuración a nivel de servidor en SQL Server, que incluye roles de servidor, permisos, credenciales de usuario y dependencias, se almacena principalmente en la base de datos master. Para listar los usuarios y los roles de servidor, se pueden consultar vistas del sistema. Una vista útil es sys.server_principals, que contiene información sobre todas las entidades (principals) a nivel de servidor, incluyendo usuarios y roles.

Para obtener información sobre la membresía de los roles de servidor (es decir, qué usuarios son miembros de qué roles de servidor), la información se almacena en la vista del sistema server_role_members dentro de la base de datos master. Dado que los IDs de las entidades (principals) están vinculados, es posible obtener un resumen de los roles de usuario a nivel de servidor uniendo las vistas sys.server_principals y master.sys.server_role_members. Esta unión se realizaría basándose en el número de ID correspondiente entre ambas vistas.

Aunque los usuarios pueden ver a qué roles de servidor pertenecen ellos mismos y el ID de los miembros de los roles de servidor fijos, ver la membresía de *todos* los roles de servidor generalmente requiere permisos adicionales o ser miembro del rol fijo de servidor security admin. Esto subraya la necesidad de contar con permisos elevados para una auditoría completa.

Información a Nivel de Base de Datos

Recopilar información sobre los roles a nivel de base de datos presenta otro nivel de complejidad. Para consultar los roles de base de datos en SQL Server, se deben interrogar vistas del sistema como sys.database_principals. Sin embargo, esta consulta debe realizarse individualmente en cada base de datos. Si una instancia de SQL Server aloja múltiples bases de datos, este proceso se vuelve muy consumidor de tiempo.

Además, los roles pueden estar anidados. Esto significa que usuarios de base de datos, roles de aplicación y otros roles de base de datos pueden ser miembros de un rol de base de datos. Esta anidación añade complejidad al rastrear los permisos efectivos de un usuario, ya que su acceso puede derivar de su membresía directa en un rol o de ser miembro de otro rol que, a su vez, es miembro del rol en cuestión.

Los Desafíos de las Herramientas Nativas

En resumen, obtener información completa y comprensible sobre los roles de usuario actuales utilizando solo las herramientas nativas de SQL Server puede ser complicado y francamente agotador. Implica escribir consultas complejas, uniendo múltiples vistas del sistema, y repetir procesos (como consultar roles de base de datos) para cada base de datos individual. La anidación de roles añade otra capa de dificultad al intentar obtener una imagen clara de los permisos efectivos. La necesidad de exportar información y analizarla manualmente en herramientas externas como Excel aumenta el tiempo y el esfuerzo requeridos.

¿Qué es la asignación de roles?
Las asignaciones de roles del sistema autorizan operaciones cuyo ámbito es el servidor en su conjunto. Por ejemplo, la capacidad para administrar los trabajos es una operación a nivel del sistema. Una asignación de roles del sistema no es equivalente a un administrador del sistema.

La información proporcionada menciona que productos como Netwrix Auditor pueden simplificar esta tarea. Según la descripción, esta herramienta permite obtener información detallada sobre quién posee qué roles de servidor y base de datos en un formato legible con pocos clics. Los informes enlazados dentro del producto permitirían a los especialistas navegar rápidamente por la complejidad de la membresía de roles de usuario anidados en toda una instancia de servidor, agilizando las investigaciones. Proporciona detalles críticos como la lista de cada objeto al que el usuario tiene acceso, su ruta y tipo, los permisos otorgados, cómo fueron otorgados (directamente, a través de membresía de rol, etc.), y si son explícitos o heredados. Esta información se presentaría de manera accesible sin la necesidad de escribir scripts complejos o realizar exportaciones manuales.

Creando Nuevos Roles en Oracle Database: La Sentencia CREATE ROLE

Mientras que en SQL Server nos enfocamos en cómo encontrar roles, en Oracle Database, la tarea de definir nuevos conjuntos de permisos se realiza mediante la sentencia CREATE ROLE. El propósito principal de esta sentencia es crear un rol, que, como ya hemos mencionado, es un conjunto de privilegios que pueden ser otorgados a usuarios o a otros roles.

Utilizar roles para administrar privilegios simplifica la administración de la base de datos. Se pueden añadir privilegios a un rol utilizando la sentencia GRANT, y luego otorgar el rol a un usuario. Una vez que el usuario habilita el rol (lo cual se hace típicamente con la sentencia SET ROLE), puede ejercer los privilegios que le fueron concedidos a través de ese rol. Un rol no solo contiene los privilegios otorgados directamente a él, sino también todos los privilegios de otros roles que le hayan sido otorgados. Inicialmente, un nuevo rol está vacío; los privilegios deben ser añadidos explícitamente después de su creación.

Prerrequisitos para Crear un Rol

Para poder ejecutar la sentencia CREATE ROLE, un usuario debe tener el privilegio de sistema CREATE ROLE. Si se va a especificar la cláusula CONTAINER (relevante en bases de datos multitenant o CDBs), se deben cumplir condiciones adicionales: para especificar CONTAINER = ALL, la conexión debe ser al root de la CDB; para especificar CONTAINER = CURRENT, la conexión debe ser a una base de datos conectable (PDB).

Sintaxis y Opciones de Identificación

La sintaxis básica para crear un rol en Oracle es:

CREATE ROLE role [ NOT IDENTIFIED | IDENTIFIED { BY password | USING package | EXTERNALLY | GLOBALLY [ AS 'directory_group_name' | AS 'AZURE_ROLE=AppRoleName' ] } ] [ CONTAINER = { CURRENT | ALL } ];

Analicemos las partes clave:

  • role: Especifica el nombre del rol. El nombre debe seguir las reglas de nomenclatura de objetos de base de datos de Oracle. Se recomienda que contenga al menos un carácter de byte único. La longitud máxima es de 128 bytes. En bases de datos multitenant, los nombres de roles comunes deben comenzar con el prefijo especificado por el parámetro COMMON_USER_PREFIX (por defecto, C##), mientras que los roles locales no deben comenzar con este prefijo.
  • NOT IDENTIFIED: Indica que este rol está autorizado por la base de datos y no requiere una contraseña para ser habilitado.
  • IDENTIFIED: Indica que se requiere un método de autorización específico antes de que el rol pueda ser habilitado con SET ROLE. Existen varias opciones dentro de esta cláusula:
    • BY password: El rol está protegido por contraseña. Se debe especificar la contraseña al intentar habilitar el rol.
    • USING package: Crea un rol de aplicación seguro. Este tipo de rol solo puede ser habilitado por aplicaciones que utilicen un paquete autorizado específico.
    • EXTERNALLY: Crea un rol externo. La autorización para habilitar este rol la proporciona un servicio externo, como el sistema operativo o un servicio de terceros.
    • GLOBALLY: Crea un rol global. La autorización para usar este rol la proporciona un servicio de directorio empresarial (como un directorio LDAP) en el momento del inicio de sesión. Con AS, se puede mapear un grupo de directorio o un rol de aplicación de Azure AD a este rol global.
  • CONTAINER: Aplicable en CDBs. ALL es el valor por defecto cuando se conecta al root (crea un rol común); CURRENT es el valor por defecto cuando se conecta a una PDB (crea un rol local). Aunque se puede especificar, los valores por defecto son los únicos permitidos dependiendo del contenedor actual.

Consideraciones Adicionales

Al crear roles, es importante tener en cuenta las reglas de nomenclatura y las limitaciones, como el número máximo de roles definidos por el usuario que pueden estar habilitados para un solo usuario a la vez (mencionado como 148 en la información proporcionada). Los roles predefinidos por Oracle, que se crean a partir de scripts proporcionados con el software, también existen y tienen propósitos específicos (por ejemplo, CONNECT, RESOURCE, etc., aunque estos no se detallan en la información base).

Las opciones de identificación ofrecen flexibilidad en cómo se gestiona la seguridad de la habilitación del rol, desde roles que se habilitan libremente (NOT IDENTIFIED) hasta aquellos que dependen de sistemas de autenticación externos o lógicas de aplicación específicas.

Preguntas Frecuentes

¿Por qué son importantes los roles en las bases de datos?
Los roles son importantes porque simplifican la administración de permisos. Permiten agrupar un conjunto de privilegios y asignarlos a múltiples usuarios a la vez, en lugar de gestionar permisos individualmente para cada usuario y objeto. Esto mejora la seguridad y la eficiencia administrativa.
¿Cuál es la diferencia entre roles de servidor y roles de base de datos en SQL Server?
Los roles de servidor en SQL Server otorgan permisos que aplican a toda la instancia del servidor SQL, afectando múltiples bases de datos y operaciones a nivel de instancia. Los roles de base de datos, por otro lado, solo otorgan permisos dentro del contexto de una base de datos específica.
¿Por qué es difícil encontrar todos los roles asignados usando solo herramientas nativas en SQL Server?
Es difícil debido a varios factores: la información está dispersa en diferentes vistas del sistema (sys.server_principals, master.sys.server_role_members para servidor; sys.database_principals para bases de datos), requiere unir estas vistas, y especialmente, la información de roles de base de datos debe consultarse por separado en cada base de datos. La anidación de roles añade complejidad adicional.
¿Qué significa que un rol en Oracle esté 'IDENTIFIED BY password'?
Significa que cuando un usuario intenta habilitar ese rol en su sesión (usando la sentencia SET ROLE), el usuario debe proporcionar la contraseña asociada a ese rol para tener éxito. Esto añade una capa de seguridad para la habilitación del rol.
¿Qué es un rol global en Oracle y cómo se diferencia?
Un rol global es un rol cuya autorización para ser habilitado la gestiona un servicio de directorio empresarial externo. A diferencia de otros roles que se autentican directamente en la base de datos o mediante contraseña, un rol global se autoriza a través del directorio al inicio de sesión del usuario. Pueden mapearse a grupos de directorio o roles de aplicación de Azure AD.

Comparativa: Métodos de Identificación para CREATE ROLE en Oracle

Método de IdentificaciónDescripciónCómo se Habilita
NOT IDENTIFIEDRol autorizado por la base de datos sin contraseña.Directamente con SET ROLE (si está otorgado al usuario).
IDENTIFIED BY passwordRol protegido por contraseña.Con SET ROLE, especificando la contraseña.
IDENTIFIED USING packageRol de aplicación seguro.Solo mediante la ejecución de código dentro de un paquete autorizado.
IDENTIFIED EXTERNALLYRol autorizado por un servicio externo (SO, tercero).Autorización a través del servicio externo al habilitar el rol.
IDENTIFIED GLOBALLYRol autorizado por un servicio de directorio empresarial.Autorización a través del directorio al inicio de sesión (o mediante mapeo a grupo/rol externo).

La gestión de roles, tanto su auditoría para entender los permisos existentes como la creación de nuevos roles para estructurar la seguridad, es una tarea continua y fundamental en la administración de bases de datos. Comprender las herramientas y sentencias disponibles en sistemas como SQL Server y Oracle es esencial para mantener entornos seguros y conformes. Si bien las herramientas nativas ofrecen la funcionalidad básica, la complejidad de obtener una vista completa y detallada resalta la utilidad de soluciones diseñadas para la auditoría y gestión de permisos a gran escala. La capacidad de definir roles con diferentes métodos de identificación en Oracle ofrece flexibilidad para integrar la seguridad de la base de datos con otras infraestructuras de autenticación y autorización.

Si quieres conocer otros artículos parecidos a Gestión de Roles en Bases de Datos puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir