Asegurar tu base de datos es ahora más fácil con SQL Server 2016 Daniel Valero Microsoft Senior Premier Field Engineer daniel.valero@microsoft.com Asegurar tu base de datos es ahora más fácil con SQL Server 2016
Agradecimiento a los patrocinadores Premium Silver Personal
Acceso de aplicaciones Panorama de seguridad Acceso de aplicaciones Monitoreo Proactivo Cifrado de datos Control de Acceso Monitoreo proactivo Dynamic Data Masking Auditoria Row-level Security SQL Threat Detection Acceso a base de datos Cifrado de datos Autenticación Cifrado en transito Permisos SQL Cifrado en reposo SQL Firewall Cifrado de columnas Azure Active Directory Authentication Cifrado de respaldos Logon Triggers Always Encrypted Sólo Azure
Dynamic Data Masking XXXX-XXXX-XXXX-9876
¿Cómo funciona Dynamic Data Masking? 3) La política deenmascaramiento dinámico ofusca la data sensible en el resultado de la consulta El oficial de Seguridad define las políticas de enmascaramiento dinámico usando T-SQL sobre la tabla que contiene datos sensibles 2) El usuario de aplicación consulta la tabla ALTER TABLE [Employee] ALTER COLUMN [SocialSecurityNumber] ADD MASKED WITH (FUNCTION = 'partial(0,"***-**-",4)') NULL ALTER TABLE [Employee] ALTER COLUMN [Email] ADD MASKED WITH (FUNCTION = ‘EMAIL()’) ALTER TABLE [Employee] ALTER COLUMN [Salary] ADD MASKED WITH (FUNCTION = ‘RANDOM(1,20000)’) GRANT UNMASK to admin1 Oficial de Seguridad SQL DB Login de administrador Login no administrador SELECT [Name], [SocialSecurityNumber], [Email], [Salary] FROM [Employee] Security
Dynamic Data Masking
Row Level Security (RLS)
¿Cómo implementar RLS? Dos tipos de predicados Filter predicates dbo.Customers Col1 Col2 Col3 SalesRepName SalesRep1 SalesRep2 Usualmente, cada registro tendrá una o más “etiquetas” que determinan quien tiene acceso a dicho registro Dos tipos de predicados Filter predicates Silenciosamente oculta operaciones SELECT, UPDATE y DELETE para excluir los registros que no satisfagan el predicado Block predicates Explícitamente bloquean operaciones INSERT, UPDATE y DELETE que no satisfagan el predicado CREATE FUNCTION dbo.customerPredicate(@SalesRepName AS sysname) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS accessResult WHERE @SalesRepName = USER_NAME() OR USER_NAME() = 'Manager' go CREATE SECURITY POLICY dbo.customerAccessPolicy ADD FILTER PREDICATE dbo.customerPredicate(SalesRepName) ON dbo.Customers, ADD BLOCK PREDICATE dbo.customerPredicate(SalesRepName) ON dbo.Customers go Crear una función inline table-valued que defina el criterio de acceso (predicado de seguridad) Crear una política de seguridad (security policy) para agregar los predicados de seguridad sobre la tabla usando la función anterior
Administrador de políticas ¿Cómo funciona RLS? 1) El administrador de políticas crea el filtro de predicado y la política de seguridad en T-SQL, enlazando el predicado a la tabla 2) El usuario consulta la tabla 3) La política de seguridad transparentemente reescribe la consulta para aplicar el predicado Administrador de políticas Base de datos Enfermera Filter Predicate: INNER JOIN… Security Policy CREATE FUNCTION dbo.fn_securitypredicate(@wing int) RETURNS TABLE WITH SCHEMABINDING AS return SELECT 1 as [fn_securitypredicate_result] FROM StaffDuties d INNER JOIN Employees e ON (d.EmpId = e.EmpId) WHERE e.UserSID = SUSER_SID() AND @wing = d.Wing; CREATE SECURITY POLICY dbo.SecPol ADD FILTER PREDICATE dbo.fn_securitypredicate(Wing) ON Patients WITH (STATE = ON) SELECT * FROM Patients SEMIJOIN APPLY dbo.fn_securitypredicate(patients.Wing); Pacientes Aplicación SELECT Patients.* FROM Patients, StaffDuties d INNER JOIN Employees e ON (d.EmpId = e.EmpId) WHERE e.UserSID = SUSER_SID() AND Patients.wing = d.Wing; SELECT * FROM Patients
Row Level Security
Always Encrypted
Características Cifrado del lado cliente Separación de roles El cifrado de datos sensibles se realiza del lado del cliente usando llaves que nunca se entregan al DBA Separación de roles El administrador de Seguridad configura las llaves y el DBA configura el cifrado Consultas sobre data cifrada Soporte para comparaciones de igualdad, incluyendo operadores joins, broup by y distinct Transparente para la aplicación Cambios mínimos a la aplicación vía el servidor y librerías clientes con mínimo impacto en desempeño
Llaves de cifrado Column Master Key (CMK) Metada sobre la ubicación del certificado usado para cifrar el Column Encryption Key El certificado es almacenado en un almacén externo: Windows Certificate Store, Azure Key Vault or Hardware Security Module (HSM)
Llaves de cifrado Column Encryption Key (CEK) Es la llave utilizada para encriptar los valores en la columnas de la tabla Está cifrada por el Column Master Key Puede tener hasta dos valores encriptados (para rotación del CMK)
¿Cómo implementar Always Encrypted? Especifica el Column Encryption Key Especifica el tipo de encriptación y el algoritmo: Determinista (Deterministic) – Requiere collation BIN2 Aleatorio (Randomized) - Más seguro
¿Cómo funciona Always Encrypted? Trusted Apps SELECT Name FROM Patients WHERE SSN=@SSN @SSN='198-33-0987' SQL Server SELECT Name FROM Patients WHERE SSN=@SSN @SSN=0x7ff654ae6d Client side Query Enhanced ADO.NET Library Column Master Key Column Encryption Key Result Set Result Set Denny Usher Name 0x7ff654ae6d SSN USA Country 198-33-0987 ciphertext dbo.Patients Philip Wegner Name SSN USA Denny Usher 0x7ff654ae6d Alicia Hodge 0y8fj754ea2c 1x7fg655se2e Country Name 243-24-9812 SSN Country Denny Usher 198-33-0987 USA Alicia Hodge 123-82-1095 Philip Wegner dbo.Patients Philip Wegner Name 1x7fg655se2e SSN USA Country Denny Usher 0x7ff654ae6d Alicia Hodge 0y8fj754ea2c dbo.Patients
Always Encrypted - Parametrización
Always Encrypted con Separación de Roles
Preguntas y Respuestas