{"id":259,"date":"2018-01-22T22:35:43","date_gmt":"2018-01-22T21:35:43","guid":{"rendered":"http:\/\/wchmurze.cloud\/?p=259"},"modified":"2019-08-18T14:58:20","modified_gmt":"2019-08-18T12:58:20","slug":"generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2","status":"publish","type":"post","link":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/","title":{"rendered":"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2"},"content":{"rendered":"<h2>1. Dedykowany widok wykorzystuj\u0105cy funkcje pseudolosowe.<\/h2>\n<pre lang=\"SQL\">CREATE VIEW dbo.VGenerateCrypts\r\n\r\nAS\r\n\r\nSELECT NEWID() AS CryptUID,\r\nRIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt1,\r\nRIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt2,\r\nRIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt3,\r\nRIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt4,\r\n1 + CONVERT(INT, (99-1+1) * RAND()) as  CryptYear,\r\n1 + CONVERT(INT, (12-1+1) * RAND()) as  CryptMonth,\r\n1 + CONVERT(INT, (28-1+1) * RAND()) as  CryptDay\r\n<\/pre>\n<p>Do czego jest potrzebny ten widok? To jest obej\u015bcie znanego problemu braku mo\u017cliwo\u015bci wykorzystania funkcji pseudolosowych w funkcjach skalarnych\/tabelarycznych.<br \/>\nPrzyk\u0142adowo:<\/p>\n<pre lang=\"SQL\">CREATE FUNCTION dbo.spGenerateNumber()\r\nRETURNS varchar(100)\r\nAS \r\nBEGIN\r\n\tRETURN newID()\r\nEND \r\n<\/pre>\n<pre>Pr\u00f3ba kompilacji takiej funkcji ko\u0144czy si\u0119 komunikatem:\r\n <span style=\"color: #ff0000;\">Msg 443, Level 16, State 1, Procedure spGenerateNumber, Line 8<\/span>\r\n<span style=\"color: #ff0000;\"> Invalid use of a side-effecting operator 'newid' within a function.<\/span><\/pre>\n<h2>2. Dedykowane funkcje tabelaryczne<\/h2>\n<p>Z za\u0142o\u017cenia jedynym wykorzystywanym obiektem jest powy\u017cszy widok, pozosta\u0142a implementacja nie wymaga dodatkowych struktur,tabel,dedykowanych funkcji i innych obiekt\u00f3w.<br \/>\nKa\u017cda z funkcji jest budowana schematycznie przy wykorzystaniu CTE, podobnie jest zapytania w pierwszej cz\u0119\u015bci artyku\u0142u. Dane generowane przez alias CTE zwracaj\u0105 warto\u015b\u0107 w postaci surowej i je\u015bli trzeba j\u0105 uzupe\u0142ni\u0107 o poprawn\u0105 sum\u0119 kontroln\u0105 odpowiednie podmiany postaci surowej na poprawn\u0105 s\u0105 w instrukcji select aliasu.<br \/>\nFunkcje przyjmuj\u0105 dwa parametry wej\u015bciowe @value i @algorithm. Ta ostatnia jest do po\u017aniejszego wykorzystania w ramach rozwoju grupy algorytm\u00f3w dla takiej samej domeny. Aktualne wersje funkcji nie korzystaj\u0105  z warto\u015bci wej\u015bciowej, ale mo\u017cna b\u0119dzie to zmodyfikowa\u0107 na nast\u0119pnych iteracjach w ramach rozwoju, tak by wykorzystywany kod np. w procedurach sk\u0142adowanych nie ulega\u0142 zmianie ze wzgl\u0119du liczb\u0119 argument\u00f3w funkcji.<\/p>\n<h3>Generowanie numer\u00f3w PESEL<\/h3>\n<pre lang=\"SQL\">  CREATE FUNCTION dbo.spGenerateValueOfPESEL (@value varchar(11),@algorithm int=1)\r\n\r\n  RETURNS TABLE\r\n  AS \r\n\r\n RETURN\r\n WITH generator AS\r\n (\r\n   SELECT  \r\n   RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 99) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 12) + 1,2),2) \r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 28) + 1,2),2) \r\n   +RIGHT(c.Crypt1,5) -- pozostala czesc\r\n \r\n   as PESEL\r\n   from dbo.VGenerateCrypts c\r\n )\r\n\r\n SELECT @value as InValue -- to co wejsciu\r\n \r\n ,left(PESEL,10)+\r\n   \r\n convert(varchar(1), ((\r\n   Convert(int,substring(PESEL,1,1))*9\r\n   +Convert(int,substring(PESEL,2,1))*7\r\n   +Convert(int,substring(PESEL,3,1))*3\r\n   +Convert(int,substring(PESEL,4,1))*1\r\n   +Convert(int,substring(PESEL,5,1))*9\r\n   +Convert(int,substring(PESEL,6,1))*7\r\n   +Convert(int,substring(PESEL,7,1))*3\r\n   +Convert(int,substring(PESEL,8,1))*1\r\n   +Convert(int,substring(PESEL,9,1))*9\r\n   +Convert(int,substring(PESEL,10,1))*7\r\n   )\r\n    % 10)) AS OutValue \r\n\t\r\n\t,@algorithm AS algorithm  \r\n\t FROM generator;\r\n<\/pre>\n<h3>Generowanie EMAIL<\/h3>\n<pre lang=\"SQL\">   CREATE FUNCTION [dbo].[spGenerateValueOfEMAIL] (@value varchar(100),@algorithm int=1)\r\n   \r\n   RETURNS TABLE\r\n   \r\n   AS\r\n   \r\n\tRETURN\r\n\r\n\t with generator AS\r\n\t  (\r\n\r\n      \r\n\t\t  select @value as InValue \r\n\t  \r\n\t  \r\n\t\t\t,RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',ABS(BINARY_CHECKSUM(c.CryptUID)%35) + 1 ),1) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',ABS(BINARY_CHECKSUM(c.CryptUID)%30) + 1 ),1) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',ABS(BINARY_CHECKSUM(c.CryptUID)%29) + 1 ),1) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',ABS(BINARY_CHECKSUM(c.CryptUID)%45) + 1 ),1) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',ABS(BINARY_CHECKSUM(c.CryptUID)%36) + 1 ),1)\r\n\t\t\t+'@'\r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%33) + 1 ),1) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%15) + 1 ),1) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%8) + 1 ),1)\r\n\t\t\t+'.PL'\r\n\t  \r\n\t\t   AS OutValue\r\n\r\n\r\n\t\t  ,@algorithm AS algorithm \r\n\t   \r\n\t\t   FROM dbo.VGenerateCrypts c\r\n\t  )\r\n\t  SELECT InValue,OutValue,algorithm\r\n \r\n\t FROM generator;\r\n\r\n<\/pre>\n<h3>Generowanie dowodu osobistego<\/h3>\n<pre lang=\"SQL\"> CREATE  FUNCTION [dbo].[spGenerateValueOfIDCard] (@value varchar(100),@algorithm int=1)\r\n\r\n\r\nReturns table\r\n\r\n\r\n\r\nas\r\n\r\nRETURN\r\n(\r\nwith generator AS\r\n(\r\nselect \r\n\r\n@value as InValue, \r\nchar(right(CAST(c.Crypt1 AS INT),1)+65)\r\n+char(right(CAST(c.Crypt2 AS INT),1)+65)\r\n+char(right(CAST(c.Crypt3 AS INT),1)+65)\r\n+c.Crypt4\r\n as IDCardNumber,\r\n \r\n @algorithm as algorithm \r\n\r\nfrom dbo.VGenerateCrypts c\r\n)\r\nselect  InValue, \r\n\r\nleft(IDCardNumber,3)\r\n+\r\nconvert(varchar(1),((7*ascii(substring(IDCardNumber,1,1))-55)+\r\n(3*ascii(substring(IDCardNumber,2,1))-55)+\r\n(1*ascii(substring(IDCardNumber,3,1))-55)+\r\n7*convert(int,(substring(IDCardNumber,5,1)))+\r\n3*convert(int,(substring(IDCardNumber,6,1)))+\r\n1*convert(int,(substring(IDCardNumber,7,1)))+\r\n7*convert(int,(substring(IDCardNumber,8,1)))+\r\n3*convert(int,(substring(IDCardNumber,9,1))) ) % 10)\r\n+\r\nright(IDCardNumber,5) as OutValue ,algorithm\r\nfrom  generator\r\n\r\n\r\n)\r\n\r\n<\/pre>\n<h3>Generowanie rachunku bankowego<\/h3>\n<pre lang=\"SQL\">  \r\nCREATE  FUNCTION [dbo].[spGenerateValueOfPolishBankAccount] (@value varchar(50),@algorithm int=1)\r\n\r\n\r\nRETURNS TABLE\r\n\r\n\r\nas\r\n\r\nRETURN\r\n(\r\nWITH generator AS\r\n(\r\nSELECT \r\n\r\n @value AS InValue, \r\nRIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 99) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 99) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 98) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 97) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 96) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 95) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 94) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 93) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 92) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 91) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 90) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 89) + 1,2),2)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 88) + 1,2),2)\r\n   AS Account,\r\n\r\n @algorithm AS algorithm \r\n\r\nfrom dbo.VGenerateCrypts c\r\n)\r\nselect  InValue, \r\n-- poprawa sumy kontrolnej\r\nright('00'+convert(varchar(2),98-convert(numeric(30,0),right(Account,24)+'252100')%97),2)+right(Account,24) as OutValue\r\n,algorithm\r\nFROM  generator\r\n\r\n)\r\n\r\n<\/pre>\n<h3>Generowanie imion<\/h3>\n<pre lang=\"SQL\">\r\n  CREATE  function [dbo].[spGenerateValueOfFirstName] (@value varchar(50),@algorithm int=1)\r\n   \r\n   RETURNS TABLE\r\n   \r\n   AS\r\n   \r\n\tRETURN\r\n\r\n\t with generator AS\r\n\t  (\r\n\r\n      \r\n\t\t  select @value as InValue \r\n\t  \r\n\t\t\t,RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%26) + 1 ),3) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXY',ABS(BINARY_CHECKSUM(c.CryptUID)%25) + 1 ),3) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%24) + 1 ),3) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%23) + 1 ),3) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%22) + 1 ),3)\r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%21) + 1 ),3) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%20) + 1 ),3) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%19) + 1 ),3)\r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%18) + 1 ),3) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%17) + 1 ),3) \r\n\t\t\t+RIGHT( LEFT('ABCDEFGHIJKLMNOPQRSTUVWXYZ',ABS(BINARY_CHECKSUM(c.CryptUID)%16) + 1 ),3)\r\n\t\t   as OutValue,\r\n\t\t   ABS(Checksum(c.CryptUID) % 25)+5 as Length\r\n\r\n\t\t  ,@algorithm as algorithm \r\n\t   \r\n\t\t   from dbo.VGenerateCrypts c\r\n\t  )\r\n\t  select InValue,left(OutValue,Length) as OutValue,algorithm\r\n \r\n\t from generator;\r\n\r\n<\/pre>\n<h3>Generowanie kodu pocztowego <\/h3>\n<pre lang=\"SQL\">\r\n CREATE FUNCTION dbo.spGenerateValueOfPostalCode(@value varchar(11),@algorytm int=1)\r\n\r\n\r\n  RETURNS TABLE\r\n  AS\r\n\r\n RETURN\r\n WITH generator AS\r\n (\r\n   select  \r\n   RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 38) + 1,2),1)+\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 36) + 1,2),1)\r\n   +'-'\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 34) + 1,2),1)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 32) + 1,2),1)\r\n   +RIGHT('0'+Convert(varchar(2),ABS(Checksum(c.CryptUID) % 30) + 1,2),1)\r\n\r\n   as PostalCode \r\n   from dbo.VGenerateCrypts c\r\n )\r\n\r\n select @value as InValue, \r\n\t\tPostalCode as OutValue, \r\n\t\t@algorytm as algorytm \r\n\t from generator;\r\n<\/pre>\n<p>3. Generowanie danych testowych (TODO)<\/p>\n<pre lang=\"SQL\">\r\nuse AdventureWorks2012\r\n\r\nGO\r\n\r\nCREATE PROCEDURE dbo.spGenerateRandomTestData\r\nAS\r\n\r\nBEGIN\r\n\r\nIF OBJECT_ID('AdventureWorks2012.dbo.RandomTestData') is  null\r\nBEGIN\r\n\r\n CREATE TABLE dbo.RandomTestData\r\n (lp int not null Primary Key,\r\n PESEL varchar(11) not null,\r\n EMAIL varchar(50) null, \r\n DowodOsobisty varchar(50)  null,\r\n NRB varchar(50)  null,\r\n IMIE varchar(50)  null,\r\n KodPocztowy varchar(6)  null\r\n )\r\n\r\n\r\nEND\r\n\r\ntruncate table dbo.RandomTestData\r\n\r\n\r\n ;WITH\r\n  Poziom0 AS (SELECT 1 AS C UNION ALL SELECT 1), --2 rows\r\n  Poziom1 AS (SELECT 1 AS C FROM Poziom0 AS A, Poziom0 AS B),--4 rows\r\n  Poziom2 AS (SELECT 1 AS C FROM Poziom1 AS A, Poziom1 AS B),--16 rows\r\n  Poziom3 AS (SELECT 1 AS C FROM Poziom2 AS A, Poziom2 AS B),--256 rows\r\n  Poziom4 AS (SELECT 1 AS C FROM Poziom3 AS A, Poziom3 AS B),--65536 rows\r\n  Poziom5 AS (SELECT 1 AS C FROM Poziom4 AS A, Poziom4 AS B),--4294967296 rows\r\n  Dane  AS (SELECT ROW_NUMBER() OVER(ORDER BY C) AS Lp, \r\n\t '' AS Wartosc\r\n \r\n   FROM Poziom5)\r\n\r\n   insert into  dbo.RandomTestData\r\n\r\n\t(lp,PESEL,EMAIL,DowodOsobisty,NRB,IMIE,KodPocztowy) \r\n\r\n   select lp,pes.OutValue as PESEL,email.OutValue,dowod.OutValue,nrb.OutValue,name.OutValue,kod.OutValue from dane d\r\n   CROSS apply dbo.spGenerateValueOfPESEL(d.Wartosc,1)  pes\r\n   CROSS apply dbo.spGenerateValueOfEMAIL(d.Wartosc,1)  email\r\n   CROSS apply dbo.spGenerateValueOfIDCard(d.Wartosc,1) dowod\r\n   CROSS apply dbo.spGenerateValueOfPolishBankAccount (d.Wartosc,1) nrb\r\n   CROSS apply dbo.spGenerateValueOfFirstname(d.Wartosc,1)  name\r\n   CROSS apply dbo.spGenerateValueOfPostalCode(d.Wartosc,1) kod \r\n   WHERE lp <= 1000000-- limit\r\n\r\n\r\nRETURN (0)\r\n\r\nEND \r\n<\/pre>\n<p>4. Wykorzystanie funkcji tabelarycznych do zmiany wygenerowanych danych testowych (TODO)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Dedykowany widok wykorzystuj\u0105cy funkcje pseudolosowe. CREATE VIEW dbo.VGenerateCrypts AS SELECT NEWID() AS CryptUID, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt1, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt2, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt3, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt4, 1 + CONVERT(INT, (99-1+1) * RAND()) &hellip; <a href=\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/\">Continued<\/a><\/p>\n","protected":false},"author":1,"featured_media":1073,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14,13,2],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2 - W chmurze o chmurze i nie tylko<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2 - W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"og:description\" content=\"1. Dedykowany widok wykorzystuj\u0105cy funkcje pseudolosowe. CREATE VIEW dbo.VGenerateCrypts AS SELECT NEWID() AS CryptUID, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt1, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt2, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt3, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt4, 1 + CONVERT(INT, (99-1+1) * RAND()) &hellip; Continued\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/\" \/>\n<meta property=\"og:site_name\" content=\"W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-22T21:35:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-18T12:58:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2018\/04\/sql-glass.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"467\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"djkormo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"djkormo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/\"},\"author\":{\"name\":\"djkormo\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"headline\":\"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2\",\"datePublished\":\"2018-01-22T21:35:43+00:00\",\"dateModified\":\"2019-08-18T12:58:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/\"},\"wordCount\":220,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"articleSection\":[\"implementacja\",\"RODO\",\"t-sql\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/\",\"url\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/\",\"name\":\"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2 - W chmurze o chmurze i nie tylko\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/#website\"},\"datePublished\":\"2018-01-22T21:35:43+00:00\",\"dateModified\":\"2019-08-18T12:58:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/wchmurze.cloud\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wchmurze.cloud\/#website\",\"url\":\"https:\/\/wchmurze.cloud\/\",\"name\":\"W chmurze o chmurze i nie tylko\",\"description\":\"W chmurze o chmurze i nie tylko\",\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wchmurze.cloud\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\",\"name\":\"djkormo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"caption\":\"djkormo\"},\"logo\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2 - W chmurze o chmurze i nie tylko","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/","og_locale":"pl_PL","og_type":"article","og_title":"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2 - W chmurze o chmurze i nie tylko","og_description":"1. Dedykowany widok wykorzystuj\u0105cy funkcje pseudolosowe. CREATE VIEW dbo.VGenerateCrypts AS SELECT NEWID() AS CryptUID, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt1, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt2, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt3, RIGHT(CAST(CRYPT_GEN_RANDOM(4) AS INT),6) as Crypt4, 1 + CONVERT(INT, (99-1+1) * RAND()) &hellip; Continued","og_url":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/","og_site_name":"W chmurze o chmurze i nie tylko","article_published_time":"2018-01-22T21:35:43+00:00","article_modified_time":"2019-08-18T12:58:20+00:00","og_image":[{"width":700,"height":467,"url":"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2018\/04\/sql-glass.jpg","type":"image\/jpeg"}],"author":"djkormo","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"djkormo","Szacowany czas czytania":"6 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/#article","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/"},"author":{"name":"djkormo","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"headline":"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2","datePublished":"2018-01-22T21:35:43+00:00","dateModified":"2019-08-18T12:58:20+00:00","mainEntityOfPage":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/"},"wordCount":220,"commentCount":0,"publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"articleSection":["implementacja","RODO","t-sql"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/","url":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/","name":"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2 - W chmurze o chmurze i nie tylko","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/#website"},"datePublished":"2018-01-22T21:35:43+00:00","dateModified":"2019-08-18T12:58:20+00:00","breadcrumb":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wchmurze.cloud\/index.php\/2018\/01\/22\/generowanie-losowych-odpowiednikow-dla-danych-wrazliwych-dla-rodo-czesc-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wchmurze.cloud\/"},{"@type":"ListItem","position":2,"name":"Generowanie losowych odpowiednik\u00f3w dla danych wra\u017cliwych dla RODO . Cz\u0119\u015b\u0107 2"}]},{"@type":"WebSite","@id":"https:\/\/wchmurze.cloud\/#website","url":"https:\/\/wchmurze.cloud\/","name":"W chmurze o chmurze i nie tylko","description":"W chmurze o chmurze i nie tylko","publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wchmurze.cloud\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":["Person","Organization"],"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323","name":"djkormo","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","caption":"djkormo"},"logo":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/"},"url":"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/"}]}},"_links":{"self":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/259"}],"collection":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/comments?post=259"}],"version-history":[{"count":18,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/259\/revisions"}],"predecessor-version":[{"id":278,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/259\/revisions\/278"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media\/1073"}],"wp:attachment":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media?parent=259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/categories?post=259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/tags?post=259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}