Se trata del hermano menos popular del row level security y object level security. En esta oportunidad veremos cómo aplicar seguridad a nivel de columnas en Azure SQL Database, método por el cual permitimos un acceso parcial a las columnas que contiene una tabla en específico.
Este artículo es la segunda publicación de una serie de artículos sobre seguridad de datos, el primero lo puedes leer utilizando este enlace.
Escenarios de aplicación
Algunos de los posibles casos de aplicación de la seguridad a nivel de columnas pueden ser:
- No permitir la lectura de la columna que contiene información sensible, como el salario de los empleados de la organización, número de tarjeta de crédito, número de identificación, número telefónico, dirección, entre otros datos que la organización pueda categorizar como sensible
- Simplificar la vista de una tabla para los usuarios, ocultando las columnas que son para el funcionamiento de cierta aplicación
- Ocultar columnas que cobran sentido en escenarios de auditoria
Creando seguridad a nivel de columnas
La implementación de este tipo de seguridad se hace a través de una sentencia GRANT en T-SQL, por lo que podremos hacerla desde cualquier IDE de SQL Server como SSMS o Azure Data Studio.
Preparación del entorno
Primero crearemos una tabla de usuarios sobre la cual daremos permisos a un usuario, igualmente la poblaremos con registros de prueba utilizando el siguiente query:
Al consultar la tabla, tendremos esto:
Concesión de permisos
Este tipo de seguridad aplica sobre usuarios de base de datos, así como para usuarios de Azure Active Directory (AAD). Para este ejercicio, crearemos un usuario de base de datos al cual posteriormente le daremos acceso limitado sobre cierta tabla:
Ahora cada vez que este usuario consulte la información de la tabla de usuarios, deberá especificar las columnas que desea consultar sin ir más allá de las que tiene acceso:
Si este usuario intenta hacer consultas sobre las columnas no permitidas de esta tabla, obtendrá un error que le indicará que no tienen acceso a dicha información:
Conclusiones
Aunque es común encontrar que este tipo de requerimientos de compliance suele resolverse erróneamente a través de la creación de vistas, esto realmente no cubre los escenarios en su totalidad.
Sin embargo, es cierto que la combinación de CLS (Column Level Security) combinado con una vista facilita la generación de la consulta hacia el usuario, ya que podrá hacer un “select * from” sobre la vista sin especificar el total de columnas sobre las que tiene permisos.