SQL Server 2016: Row Level Security Carlos Ulate Hernandez [email protected] @sql506 cr.linkedin.com/in/carlosulate www.sql506.com MCTS SQL Server Coordinador Spanish Virtual Chapter Organiza http://tinyurl.com/ComunidadWindows Patrocinadores del SQL Saturday Platinum Sponsor Diamond Sponsor Bronze Sponsor Agenda • Que es Row Level Security? • Como funciona Row Level Security. • Ventajas de Row Level Security. • Row Level Security nativo en SQL Server 2016. • Implementacion de Row Level Security. • Mejores prácticas. Agenda • Que es Row Level Security?. • Como funciona Row Level Security. • Ventajas de Row Level Security. • Row Level Security nativo en SQL Server 2016. • Implementacion de Row Level Security. • Mejores prácticas. Que es Row Level Security? • Es una la nueva funcionalidad de SQL Server 2016 que nos permite tener un control de acceso de datos a nivel de registros. • Una manera de poder entender que es Row Level Security (RLS) es verlo como una condición ¨Where¨ implícita en la consulta, el cual solo me permite consultar los datos que cumplan dicha condición. Que es Row Level Security? • En versiones anteriores se implementaba RLS utilizando vistas y procedimientos almacenados donde se agregaba un filtro a la clausula where a una columna que seria utilizada como identificador de seguridad. • Esta presente en Azure SQL Database (V12) y ahora para el SQL Server 2016 se agrega dicha funcionalidad. Agenda • Que es Row Level Security?. • Como funciona Row Level Security. • Ventajas de Row Level Security. • Row Level Security nativo en SQL Server 2016. • Implementacion de Row Level Security. • Mejores prácticas. Como funciona RLS • Crea un filtro en la tabla que se defina sin necesidad de crear una vista, en su lugar se utiliza un Inline Table Valued Function. • SQL Server realiza implícitamente un INNER JOIN entre la función que se creo y la tabla que se esta consultando. • La que se encarga de juntar la tabla consultada junto a su correspondiente función es una política de seguridad en la cual agrega un predicado a la tabla en cuestión. • Todo esto nos permite poder regresar al usuario que realizo la consulta los datos a los que el tiene acceso. Agenda • Que es Row Level Security?. • Como funciona Row Level Security. • Ventajas de Row Level Security. • Row Level Security nativo en SQL Server 2016. • Implementacion de Row Level Security. • Mejores prácticas. Ventajas de Row Level Security • Reduce la complejidad en código por medio de la centralización de la lógica de acceso por medio de una política de acceso, evitando con esto tener que utilizar vistas en todas las tablas que se quiera implementar. • Simplifica el mantenimiento de la aplicación permitiendo que se realicen las consultas directamente a las tablas. Ventajas de Row Level Security • Los cambios para la aplicación y el para el usuario son completamente transparentes. • Me permite un fácil manejo de los usuarios que pueden tener acceso a que data, de una manera transparente para la aplicación. Agenda • Que es Row Level Security?. • Como funciona Row Level Security. • Ventajas de Row Level Security. • Row Level Security nativo en SQL Server 2016. • Implementacion de Row Level Security. • Mejores prácticas. RLS nativo en SQL Server 2016 • Como ya se mencionó antes el RLS esta presente en Azure SQL Database desde la V12 y hasta en esta nueva versión de SQL Server es que se agrego tan solicitada funcionalidad, lo cual nos permite manejar on premise el acceso a nivel de registros y de esta manera dejar toda la seguridad en la capa de datos, lo cual me brinda mas seguridad contra posibles ataques. Agenda • Que es Row Level Security?. • Como funciona Row Level Security. • Ventajas de Row Level Security. • Row Level Security nativo en SQL Server 2016. • Implementacion de Row Level Security. • Mejores prácticas. Implementación de RLS • Para la implementación de RLS es necesario crear lo siguiente: • • • • Crear un nuevo esquema diferente al esquema donde se encuentran los datos. La tabla debe contar con un campo de tipo sysname donde se almacenara nuestro RLS ID. Crear una función que se encarga de manejar a que tiene acceso cada usuario. Crear una política de seguridad basado en la función que creamos para manejar el acceso a registros. Agenda • Que es Row Level Security?. • Como funciona Row Level Security. • Ventajas de Row Level Security. • Row Level Security nativo en SQL Server 2016. • Implementacion de Row Level Security. • Mejores prácticas. Mejores Prácticas • Se recomienda utilizar un esquema separado para los objetos del RLS • Las modificaciones a cualquier política de seguridad deben ser realizadas por un usuario con permisos de alto nivel, como un security policy manager, este usuario no requiere tener permisos para hacer SELECT a las tablas que el esta aplicando la política. Mejores Prácticas • Evitar las conversiones de tipo en la función del predicado para evitar potenciales runtime errors. • Evitar la repetición de funciones de predicado siempre que sea posible para evitar la degradación del rendimiento. • Evitar el uso excesivo de joins entre tablas dentro de la función del predicado para maximizar el rendimiento. Preguntas y Respuestas [email protected] http://www.sql506.com/ Carlos A. Ulate Hernández @sql506