{"id":1779,"date":"2020-05-25T01:21:16","date_gmt":"2020-05-25T01:21:16","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=1779"},"modified":"2020-05-25T01:21:18","modified_gmt":"2020-05-25T01:21:18","slug":"dynamic-data-masking-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=1779","title":{"rendered":"Dynamic Data Masking en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"204\" height=\"241\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking_D.png\" alt=\"\" class=\"wp-image-1780\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Dynamic Data Masking<\/h2>\n\n\n\n<p>SQL Server desde la versi\u00f3n 2016 incluye una nueva caracter\u00edstica de enmascaramiento de datos din\u00e1mico que permite dar cierto grado de seguridad para poder cambiar los caracteres que se visualizan por<br>caracteres diferentes.<\/p>\n\n\n\n<p>El enmascaramiento din\u00e1mico de datos ayuda a evitar el acceso no autorizado a datos confidenciales al permitir que los clientes designen qu\u00e9 cantidad de datos confidenciales se revelar\u00e1n con un impacto m\u00ednimo en<br>la capa de aplicaci\u00f3n.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>El DDM se puede configurar en la base de datos para ocultar datos confidenciales en los conjuntos de resultados de consultas en los campos de la base de datos designados, mientras que los datos en la base de datos no<br>se modifican. El enmascaramiento din\u00e1mico de datos es f\u00e1cil de usar con las aplicaciones existentes, ya que las reglas de enmascaramiento se aplican en los resultados de la consulta.<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:26px\"><strong>Tipos de enmascaramiento din\u00e1mico<\/strong><\/p>\n\n\n\n<p>DDM presenta cuatro tipos de enmascaramiento din\u00e1mico de datos, los que se manejan de acuerdo a funciones<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Default<\/li><li>Email<\/li><li>Random<\/li><li>Cadena personalizada<\/li><\/ul>\n\n\n\n<p style=\"font-size:22px\"><strong>Enmascaramiento Default<\/strong><\/p>\n\n\n\n<p><strong>Enmascaramiento completo seg\u00fan los tipos de datos de los campos designados.<\/strong><br>Para los tipos de datos de cadena, usa XXXX o menos X si el tama\u00f1o del campo es inferior a 4 caracteres (char, nchar, varchar, nvarchar, text, ntext).<br>Para los tipos de datos num\u00e9ricos usa un valor cero<br>(bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).<br>Para los tipos de datos de fecha y hora, usa 01.01.1900 00: 00: 00.0000000<br>(Date, datetime2, datetime, datetimeoffset, smalldatetime, time).<br>Para los tipos de datos binarios, usa un solo byte de valor ASCII 0 (binario, varbinary, imagen).<\/p>\n\n\n\n<p><strong>Ejemplo<\/strong><\/p>\n\n\n\n<p><strong>Al definir la columna:<\/strong><br>Telefono nvarchar(12) MASKED WITH (FUNCTION = &#8216;default ()&#8217;) NULL<br><strong>Modificar una columna<\/strong><br>ALTER COLUMN Sexo ADD MASKED WITH (FUNCTION = &#8216;default ()&#8217;)<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Enmascaramiento Email<\/strong><\/p>\n\n\n\n<p>M\u00e9todo de enmascaramiento que expone la primera letra de una direcci\u00f3n de correo electr\u00f3nico y el sufijo constante \u00ab.com\u00bb, en forma de una  direcci\u00f3n de correo electr\u00f3nico. . aXXX@XXXX.com.<\/p>\n\n\n\n<p><strong>Ejemplo<\/strong><\/p>\n\n\n\n<p><strong>Al definir la columna<\/strong><br>CorreoElectronico nvarchar(100) MASKED WITH (FUNCTION = &#8216;email ()&#8217;) NULL<br><strong>Modificar la columna<\/strong><br>ALTER COLUMN CorreoElectronico ADD MASKED WITH (FUNCTION = &#8216;email ()&#8217;)<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Enmascaramiento Random<\/strong><\/p>\n\n\n\n<p>Una funci\u00f3n de enmascaramiento aleatorio para usar en cualquier tipo num\u00e9rico para enmascarar el valor original con un valor aleatorio dentro de un rango espec\u00edfico.<\/p>\n\n\n\n<p>Ejemplos<\/p>\n\n\n\n<p><strong>Al definir la columna<\/strong><br>NumeroCuenta bigint MASKED WITH (FUNCTION = &#8216;random ([rango inicial], [rango final])&#8217;)<br><strong>Modificando la columna<\/strong><br>ALTER COLUMN Mes ADD MASKED WITH (FUNCTION = &#8216;random (1, 12)&#8217;)<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Enmascaramiento Cadena personalizada<\/strong><\/p>\n\n\n\n<p>M\u00e9todo de enmascaramiento que expone la primera y la \u00faltima letra y agrega una cadena de relleno personalizada en el medio. prefijo, [relleno], sufijo.  Si el valor original es demasiado corto para completar toda la m\u00e1scara, parte del prefijo o sufijo no se expondr\u00e1.<\/p>\n\n\n\n<p>Ejemplos<\/p>\n\n\n\n<p><strong>Al definir la columna<\/strong><br>EmpleadoNombre nvarchar(100) MASKED WITH (FUNCTION = &#8216;parcial (2, \u00abXXXXXX\u00bb, 1)&#8217;) NULL<br><strong>Modificando la columna<\/strong><br>ALTER COLUMN Fono Add Masked with (FUNCTION = &#8216;parcial (1, \u00abXXXXXXX\u00bb, 0)&#8217;)<br>ALTER COLUMN Telefono Add Masked with (FUNCTION= &#8216;parcial (5, \u00abXXXXXXX\u00bb, 0)&#8217;)<br>ALTER COLUMN NumeroSeguro Add Masked with (FUNCTION = &#8216;parcial (0, \u00abXXX-XX -\u00ab, 4)&#8217;)<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Permisos para usar el DDM<\/strong><\/p>\n\n\n\n<p class=\"has-background has-very-light-gray-background-color\">Para poder realizar el DDM se deben tener los siguientes permisos:<br>CREATE TABLE y ALTER Table<br>Alter any mask, Alter table para agregar, reemplazar o eliminar la m\u00e1scara de una columna.<br>Select para ver los datos<br>Las columnas que se definen como enmascaradas, mostrar\u00e1n los datos enmascarados.<br>Conceda el permiso UNMASK a un usuario para que pueda recuperar los datos enmascarados de las columnas para las que se define el enmascaramiento.<br>CONTROL en la base de datos incluye el permiso ALTER ANY MASK como UNMASK.<\/p>\n\n\n\n<p style=\"font-size:26px\"><strong>Ejercicio<\/strong><\/p>\n\n\n\n<p>Create database BaseDDM<br>go<br>use BaseDDM<br>go<\/p>\n\n\n\n<p><strong>Crear la tabla Empleados, se usar\u00e1n algunas formas de enmascaramiento. <\/strong>(<a href=\"https:\/\/manualsqlserver.com\/?p=117\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Creaci\u00f3n de tablas<\/a>)<\/p>\n\n\n\n<p>Create table Empleados<br>(<br>EmpleadosCodigo nchar(6),<br>EmpleadosPaterno nvarchar(100) <strong>masked with (Function = &#8216;partial(1,\u00bbXXXXX\u00bb,4)&#8217;) not null<\/strong>,<br>EmpleadosMaterno nvarchar(100) <strong>masked with (Function = &#8216;partial(4,\u00bbXXXXX\u00bb,2)&#8217;) not null<\/strong>,<br>EmpleadosNombres nvarchar(100) not null,<br>EmpleadosEmail nvarchar(70) <strong>masked with (function = &#8216;email()&#8217;)<\/strong>,<br>EmpleadosDireccion nvarchar(200) constraint EmpleadosDireccionDF default &#8216;Sin especificar&#8217;,<br>constraint EmpleadosPK primary key (EmpleadosCodigo)<br>)<br>go<\/p>\n\n\n\n<p><strong>Insertar registros (<a href=\"https:\/\/manualsqlserver.com\/?p=294\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Insertar registros<\/a>)<\/strong><\/p>\n\n\n\n<p>insert into Empleados values<br>(&#8216;FG0059&#8242;,&#8217;Luque&#8217;,&#8217;S\u00e1nchez&#8217;, &#8216;Fernando&#8217;,&#8217;fls2307@hotmail.com&#8217;,&#8217;Av. Rep\u00fablica de Panam\u00e1 404&#8242;),<br>(&#8216;GT7794&#8242;,&#8217;Villacorta&#8217;,&#8217;Alvarado&#8217;, &#8216;Carlos Ernesto&#8217;,&#8217;cevillacortaalva@gmail.com&#8217;,&#8217;Av. Brasil 3434&#8242;),<br>(&#8216;UK4886&#8242;,&#8217;Mendoza&#8217;,&#8217;Huam\u00e1n&#8217;, &#8216;Ingrid&#8217;,&#8217;jfiis_ert@hotmail.com&#8217;,&#8217;Av. Los Alamos 557&#8242;),<br>(&#8216;BT6644&#8242;,&#8217;Solano&#8217;,&#8217;Villavicencio&#8217;, &#8216;Esmeralda Lizeth&#8217;,&#8217;esmelisolano@hotmail.com&#8217;,&#8217;Bolivar 3994&#8242;),<br>(&#8216;ED5567&#8242;,&#8217;Montenegro&#8217;,&#8217;Gimenez&#8217;, &#8216;Julio C\u00e9sar&#8217;,&#8217;jcmontenegro234@hotmail.com&#8217;,&#8217;Av. Javier Prado 4344&#8242;),<br>(&#8216;WJ4468&#8242;,&#8217;Bocanegra&#8217;,&#8217;Pereda&#8217;, &#8216;Oscar&#8217;,&#8217;oscarbocanegra333@hotmail.com&#8217;,&#8217;Sucre 3995&#8242;)<br>go<\/p>\n\n\n\n<p>Ver los datos<br>select * from Empleados<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__01-1024x214.png\" alt=\"\" class=\"wp-image-1781\" width=\"894\" height=\"187\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__01-1024x214.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__01-300x63.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__01-768x161.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__01.png 1086w\" sizes=\"auto, (max-width: 894px) 100vw, 894px\" \/><figcaption>Registros con los campos Paterno, Materno y Email con DDM.<\/figcaption><\/figure>\n\n\n\n<p><strong>Crear un usuario s\u00f3lo con permiso para ver los datos (<a href=\"https:\/\/manualsqlserver.com\/?p=561\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Creaci\u00f3n de usuarios<\/a>)<\/strong><br>Create user Pepe without login<br>go<br><strong>Asignar el permiso (<a href=\"https:\/\/manualsqlserver.com\/?p=617\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Permisos<\/a>)<\/strong><br>Grant select on Object::dbo.Empleados to Pepe<br>go<br><strong>Ejecutar el select como Pepe<\/strong><br>Execute (&#8216;select * from Empleados&#8217;) as user = &#8216;Pepe&#8217;<br>go<\/p>\n\n\n\n<p><strong>Eliminar el DDM del campo Email<\/strong><br>Alter table Empleados Alter column EmpleadosEmail Drop Masked<br>go<br>Ejecutar el select como Pepe<br>Execute (&#8216;select * from Empleados&#8217;) as user = &#8216;Pepe&#8217;<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__02-1024x192.png\" alt=\"\" class=\"wp-image-1782\" width=\"805\" height=\"150\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__02-1024x192.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__02-300x56.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__02-768x144.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__02.png 1176w\" sizes=\"auto, (max-width: 805px) 100vw, 805px\" \/><\/figure>\n\n\n\n<p><strong>Agregar una m\u00e1scara al campo Direcci\u00f3n.<\/strong><br>Alter table Empleados alter column EmpleadosDireccion<br>add masked with (Function = &#8216;partial(1,\u00bbXXXXXXXXXXXXXXXXXXXXXXXX\u00bb,3)&#8217;)<br>go<br><strong>Ejecutar el select como Pepe<\/strong><br>Execute (&#8216;select * from Empleados&#8217;) as user = &#8216;Pepe&#8217;<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__03-1024x192.png\" alt=\"\" class=\"wp-image-1783\" width=\"828\" height=\"155\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__03-1024x192.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__03-300x56.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__03-768x144.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__03.png 1260w\" sizes=\"auto, (max-width: 828px) 100vw, 828px\" \/><\/figure>\n\n\n\n<p><strong>Agregar un campo EmpleadosSueldo con DDM con tipo Random<\/strong><br>Alter table Empleados add EmpleadosSueldo Numeric(9,2)<br>masked with (Function = &#8216;Random(1000,4000)&#8217;)<br>go<br><strong>Actualizar el sueldo del empleado con c\u00f3digo BT6644 a 2500<\/strong><br>Update Empleados set EmpleadosSueldo = 2500<br>where EmpleadosCodigo = &#8216;BT6644&#8217;<br>go<br>Ver los datos<br>select * from Empleados<br>go<\/p>\n\n\n\n<p><strong> Ejecutar el select como Pepe<\/strong><br>Execute (&#8216;select * from Empleados&#8217;) as user = &#8216;Pepe&#8217;<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__04-1024x146.png\" alt=\"\" class=\"wp-image-1784\" width=\"826\" height=\"117\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__04-1024x146.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__04-300x43.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__04-768x109.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_DynamicDataMasking__04.png 1390w\" sizes=\"auto, (max-width: 826px) 100vw, 826px\" \/><\/figure>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Dynamic Data Masking SQL Server desde la versi\u00f3n 2016 incluye una nueva caracter\u00edstica de enmascaramiento de datos din\u00e1mico que permite dar cierto grado de seguridad para poder cambiar los caracteres que se visualizan porcaracteres diferentes. El enmascaramiento din\u00e1mico de datos ayuda a evitar el acceso no autorizado a datos confidenciales al permitir que los clientes &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=1779\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1780,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[20,191,189,190],"class_list":["post-1779","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esquemastablas","tag-create-table","tag-data-masking","tag-ddm","tag-dynamic-masking","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1779"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1779\/revisions"}],"predecessor-version":[{"id":1785,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1779\/revisions\/1785"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1780"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1779"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1779"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}