﻿
{"id":4892,"date":"2016-09-20T06:05:34","date_gmt":"2016-09-20T06:05:34","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4892"},"modified":"2016-09-20T06:05:34","modified_gmt":"2016-09-20T06:05:34","slug":"sql-server-2016-dynamic-data-masking","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/sql-server-2016-dynamic-data-masking\/","title":{"rendered":"SQL Server 2016 &#8211; Dynamic Data Masking"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<br \/>\nBiliyorsunuz ki, yaz\u0131l\u0131m d\u00fcnyas\u0131 her ge\u00e7en g\u00fcn\u00fc bir sonraki g\u00fcn\u00fcn h\u0131z\u0131nda ya\u015famay\u0131 ve ya\u015fatmay\u0131 seven bir d\u00fcnyad\u0131r. Do\u011fal olarak bu h\u0131zdan teknolojinin nasibini almas\u0131 gibi biz developerlarda kendi pay\u0131m\u0131za d\u00fc\u015feni almaktay\u0131z. \u0130\u015fte bu makalemizde SQL Server veritaban\u0131 y\u00f6netim sisteminin g\u00fcncel 2016 versiyonunun ilk pay\u0131n\u0131 konu\u015fuyor olaca\u011f\u0131z, <em><strong>Dynamic Data Masking<\/strong><\/em> \u00f6zelli\u011fini&#8230;<\/p>\n<h3>Dynamic Data Masking Nedir?<\/h3>\n<p>Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi dinamik veri maskeleme sistemidir. Veritaban\u0131m\u0131zda, ili\u015fkisel\u00a0tablolar\u0131m\u0131zda tuttu\u011fumuz verileri tararken g\u00f6sterilmesi istenen bilgiler d\u0131\u015f\u0131ndakileri maskeleme \u00f6zelli\u011fidir. Tabi ki de burada tablodaki bilgiden kast\u0131m\u0131z kolonlard\u0131r. Bir tablo create yahut alter i\u015flemine tabi tutulurken hangi kolonun gizlenece\u011fini\u00a0art\u0131k\u00a0Dynamic Data Masking \u00f6zelli\u011fiyle i\u015faretleyebiliyoruz.<\/p>\n<p>Konumuzu pratik olarak desteklemeden \u00f6nce veri maskeleme kavram\u0131n\u0131 biraz daha a\u00e7acak, ayriyetten di\u011fer bilmemiz gerekenler \u00fczerinde teorik konu\u015faca\u011f\u0131z&#8230;<\/p>\n<p>\u00d6ncelikle maskeleme kavram\u0131n\u0131n detaylar\u0131na girelim. Elimizdeki bir veriyi maskelemeden kast\u0131m\u0131z, verinin orjinal halini, fiziksel yap\u0131s\u0131n\u0131 de\u011fi\u015ftirmeden kullan\u0131c\u0131ya bir k\u0131sm\u0131n\u0131 g\u00f6stermek yahut gizlemektir. D\u00fc\u015f\u00fcn\u00fcn ki, bir al\u0131\u015fveri\u015f sitesinde kay\u0131tl\u0131 bir kullan\u0131c\u0131n\u0131n her bilgisine<em>(T.C. Kimlik No, Kredi Kart\u0131 Numaras\u0131, Telefon No vs.)<\/em> kritik g\u00f6revler d\u0131\u015f\u0131ndaki personellerin ula\u015fmas\u0131 ne kadar istenebilir? B\u00f6yle durumda kullan\u0131c\u0131n\u0131n \u00f6zelini te\u015fkil edecek bilgiler yetkisi olmayan kullan\u0131c\u0131lara g\u00f6sterilmemektedir. \u0130\u015fte burada yetkisi olmayan kullan\u0131c\u0131ya kar\u015f\u0131 yap\u0131land\u0131r\u0131lm\u0131\u015f k\u0131s\u0131tlama, asl\u0131nda ilgili verilerin yoklu\u011fu anlam\u0131na gelmemekte, bilakis varlar ama gizlenmekte yani haz\u0131r konusuyken maskelenmektedirler.<\/p>\n<p>Hat\u0131rlarsan\u0131z bu g\u00fcne kadar veritaban\u0131 y\u00f6netimlerinde yetkiye sahip olmayan ki\u015filerden gizlenecek verileri farkl\u0131 bir strateji izleyerek gizliyorduk. Yetkisiz ki\u015fiye \u00f6zel bir &#8220;View&#8221; olu\u015fturuyor, olu\u015fturulan bu view i\u00e7erisinde ilgili tablonun gizli olmayan kolonlar\u0131 yerle\u015ftiriliyor ve \u00e7al\u0131\u015fmay\u0131 ger\u00e7ekle\u015ftirecek yetkisiz kullan\u0131c\u0131ya bu view \u00fczerinde sorgulama hakk\u0131 veriyorduk. \u0130\u015fte bu uzun ve zahmetli strateji yerine art\u0131k SQL Server 2016 ile gelen\u00a0Dynamic Data Masking \u00f6zelli\u011fi ile hi\u00e7 yorulmadan ayn\u0131 i\u015fi ger\u00e7ekle\u015ftirebiliyoruz.<\/p>\n<p>Veri maskeleme i\u015flemi bir nevi g\u00fcvenlik \u00f6nlemi olsada bir ba\u015fka a\u00e7\u0131dan da amaca d\u00f6n\u00fck sorgular\u0131n ger\u00e7ekle\u015ftirilmesini sa\u011flamakt\u0131r. Yani, yetkilendirme s\u0131n\u0131r\u0131 olan yahut sadece ilgili tablo \u00fczerinde select yetkisine sahip olan bir kullan\u0131c\u0131n\u0131n X ile Y bilgilerine eri\u015fmesi yeterli lakin Z&#8217;ye ihtiyac\u0131 yoksa i\u015fte veri maskeleme ile bu kullan\u0131c\u0131ya sadece X ve Y kolonlar\u0131ndaki veriler g\u00f6sterilecek, Z kolonu gizlenecektir. Bu \u015fekilde amaca d\u00f6n\u00fck, net ve ki\u015fisine g\u00f6re laz\u0131m ve yeterli olan sorgularda \u00e7al\u0131\u015f\u0131lm\u0131\u015f olunacakt\u0131r.<\/p>\n<p>\u015eimdi yava\u015f\u00e7a pratik \u00e7al\u0131\u015fmaya yakla\u015f\u0131rken\u00a0Dynamic Data Masking \u00f6zelli\u011fiyle ilgili fonksiyonel parametrelerine de\u011finmekte fayda vard\u0131r.<\/p>\n<p>Dynamic Data Masking; <em><strong>default<\/strong><\/em>, <em><strong>email<\/strong><\/em>, ve <em><strong>partial<\/strong> <\/em>olmak \u00fczere \u00fc\u00e7 adet fonksiyonel parametre e\u015fli\u011finde \u00e7al\u0131\u015fmaktad\u0131r.<\/p>\n<ul>\n<li><em><strong>default<\/strong><\/em><br \/>\nBu fonksiyonel parametre ile eldeki metinsel veriler XXXX format\u0131nda gizlenebilmektedir. E\u011fer verinin boyutu 4 karakterden daha az ise karakter say\u0131s\u0131 kadar X kullan\u0131lmakta, veri boyutu 4&#8217;\u00fc a\u015ft\u0131\u011f\u0131 vakit maximum 4 adet X kullan\u0131lmaktad\u0131r. char, nchar, varchar, nvarchar vs. gibi metinsel tipleri desteklemektedir.Say\u0131sal veriler \u00fczerinde 0, tarihsel veriler \u00fczerinde 01.01.2000 00:00:00.0000000 de\u011ferleri kullan\u0131lmaktad\u0131r.E\u011fer maskelenen veri binary veri ise 0 de\u011ferinin ASCII kar\u015f\u0131l\u0131\u011f\u0131n\u0131 kullanmaktad\u0131r.<\/li>\n<li><em><strong>email<\/strong><\/em><br \/>\nE-Maillerde maskeleme i\u015flemini kullanaca\u011f\u0131m\u0131z fonksiyonel parametremizdir.<br \/>\n\u00d6rne\u011fin; &#8220;gncy@gencayyildiz.com&#8221; mail adresini &#8220;gXXX@XXXX.com&#8221; format\u0131nda maskelemektedir.<\/li>\n<li><em><strong>partial<\/strong><\/em><br \/>\nDi\u011fer iki formata kar\u015f\u0131l\u0131k kendi \u00f6zg\u00fcn format\u0131m\u0131z\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flayan fonksiyonel parametredir.<br \/>\nA\u015fa\u011f\u0131daki prototipi inceleyiniz.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nPartial(3, H, 2)\r\n<\/pre>\n<p>Yukar\u0131daki prototip kullan\u0131m\u0131nda fonksiyonumuza verdi\u011fimiz parametreler soldan sa\u011fa s\u0131ras\u0131yla; ilk 3 karakterin gizlenmeyece\u011fini, maskelemede H karakterinin kullan\u0131laca\u011f\u0131n\u0131 ve son 2 karakterin de gizlenmeyece\u011fini belirlemi\u015f oluyoruz.<\/li>\n<\/ul>\n<p>Art\u0131k konumuzla alakal\u0131 vermemiz gereken teorik bilgimiz kalmad\u0131\u011f\u0131na g\u00f6re pratik olarak makalemize devam edebiliriz.<\/p>\n<p>\u00d6ncelikle yukar\u0131larda bahsetti\u011fim gibi\u00a0Dynamic Data Masking \u00f6zelli\u011fini yeni olu\u015fturaca\u011f\u0131m\u0131z yahut var olan tablolar \u00fczerinde uygulayabilece\u011fimizi tekrardan hat\u0131rlat\u0131r\u0131m.<\/p>\n<p>\u00d6ncelikle Dynamic Data Masking \u00f6zelli\u011fini bir kolona a\u015fa\u011f\u0131daki prototipte oldu\u011fu gibi uygulamaktay\u0131z.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nCREATE TABLE &#x5B;TABLO ADI]\r\n(\r\n\t&#x5B;KOLON ADI] &#x5B;KOLON T\u0130P\u0130] MASKED WITH (FUNCTION = 'default()')\r\n)\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi kolon ad\u0131 ve tipini belirledikten sonra &#8220;<em>MASKED WITH (FUNCTION = &#8216;default()&#8217;)<\/em>&#8221; komutu ile ilgili kolonu sadece select yetkisine sahip ki\u015fiye kar\u015f\u0131 maskelemi\u015f oluyoruz.<\/p>\n<p>Hadi gelin bu i\u015flemi tam ger\u00e7ekle\u015ftirelim.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nCREATE TABLE OGRENCILER\r\n(\r\n\tOgrenciID INT PRIMARY KEY IDENTITY,\r\n\tAdi NVARCHAR(10) MASKED WITH (FUNCTION = 'default()') NULL,\r\n\tSoyAdi NVARCHAR(10) MASKED WITH (FUNCTION = 'default()') NULL,\r\n\tMemleketi NVARCHAR(10) MASKED WITH (FUNCTION = 'default()') NULL,\r\n\tTCNo int MASKED WITH (FUNCTION = 'default()') NULL,\r\n\tSube NVARCHAR(1) MASKED WITH (FUNCTION = 'default()') NULL,\r\n\tEMail NVARCHAR(MAX) MASKED WITH (FUNCTION = 'email()') NULL,\r\n\tHakkinda NVARCHAR(MAX) MASKED WITH (FUNCTION = 'partial(3, &quot;H&quot;, 2)') NULL,\r\n\tDogumTarihi DATETIME MASKED WITH (FUNCTION = 'default()') NULL\r\n)\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bu \u015fekilde bir tablo tasarlad\u0131m ve m\u00fcmk\u00fcn mertebe t\u00fcm fonksiyonel parametrelerimizi kullanmaya \u00e7al\u0131\u015ft\u0131m. \u015eimdi tablomuzda \u00e7al\u0131\u015fmam\u0131z\u0131n neticesini g\u00f6rebilmemiz i\u00e7in a\u015fa\u011f\u0131daki \u00f6\u011frencileri ekleyelim.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nINSERT OGRENCILER VALUES('Gen\u00e7ay', 'Y\u0131ld\u0131z', 'Artvin', 1234, 'A', 'gncy@gencayyildiz.com', 'T\u00fcrk Milletine Can\u0131m Feda Olsun...', '1992-09-05')\r\nINSERT OGRENCILER VALUES('Gizem', 'I\u015f\u0131k', 'Malatya', 1234, 'B', 'gizem@isik.com', 'Ahh O G\u00f6zlerinn...', '1975-09-05')\r\n<\/pre>\n<p>\u015eimdi bir select sorgusu \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nSELECT * FROM OGRENCILER\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-300x32.png\" alt=\"SQL Server 2016 - Dynamic Data Masking\" width=\"300\" height=\"32\" class=\"aligncenter size-medium wp-image-4910\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-300x32.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-768x83.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking.png 796w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Sadece select sorgusuyla yetkilendirilmi\u015f bir kullan\u0131c\u0131 ayarlamad\u0131\u011f\u0131m\u0131zdan dolay\u0131 maskelenmemi\u015f taze verilerle kar\u015f\u0131la\u015ft\u0131k.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nCREATE USER YETKILIUSER WITHOUT LOGIN\r\nGO\r\nGRANT SELECT ON OGRENCILER TO YETKILIUSER\r\n<\/pre>\n<p>Yukar\u0131daki gibi istedi\u011finiz isimde bir kullan\u0131c\u0131 ayarlayabilir ve &#8220;OGRENCILER&#8221; tablosuna \u00f6zel o kullan\u0131c\u0131ya sadece select yetkilendirmesi yapabilirsiniz.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nEXECUTE AS USER = 'YETKILIUSER'\r\n\r\nSELECT * FROM OGRENCILER\r\n<\/pre>\n<p>Bu \u015fekilde de yetkilendirme yapt\u0131\u011f\u0131m\u0131z kullan\u0131c\u0131 ile tekrardan tablomuzu sorgulat\u0131yoruz ve a\u015fa\u011f\u0131daki sonucu elde ediyoruz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-1-300x32.png\" alt=\"SQL Server 2016 - Dynamic Data Masking\" width=\"300\" height=\"32\" class=\"aligncenter size-medium wp-image-4914\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-1-300x32.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-1.png 674w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u0130\u015fte g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi verilerimiz ayarlad\u0131\u011f\u0131m\u0131z \u015fekilde maskelendirilerek gelmektedir.<\/p>\n<p>\u015eimdi s\u0131ra maskeleme i\u015flemi i\u00e7in bir tabloyu g\u00fcncellemeye geldi.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nALTER TABLE OGRENCILER\r\nADD EKKOLON NVARCHAR(MAX) MASKED WITH (FUNCTION = 'partial(3, &quot;XXX&quot;, 0)')\r\n<\/pre>\n<p>&#8220;OGRENCILER&#8221; tablosuna &#8220;EKKOLON&#8221; isimli bir kolon eklenmekte ve kendi format\u0131m\u0131zda maskeleme uygulanmaktad\u0131r.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nALTER TABLE OGRENCILER\r\nALTER COLUMN EKKOLON ADD MASKED WITH (FUNCTION = 'partial(2, &quot;AAA&quot;, 4)')\r\n<\/pre>\n<p>Burdada var olan bir kolon \u00fczerinde maskeleme i\u015flemi yapm\u0131\u015f olduk. Sorguya &#8220;<strong><em>ADD<\/em><\/strong>&#8221; komutunun eklendi\u011fine dikkatinizi \u00e7ekerim.<\/p>\n<p>\u015eimdi yeniden sorgulama yapal\u0131m ve gelen sonucu inceleyelim.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nEXECUTE AS USER = 'YETKILIUSER'\r\nSELECT * FROM OGRENCILER\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-2-300x40.png\" alt=\"SQL Server 2016 - Dynamic Data Masking\" width=\"300\" height=\"40\" class=\"aligncenter size-medium wp-image-4918\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-2-300x40.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-2.png 707w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u015eimdide var olan maskeyi kald\u0131ral\u0131m.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nALTER TABLE OGRENCILER\r\nALTER COLUMN EKKOLON DROP MASKED\r\n<\/pre>\n<p>Evet, \u015fimdide tekrardan sorgumuzun sonucuna bakal\u0131m.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nEXECUTE AS USER = 'YETKILIUSER'\r\nSELECT * FROM OGRENCILER\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-3-300x35.png\" alt=\"SQL Server 2016 - Dynamic Data Masking\" width=\"300\" height=\"35\" class=\"aligncenter size-medium wp-image-4920\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-3-300x35.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-3.png 714w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi kolonumuzdan maskelemeyi bu \u015fekilde kald\u0131rm\u0131\u015f bulunmaktay\u0131z. Tabi burada yapm\u0131\u015f oldu\u011fumuz i\u015flem neticesinde t\u00fcm kullan\u0131c\u0131lara maskeleme kald\u0131r\u0131lm\u0131\u015ft\u0131r. E\u011fer ki, maskelemenin istedi\u011finiz kullan\u0131c\u0131larda pasifize edilmesini istiyorsan\u0131z ilgili kullan\u0131c\u0131ya UNMASKED yetkisini vermelisiniz. Bu i\u015flemide bildi\u011fimiz yetkilendirme i\u015flemiyle ger\u00e7ekle\u015ftirebiliyoruz.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nGRANT UNMASK TO YETKILIUSER;\r\n\r\nEXECUTE AS USER = 'YETKILIUSER'\r\nSELECT * FROM OGRENCILER\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-4-300x21.png\" alt=\"SQL Server 2016 - Dynamic Data Masking\" width=\"300\" height=\"21\" class=\"aligncenter size-medium wp-image-4922\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-4-300x21.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-4-768x53.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/09\/SQL-Server-2016-Dynamic-Data-Masking-4.png 882w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&#8220;YETKILIUSER&#8221; isimli kullan\u0131c\u0131ya verilen UNMASK yetkisi sayesinde g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi kullan\u0131c\u0131n\u0131n select sorgusu neticeleri maskelemeye tabii tutulmamaktad\u0131r.<\/p>\n<p>SQL Server 2016&#8217;n\u0131n yeniliklerinden Dynamic Data Masking \u00f6zelli\u011fini yeterince detayland\u0131rd\u0131\u011f\u0131m\u0131z\u0131 umuyorum. Di\u011fer yeniliklerde g\u00f6r\u00fc\u015fmek \u00fczere diyor, bol bol faydalanman\u0131z\u0131 diliyorum&#8230;<\/p>\n<p>Esen kal\u0131n&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Biliyorsunuz ki, yaz\u0131l\u0131m d\u00fcnyas\u0131 her ge\u00e7en g\u00fcn\u00fc bir sonraki g\u00fcn\u00fcn h\u0131z\u0131nda ya\u015famay\u0131 ve ya\u015fatmay\u0131 seven bir d\u00fcnyad\u0131r. Do\u011fal olarak bu h\u0131zdan teknolojinin nasibini almas\u0131 gibi biz developerlarda kendi pay\u0131m\u0131za d\u00fc\u015feni almaktay\u0131z. \u0130\u015fte bu&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3415,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1412],"tags":[1417,111,1418,1414,1415,1416,1413,1419,1420],"class_list":["post-4892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sql-server-2016","tag-alter-masked","tag-default","tag-drop-masked","tag-dynamic-data-masking","tag-email","tag-partial","tag-sql-server-2016","tag-sql-server-masked-drop","tag-unmasked"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=4892"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3415"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}