{"id":607,"date":"2016-06-21T15:26:38","date_gmt":"2016-06-21T15:26:38","guid":{"rendered":"http:\/\/www.tiagoneves.net\/blog\/?p=607"},"modified":"2018-07-13T15:41:18","modified_gmt":"2018-07-13T15:41:18","slug":"sql-server-2016-always-encrypted","status":"publish","type":"post","link":"https:\/\/www.tiagoneves.net\/blog\/sql-server-2016-always-encrypted\/","title":{"rendered":"SQL Server 2016 &#8211; Always Encrypted"},"content":{"rendered":"<p style=\"text-align: justify;\">Ol\u00e1 pessoal, tudo certo?<\/p>\n<p style=\"text-align: justify;\">Vou aproveitar o lan\u00e7amento oficial do SQL Server 2016, e vou come\u00e7ar a fazer uma serie de post sobre as novas features disponibilizadas, neste primeiro post da s\u00e9rie vou abordar o Always Encrypted uma feature de seguran\u00e7a que achei muito interessante.<\/p>\n<p style=\"text-align: justify;\">A feature Always Encrypted\u00a0 permite proteger os dados sens\u00edveis de qualquer acesso n\u00e3o autorizado nem mesmo o DBA consegue visualizar as informa\u00e7\u00f5es, \u00e9 uma feature de criptografia do lado da aplica\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\">Os dados quando s\u00e3o escritos no banco de dados s\u00e3o criptografados, e descriptografados para o cliente quando o acesso \u00e9 realizado por uma aplica\u00e7\u00e3o autorizada. \u00c9 importante saber que o Always Encrypted \u00e9 diferente do TDE (Transparent Data Encryption) que criptografa os dados no disco, mas permite que os dados sejam lidos por qualquer aplicativo que consulta os dados.<\/p>\n<p style=\"text-align: justify;\"><strong>Driver suportados:<\/strong><\/p>\n<p style=\"text-align: justify;\">A Microsoft suportou os driver .NET Framework Data Provider for SQL Server, para instalar \u00e9 necess\u00e1rio atualizar o .Net Framework para o .NET Framework 4.6, Microsoft JDBC 6.0 e o ODBC Microsoft 13.<\/p>\n<p style=\"text-align: justify;\">O driver do banco de dados Always Encrypted\u00a0se conecta ao banco de dados usando uma chave de criptografia, os dados s\u00f3 podem ser descriptografado usando a chave de criptografia, outras aplica\u00e7\u00f5es ou consultas de dados pode recuperar os valores criptografados, mas esses valores n\u00e3o ser\u00e1 descriptografado e, portanto, permanecer\u00e1 seguro.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/05\/19.jpg\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-111\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/05\/19.jpg?resize=319%2C354\" alt=\"1\" width=\"319\" height=\"354\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/05\/19.jpg?w=319&amp;ssl=1 319w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2015\/05\/19.jpg?resize=270%2C300&amp;ssl=1 270w\" sizes=\"auto, (max-width: 319px) 100vw, 319px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><strong>Tipos de criptografia suportados:<\/strong><\/p>\n<p style=\"text-align: justify;\">Always Encrypted supporta dois tipos de criptografia, randomized encryption e deterministic encryption<\/p>\n<p style=\"text-align: justify;\"><strong><em>Randomized encryption &#8211;<\/em><\/strong><em>\u00a0 <\/em>Como o nome diz &#8220;Random&#8221;, ele gera um valor diferente para cada execu\u00e7\u00e3o, apesar de ser um modo mais seguro, ela n\u00e3o suporta pesquisa de igualdade e indexa\u00e7\u00e3o. Voc\u00ea deve usar o tipo de criptografia randomizados para colunas usadas apenas para fins de exibi\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\"><em><strong>Deterministic Encryption &#8211; <\/strong><\/em>Ao contrario do tipo randomized encryption, o deterministic encryption sempre retorna o mesmo valor para codificado para qualquer pesquisa. A utiliza\u00e7\u00e3o do deterministic encryption permite agrupar, filtrar por igualdade e fazer consulta utilizando join. As colunas do tipo texto (varchar, char) devem ser criadas com o collation\u00a0 Latin1_General_BIN2.<\/p>\n<p style=\"text-align: justify;\">Utilize deterministic encryption para colunas que ser\u00e3o usados como par\u00e2metros de busca ou de agrupamento, por exemplo, CPF, RG.<\/p>\n<p style=\"text-align: justify;\"><strong>Criando Column Master Key e Column Encryption Key<\/strong><\/p>\n<p style=\"text-align: justify;\">Para come\u00e7ar a utilizar o Always Encrypted, primeiro precisamos criar a Master key e depois chave de criptografia utilizando a Master Key.<\/p>\n<p style=\"text-align: justify;\"><em>Column Master Key<\/em><\/p>\n<ul>\n<li style=\"text-align: justify;\">Navegar na Database =&gt; Security =&gt; Always Encrypted Keys =&gt; New Column Master Keys<\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Create_Column_Master_Keys.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-609\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Create_Column_Master_Keys.png?resize=381%2C581\" alt=\"SQLServer2016_AlwaysEncrypted_Create_Column_Master_Keys\" width=\"381\" height=\"581\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Create_Column_Master_Keys.png?w=381&amp;ssl=1 381w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Create_Column_Master_Keys.png?resize=197%2C300&amp;ssl=1 197w\" sizes=\"auto, (max-width: 381px) 100vw, 381px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Gerar a nova chave.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Master_Keys.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-610\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Master_Keys.png?resize=678%2C415\" alt=\"SQLServer2016_AlwaysEncrypted_New_Column_Master_Keys\" width=\"678\" height=\"415\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Master_Keys.png?w=1033&amp;ssl=1 1033w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Master_Keys.png?resize=300%2C184&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Master_Keys.png?resize=768%2C470&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Master_Keys.png?resize=1024%2C626&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Ap\u00f3s criar a chave, voc\u00ea deve gerar o certificado e aplicar nos dispositivos autorizados.<\/p>\n<p style=\"text-align: justify;\">Para exportar o certificado utilizaremos o Power Shell.<\/p>\n<pre class=\"lang:ps decode:true \">-- O valor da chave (E4200028AB17692F5B7B934C4FB56BC633D2C5E2) foi o valor gerado ao criar a chave na coluna tumbiprint da imagem anterior \r\n\r\n$cert = (Get-ChildItem -Path cert:\\CurrentUser\/My\/E4200028AB17692F5B7B934C4FB56BC633D2C5E2)\r\n\r\nExport-Certificate -Cert $cert -FilePath C:\\Temp\\Certificado\\SQL2016.sst -Type SST<\/pre>\n<p style=\"text-align: justify;\">Para mais informa\u00e7\u00f5es de como exportar o certificado gerado voc\u00ea pode ver nos links abaixo:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Windows 7 and Windows Server 2008 R2: <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/cc730988.aspx\">https:\/\/technet.microsoft.com\/en-us\/library\/cc730988.aspx<\/a><\/li>\n<li style=\"text-align: justify;\">Windows 8 and Windows Server 2012: <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/hh848628(v=wps.620).aspx\">https:\/\/technet.microsoft.com\/en-us\/library\/hh848628(v=wps.620).aspx<\/a><\/li>\n<li style=\"text-align: justify;\">Windows 8.1 and Windows Server 2012 R2: <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/hh848628(v=wps.630).aspx\">https:\/\/technet.microsoft.com\/en-us\/library\/hh848628(v=wps.630).aspx<\/a><\/li>\n<li style=\"text-align: justify;\">Windows 10 and Windows Server 2016: <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/hh848628(v=wps.640).aspx\">https:\/\/technet.microsoft.com\/en-us\/library\/hh848628(v=wps.640).aspx<\/a><\/li>\n<\/ul>\n<p>Ap\u00f3s exportar o certificado, voc\u00ea tem que importar o certificado para as aplica\u00e7\u00f5es e dispositivos autorizados.<\/p>\n<pre class=\"lang:ps decode:true \">$file = ( Get-ChildItem -Path C:\\Temp\\Certificado\\SQL2016.sst )\r\n\r\n$file | Import-Certificate -CertStoreLocation cert:\\CurrentUser\\Root<\/pre>\n<p>Para mais informa\u00e7\u00f5es de como importar o certificado voc\u00ea pode ver nos links abaixo:<\/p>\n<ul>\n<li>Windows 7 and Windows Server 2008 R2: <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/cc754489.aspx\">https:\/\/technet.microsoft.com\/en-us\/library\/cc754489.aspx<\/a><\/li>\n<li>Windows 8 and Windows Server 2012:<a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/hh848630(v=wps.620).aspx\"> https:\/\/technet.microsoft.com\/en-us\/library\/hh848630(v=wps.620).aspx<\/a><\/li>\n<li>Windows 10 and Windows Server 2016: <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/hh848630(v=wps.640).aspx\">https:\/\/technet.microsoft.com\/en-us\/library\/hh848630(v=wps.640).aspx<\/a><\/li>\n<li>Windows 8.1 and Windows Server 2012 R2:<a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/hh848630(v=wps.630).aspx\"> https:\/\/technet.microsoft.com\/en-us\/library\/hh848630(v=wps.630).aspx<\/a><\/li>\n<\/ul>\n<p><em>Column Encryption Key<\/em><\/p>\n<p>Ap\u00f3s gerar a Column Master Key, devemos gerar a Column Encryption Key.<\/p>\n<ul>\n<li>Navegar na Database =&gt; Security =&gt; Always Encrypted Keys =&gt; New Column Encrytion Keys<\/li>\n<\/ul>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Create_Column_Column_Keys.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-613\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Create_Column_Column_Keys.png?resize=381%2C581\" alt=\"SQLServer2016_AlwaysEncrypted_Create_Column_Column_Keys\" width=\"381\" height=\"581\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Create_Column_Column_Keys.png?w=381&amp;ssl=1 381w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Create_Column_Column_Keys.png?resize=197%2C300&amp;ssl=1 197w\" sizes=\"auto, (max-width: 381px) 100vw, 381px\" \/><\/a><\/p>\n<p>De um nome para sua chave, e selecione a Column Master Key que voc\u00ea deseja utilizar, no caso vamos utilizar a chave criada no step anterior.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Encryption_Keys.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-614\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Encryption_Keys.png?resize=678%2C609\" alt=\"SQLServer2016_AlwaysEncrypted_New_Column_Encryption_Keys\" width=\"678\" height=\"609\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Encryption_Keys.png?w=704&amp;ssl=1 704w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_New_Column_Encryption_Keys.png?resize=300%2C269&amp;ssl=1 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p><strong>Criando uma tabela com Always Encrypted<\/strong><\/p>\n<p>Depois de criar as chaves, podemos criar uma tabela e criptografar a coluna. A sintaxe de cria\u00e7\u00e3o de tabela \u00e9 a mesma, porem, precisamos adicionar alguns par\u00e2metros na coluna que vamos criptografar os dados.<\/p>\n<p>Se a coluna for do tipo varchar precisamos colocar ela com a colattion Latin1_General_BIN2, depois informamos qual \u00e9 o tipo de criptografia que vamos utilizar se \u00e9 DETERMINISTIC ou RANDOMIZED, o algoritmo de criptografia padr\u00e3o do SQL Server e a informar qual \u00e9 a chave que criamos.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true\">CREATE TABLE dbo.[Employee](\r\n\t[BusinessEntityID] [int] NOT NULL,\r\n\t[NationalIDNumber] [nvarchar](15) COLLATE Latin1_General_BIN2\r\n\tENCRYPTED WITH (ENCRYPTION_TYPE = DETERMINISTIC,\r\n\tALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',\r\n\tCOLUMN_ENCRYPTION_KEY = Demo1) NOT NULL,\r\n\t[LoginID] [nvarchar](256) NOT NULL,\r\n\t[OrganizationNode] [hierarchyid] NULL,\r\n\t[OrganizationLevel]  AS ([OrganizationNode].[GetLevel]()),\r\n\t[JobTitle] [nvarchar](50) NOT NULL,\r\n\t[BirthDate] [DATE]\r\n\tENCRYPTED WITH (ENCRYPTION_TYPE = RANDOMIZED,\r\n\tALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',\r\n\tCOLUMN_ENCRYPTION_KEY = Demo1) NOT NULL,\r\n\t[MaritalStatus] [nchar](1) NOT NULL,\r\n\t[Gender] [nchar](1) NOT NULL,\r\n\t[HireDate] [date] NOT NULL,\r\n\t[SalariedFlag] [dbo].[Flag] NOT NULL,\r\n\t[VacationHours] [smallint] NOT NULL,\r\n\t[SickLeaveHours] [smallint] NOT NULL,\r\n\t[CurrentFlag] [dbo].[Flag] NOT NULL,\r\n\t[rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL,\r\n\t[ModifiedDate] [datetime] NOT NULL,\r\n CONSTRAINT [PK_Employee_BusinessEntityID] PRIMARY KEY CLUSTERED \r\n(\r\n\t[BusinessEntityID] ASC\r\n)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]\r\n) ON [PRIMARY]\r\n\r\nGO\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>Importando dados de uma tabela normal para uma tabela criptografa<\/strong><\/p>\n<p style=\"text-align: justify;\">Como eu n\u00e3o criei uma aplica\u00e7\u00e3o para inserir os dados, vou demonstrar como exportar os dados de uma tabela normal, para a tabela com coluna criptografa.<\/p>\n<p style=\"text-align: justify;\">Bot\u00e3o direito sobre a database =&gt; Task = &gt; Import Data<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-619\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data-245x300.png?resize=566%2C693\" alt=\"SQLServer2016_AlwaysEncrypted_Import_Data\" width=\"566\" height=\"693\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data.png?resize=245%2C300&amp;ssl=1 245w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data.png?w=733&amp;ssl=1 733w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Selecione qual \u00e9 o driver que voc\u00ea vai utilizar para conectar na origem, com vamos conectar no pr\u00f3prio SQL Server vamos utilizar o SQL Server Native Client.<\/p>\n<p style=\"text-align: justify;\">Colocamos o nome da inst\u00e2ncia e o nome da base.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Source.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-620\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Source.png?resize=636%2C580\" alt=\"SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Source\" width=\"636\" height=\"580\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Source.png?w=636&amp;ssl=1 636w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Source.png?resize=300%2C274&amp;ssl=1 300w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Selecionamos o destino, como foi dito como vamos utilizar uma tabela com coluna criptografada, precisamos utilizar uma conex\u00e3o .Net 4.6, ent\u00e3o selecionamos o driver &#8220;.Net Framework Data Provider for SqlServer&#8221;\u00a0 =&gt; habilitamos a op\u00e7\u00e3o &#8220;Column Encryption Setting&#8221; =&gt; Marcamos &#8220;Integrated Security = TRUE&#8221; =&gt; Informamos o Data Source &#8220;GDSQLT52\\SQL2016&#8243; =&gt; Informamos o nome da base de dados &#8221; AventureWorks&#8221;.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Destination.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-621\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Destination.png?resize=678%2C638\" alt=\"SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Destination\" width=\"678\" height=\"638\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Destination.png?w=733&amp;ssl=1 733w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Destination.png?resize=300%2C282&amp;ssl=1 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Selecionamos as tabelas de origem e destino.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Table.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-622\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Table.png?resize=678%2C638\" alt=\"SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Table\" width=\"678\" height=\"638\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Table.png?w=733&amp;ssl=1 733w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Choose_Table.png?resize=300%2C282&amp;ssl=1 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Informamos se vamos escrever uma query ou se vamos importar todos os dados da tabela.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Copy_Table.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-623\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Copy_Table.png?resize=636%2C580\" alt=\"SQLServer2016_AlwaysEncrypted_Import_Data_Copy_Table\" width=\"636\" height=\"580\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Copy_Table.png?w=636&amp;ssl=1 636w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Copy_Table.png?resize=300%2C274&amp;ssl=1 300w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Informa\u00e7\u00f5es de resumo do que vai ser realizado.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Mapping_Table.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-624\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Mapping_Table.png?resize=636%2C580\" alt=\"SQLServer2016_AlwaysEncrypted_Import_Data_Mapping_Table\" width=\"636\" height=\"580\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Mapping_Table.png?w=636&amp;ssl=1 636w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Mapping_Table.png?resize=300%2C274&amp;ssl=1 300w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Resumo da importa\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Result.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-625\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Result.png?resize=636%2C580\" alt=\"SQLServer2016_AlwaysEncrypted_Import_Data_Result\" width=\"636\" height=\"580\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Result.png?w=636&amp;ssl=1 636w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Import_Data_Result.png?resize=300%2C274&amp;ssl=1 300w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><strong>Visualizando os dados criptografados<\/strong><\/p>\n<p style=\"text-align: justify;\">Para visualizar os dados basta fazer um select normal da tabela criptografada.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true \">SELECT\r\n    *\r\nFROM\r\n    AdventureWorks.dbo.Employee;<\/pre>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_Not_Certificate.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-626\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_Not_Certificate.png?resize=678%2C233\" alt=\"SQLServer2016_AlwaysEncrypted_Result_Select_Not_Certificate\" width=\"678\" height=\"233\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_Not_Certificate.png?w=1811&amp;ssl=1 1811w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_Not_Certificate.png?resize=300%2C103&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_Not_Certificate.png?resize=768%2C264&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_Not_Certificate.png?resize=1024%2C352&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_Not_Certificate.png?w=1356&amp;ssl=1 1356w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Como podemos ver as colunas &#8220;NationalIDNumber&#8221; e &#8220;BirthDate&#8221; retornaram as informa\u00e7\u00f5es criptografadas.<\/p>\n<p style=\"text-align: justify;\"><strong>Visualizando os dados descriptografados<\/strong><\/p>\n<p style=\"text-align: justify;\">Para visualizar os dados sem criptografia o primeiro passo \u00e9 importar o certificado na sua maquina, servidor de aplica\u00e7\u00e3o e etc&#8230; isso j\u00e1 foi demonstrado no inicio do post.<\/p>\n<p style=\"text-align: justify;\">Partindo que o certificado est\u00e1 instalado na sua maquina ou servidor, agora voc\u00ea precisa adicionar o par\u00e2metro &#8220;Column Encryption Setting = enabled;&#8221; na string de conex\u00e3o da aplica\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\">Para visualizar os dados no management studio, voc\u00ea tem que acionar o mesmo par\u00e2metro na propriedades avan\u00e7adas.<\/p>\n<p style=\"text-align: justify;\">Na tela de autentica\u00e7\u00e3o selecione &#8220;Options&#8221;<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-627\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS.png?resize=491%2C322\" alt=\"SQLServer2016_AlwaysEncrypted_Connect_SSMS\" width=\"491\" height=\"322\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS.png?w=491&amp;ssl=1 491w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS.png?resize=300%2C197&amp;ssl=1 300w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Selecione a guia &#8220;Additional Connection Parameters&#8221;<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-628\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter.png?resize=491%2C527\" alt=\"SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter\" width=\"491\" height=\"527\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter.png?w=491&amp;ssl=1 491w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter.png?resize=280%2C300&amp;ssl=1 280w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Adicione o par\u00e2metro &#8220;Column Encryption Setting = enabled;&#8221;<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter_Setinfo.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-629\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter_Setinfo.png?resize=491%2C527\" alt=\"SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter_Setinfo\" width=\"491\" height=\"527\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter_Setinfo.png?w=491&amp;ssl=1 491w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Connect_SSMS_Additional_Parameter_Setinfo.png?resize=280%2C300&amp;ssl=1 280w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Depois de conectado basta executar a consulta que as colunas &#8220;NationalIDNumber&#8221; e &#8220;BirthDate&#8221;\u00a0 estar\u00e3o descriptografadas.<\/p>\n<pre class=\"theme:ssms2012 lang:tsql decode:true \">SELECT\r\n    *\r\nFROM\r\n    AdventureWorks.dbo.Employee;<\/pre>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_With_Certificate.png\" rel=\"lightbox[607]\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-630\" src=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_With_Certificate.png?resize=678%2C233\" alt=\"SQLServer2016_AlwaysEncrypted_Result_Select_With_Certificate\" width=\"678\" height=\"233\" srcset=\"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_With_Certificate.png?w=1811&amp;ssl=1 1811w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_With_Certificate.png?resize=300%2C103&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_With_Certificate.png?resize=768%2C264&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_With_Certificate.png?resize=1024%2C352&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2016\/06\/SQLServer2016_AlwaysEncrypted_Result_Select_With_Certificate.png?w=1356&amp;ssl=1 1356w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><strong>Restri\u00e7\u00f5es do Always Encrypted<\/strong><\/p>\n<p style=\"text-align: justify;\">Como nem tudo s\u00e3o flores o Always Encrypted tem suas restri\u00e7\u00f5es e desvantagens, os tipos de dados\u00a0xml, timestamp\/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias e user defined-types n\u00e3o s\u00e3o suportados para criptografia.<\/p>\n<ul>\n<li style=\"text-align: justify;\">String (varchar, char, etc.) columns somente com bin2 collations<\/li>\n<li style=\"text-align: justify;\">Colunas computadas n\u00e3o s\u00e3o suportadas<\/li>\n<li style=\"text-align: justify;\">Primary key n\u00e3o podem utilizar criptografia do tipo randomized encryption<\/li>\n<li style=\"text-align: justify;\">N\u00e3o podem ser replicadas<\/li>\n<li style=\"text-align: justify;\">N\u00e3o suportam Linked Server<\/li>\n<\/ul>\n<p>No channel 9 tem um <a href=\"https:\/\/channel9.msdn.com\/shows\/data-exposed\/getting-started-with-always-encrypted-with-ssms\">v\u00eddeo <\/a>onde Jakub Szymaszek e Kaivalya Hanswadkar mostram como utilizar o Always Encrypted no SSMS.<\/p>\n<p>Referencias:<\/p>\n<p><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/mt163865.aspx?f=255&amp;MSPPError=-2147217396\">https:\/\/msdn.microsoft.com\/en-us\/library\/mt163865.aspx?f=255&amp;MSPPError=-2147217396<\/a><\/p>\n<p><a href=\"https:\/\/channel9.msdn.com\/shows\/data-exposed\/getting-started-with-always-encrypted-with-ssms\">https:\/\/channel9.msdn.com\/shows\/data-exposed\/getting-started-with-always-encrypted-with-ssms<\/a><\/p>\n<p><a href=\"https:\/\/www.mssqltips.com\/sqlservertip\/4011\/sql-server-2016-always-encrypted\/\">https:\/\/www.mssqltips.com\/sqlservertip\/4011\/sql-server-2016-always-encrypted\/<\/a><\/p>\n<p><a href=\"https:\/\/blogs.msdn.microsoft.com\/sqlsecurity\/2015\/06\/04\/getting-started-with-always-encrypted\/\">https:\/\/blogs.msdn.microsoft.com\/sqlsecurity\/2015\/06\/04\/getting-started-with-always-encrypted\/<\/a><\/p>\n<p>Bom pessoal, por hoje \u00e9 isso espero que tenham gostado, nos pr\u00f3ximos posts vamos continuar a s\u00e9rie novas features do SQL Server 2016.<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Tiago Neves<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 pessoal, tudo certo? Vou aproveitar o lan\u00e7amento oficial do SQL Server 2016, e vou come\u00e7ar a fazer uma serie de post sobre as novas features disponibilizadas, neste primeiro post da s\u00e9rie vou abordar o Always Encrypted uma feature de seguran\u00e7a que achei muito interessante. A feature Always Encrypted\u00a0 permite proteger os dados sens\u00edveis de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rop_custom_images_group":[],"rop_custom_messages_group":[],"rop_publish_now":"initial","rop_publish_now_accounts":{"twitter_91251433_91251433":""},"rop_publish_now_history":[],"rop_publish_now_status":"pending","_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpscppro_dont_share_socialmedia":false,"_wpscppro_custom_social_share_image":0,"_facebook_share_type":"","_twitter_share_type":"","_linkedin_share_type":"","_pinterest_share_type":"","_linkedin_share_type_page":"","_instagram_share_type":"","_medium_share_type":"","_threads_share_type":"","_google_business_share_type":"","_selected_social_profile":[],"_wpsp_enable_custom_social_template":false,"_wpsp_social_scheduling":{"enabled":false,"datetime":null,"platforms":[],"status":"template_only","dateOption":"today","timeOption":"now","customDays":"","customHours":"","customDate":"","customTime":"","schedulingType":"absolute"},"_wpsp_active_default_template":true},"categories":[26,5],"tags":[146,148,147,150,149,68,35,14,28],"class_list":["post-607","post","type-post","status-publish","format-standard","hentry","category-sqlserver-2016","category-virtual-pass-br","tag-alwaysencrypted","tag-column-encryption-key","tag-column-master-key","tag-export-certificate","tag-import-certificate","tag-security","tag-sql-server","tag-sqlserver","tag-sqlserver2016"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6eIyh-9N","jetpack-related-posts":[{"id":2414,"url":"https:\/\/www.tiagoneves.net\/blog\/sql-server-2016-esta-chegando-ao-fim-do-suporte-o-que-isso-significa-na-pratica\/","url_meta":{"origin":607,"position":0},"title":"SQL Server 2016 est\u00e1 chegando ao fim do suporte: o que isso significa na pr\u00e1tica?","author":"tiagoneves","date":"27 de abril de 2026","format":false,"excerpt":"O SQL Server 2016 ter\u00e1 seu suporte estendido encerrado em 14 de julho de 2026, o que resultar\u00e1 na falta de atualiza\u00e7\u00f5es de seguran\u00e7a e suporte. Continuar usando essa vers\u00e3o traz riscos como vulnerabilidades e n\u00e3o conformidade regulat\u00f3ria. Planejar a migra\u00e7\u00e3o para vers\u00f5es mais recentes ou cloud deve ser prioridade\u2026","rel":"","context":"Em &quot;Seguran\u00e7a&quot;","block_context":{"text":"Seguran\u00e7a","link":"https:\/\/www.tiagoneves.net\/blog\/category\/seguranca\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.tiagoneves.net\/blog\/wp-content\/uploads\/2026\/04\/sql_server_2016_eos_v3.png?fit=772%2C702&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/comments?post=607"}],"version-history":[{"count":9,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/607\/revisions"}],"predecessor-version":[{"id":655,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/posts\/607\/revisions\/655"}],"wp:attachment":[{"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/media?parent=607"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/categories?post=607"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tiagoneves.net\/blog\/wp-json\/wp\/v2\/tags?post=607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}