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.

Un pensamiento en “Seguridad a Nivel de Fila (Row Level Security) – K2 & SQL ServiceBroker

  1. Pingback: Row Level Security - K2 and SQL ServiceBroker - Dudelisdev Blog

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *