Seguridad a Nivel de Fila (Row Level Security) – K2 & SQL ServiceBroker

Puedes leer la versión original de esta publicación en inglés aquí – https://dudelisdev.com/2019/01/row-level-security-k2-sql-servicebroker.html

Con sus inicios en MS SQL Server 2016, Microsoft agregó una característica llamada Seguridad a nivel de fila. Permite a los clientes controlar el acceso a las filas en una tabla de base de datos según las características del usuario que ejecuta una consulta (por ejemplo, pertenencia a un grupo o contexto de ejecución).

En este artículo describiré el enfoque que puede tomar para usar la Seguridad de nivel de fila con K2 y SQL ServiceBroker, al crear aplicaciones K2. En K2 Five, la SQL Server Service Instance tiene una nueva clave de parámetro: Set the impersonation user on the DB ContextInfo (establecer el nivel de suplantación en DB ContextInfo).

El siguiente artículo describe el uso de la propiedad:
Establezca el usuario de suplantación en la DB ContextInfo (CONTEXT_INFO). Lo interesante de esto es que CONTEXT_INFO se establece solo cuando el parámetro Service Instance se establece en True.

Sin embargo, K2 establece el objeto SESSION_CONTEXT con el FQN de la persona que llama, cuando realiza una llamada LIST simple.

Para ilustrar la seguridad de nivel de fila con K2 y SQL ServiceBroker, imaginemos que tenemos los siguientes requisitos:

Una tabla de artículos (por ejemplo, Ventas), que contiene algunos datos y también una columna GroupId.

Una tabla de grupo, que contiene la asignación de GroupIds y FQN de los miembros del grupo.

El método de lista SMO estándar debe devolver los elementos, que están asociados con los grupos de un usuario, que está realizando una llamada desde K2.

Vamos a crear los siguientes objetos en SQL:


A continuación voy a proporcionar algunos comentarios y / o explicaciones, lo que está pasando:

01 – Muestras de tablas y datos

En la primera parte, estoy creando algunas tablas de muestra para ilustrar la seguridad de nivel de fila con K2 y SQL ServiceBroker y completarlas con datos de muestra. Por favor, presta atención:

K2: DENALLIX \ Bob (Grupo 1): autorizado para ver Ventas con ID 1 y 2;K2: DENALLIX \ Jonno (Grupo 2): autorizado para ver Ventas con ID 3 y 4;K2: DENALLIX \ Markus (Grupo 3): autorizado para ver Ventas con ID 5 y 6.Esto es importante para la prueba.

02 – Permisos para la cuenta de servicio K2

Por lo general, otorgamos permisos db_owner para la cuenta K2Service. Sin embargo, no en este caso. Se requiere proporcionar permisos granulares a la cuenta, que K2 utiliza para conectarse a SQL.

En el script, estoy otorgando permisos suficientes para ‘CRUD’ y ver la definición de la tabla. Así, K2 puede crear todos los objetos de servicio.Además, puede observar que no estoy concediendo ningún permiso para la tabla de usuarios del grupo. No es necesario que K2 vea las tablas dependientes, a menos que necesite obtener los datos de esas tablas dependientes en sus aplicaciones.

03 – Nuevo esquema y función en línea Microsoft

Se recomienda crear un esquema separado para los objetos de Seguridad de nivel de fila (RLS) (función de predicado y política de seguridad).La función en línea Security.fn_securitypredicate debe contener toda la lógica, que se utiliza para comprender, si un usuario puede o no puede tener acceso a la fila de la tabla. El valor de la columna de la fila se enviará como una función de parámetro de entrada y la condición se evaluará para cada fila.En la función estoy usando 2 funciones / objetos SQL del sistema:CONTEXT_INFO: al llamar a los métodos Crear / Leer / Actualizar / Eliminar;SESSION_CONTEXT – al llamar al método de lista. El enfoque actual está trabajando en K2 Five 5.2 FP6. Tal vez, el comportamiento cambie en las últimas versiones o después de aplicar algunos FixPacks más nuevos.

04 – Política de seguridad

Al crear una política de seguridad que agrega esta función como un predicado de filtro. Así que este es realmente el lugar donde asigno la columna de la tabla al parámetro de entrada de la función enlazada. También es posible agregar otros tipos de predicamientos, por ejemplo, si desea comprobar que un usuario solo puede crear elementos con sus GroupIds, etc. Debe habilitar el estado en ON para habilitar la política.Revisa las capturas de pantalla para ver los resultados. Al inicializar la vista, solo hago una simple llamada de lista. El filtrado se realiza mediante SQL, según la configuración de Seguridad de nivel de fila.

Introducción

Por fin es hora de publicar el post introductorio, con algo de demora. Mi nombre es Mikhail y, en resumen, decidí lanzar este blog con dos objetivos en mente: compartir con la comunidad de habla hispana conocimientos técnicos sobre la plataforma K2 y practicar la escritura en español 🙂

¿Por qué estoy haciendo eso? Bueno, después de trabajar durante varios años con la plataforma K2, Aun disfruto de mi trabajo  y todavía sigo aprendiendo y compartiendo mis conocimientos. También me he mudado recientemente a España, por lo que es necesario aprender y practicar el idioma español. Básicamente, decidí combinar estas dos cosas y comenzar el blog enfocado en K2 en español.

Le pedí ayuda con este blog a uno de mis colegas cuyo idioma nativo  es el español para asegurarnos de que no vamos a tener publicaciones significativamente  incomprensivas y llenas de errores.

De todos modos, puedes leer más sobre nosotros haciendo click en  “Acerca de.”

Creo que necesito hacer un par de avisos de responsabilidad necesarios antes de terminar con esta publicación:

1) A pesar de que este blog está siendo escrito / comisariado por personal interno / persona que trabaja en el soporte de producto, el contenido de este blog y las declaraciones que puede encontrar aquí, deben tratarse como opiniones / información puramente personales proporcionadas tal cual deben ser utilizadas por su cuenta y a su riesgo. Así que  pueden confiar, pero asegúrese de verificar 🙂

2) Como hago esto principalmente en mi tiempo personal sin ningún incentivo externo, es probable que no espere una gran cantidad de contenido aquí con alta frecuencia. Todo dependerá de mi tiempo libre y, quizás, de la cantidad de apoyo / interés de los lectores.

3) Debido a las restricciones mencionadas en (2), también puede encontrar aquí versiones en español de mis publicaciones de blog relacionadas con K2 más antiguas y traducciones de contenido de K2 creado por otros bloggers. Estoy seguro de que la mayoría de los profesionales de IT en España comprenden  inglés suficientemente bien, pero aún creo que tener contenido en su idioma nativo puede ser beneficioso y conveniente para muchos.

Supongo que es bastante para una breve introducción. Estén atentos a futuras publicaciones.