{"id":1340,"date":"2020-05-12T12:32:29","date_gmt":"2020-05-12T15:32:29","guid":{"rendered":"http:\/\/thesqltimes.com\/blog\/?p=1340"},"modified":"2020-05-12T12:32:29","modified_gmt":"2020-05-12T15:32:29","slug":"azure-file-share-no-sql-server-5","status":"publish","type":"post","link":"https:\/\/thesqltimes.com\/blog\/2020\/05\/12\/azure-file-share-no-sql-server-5\/","title":{"rendered":"Azure File Share no SQL Server &#8211; [5] Tudo junto!"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Muito \u00fatil!\" data-post-id=\"1340\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><\/div><div class=\"seriesmeta\">Post 5\/5. Este post \u00e9 parte da s\u00e9rie: <a href=\"https:\/\/thesqltimes.com\/blog\/series\/azure-file-share-sql\/\" class=\"series-279\" title=\"Azure File Share no SQL Server\">Azure File Share no SQL Server<\/a>\r\n<\/div>\r\n<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de Leitura:<\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span><p>Finalmente, chegamos ao nosso \u00faltimo post da s\u00e9rie sobre Azure File Share no SQL Server! No primeiro post, voc\u00ea viu a solu\u00e7\u00e3o completa, sem muita explica\u00e7\u00e3o para o cen\u00e1rio <em>&#8220;Como mapear um azure file share para que eu possa fazer backup no meu SQL Server da maneira mais segura poss\u00edvel&#8221;<\/em>.<\/p>\n<p>E ent\u00e3o, nos posts seguintes eu mostrei alguns conceitos b\u00e1sico do Azure File Share, de diret\u00f3rios de rede e as dificuldades e op\u00e7\u00f5es que temos para mapear diret\u00f3rios de rede de forma que o SQL Server os enxergue! E, por \u00faltimo, mas n\u00e3o menos importante, te apresentei o Credential Manager do Windows, uma das grandes chaves para preencher o requisito &#8220;mais seguro&#8221; do nosso problema.<\/p>\n<p>Eu resolvi abordar toda esses detalhes por um simples fato: A senha que voc\u00ea utiliza para acessar o Azure File Share \u00e9 simplesmente a <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/storage\/common\/storage-account-keys-manage\"><em>Account Key<\/em><\/a>. Isto significa que, se voc\u00ea deixar isso solto em algum script no seu ambiente, voc\u00ea pode n\u00e3o comprometer somente seu SQL Server, mas toda uma storage account da sua empresa. E uma dica: Tudo que foi dito durante toda a s\u00e9rie se aplica para os tradicionais file share, aqueles que s\u00e3o mapeados entre um servidor e outro dentro da rede da sua empresa, file server, etc.<\/p>\n<p>Recapitulando o post anterior, eu mostrei como voc\u00ea pode armazenar as credenciais de um diret\u00f3rio de rede usando o Credential Manager. Gra\u00e7as a isso, eu consigo acessar o diret\u00f3rio sem precisar digitar senhas e usu\u00e1rios. E ent\u00e3o, como uma pessoa espera que voc\u00ea \u00e9, pode ap\u00f3s executar exemplo do post anterior, voc\u00ea pode ter tentado fazer isso no seu SQL Server:<\/p>\n<p>&nbsp;<\/p>\n<p id=\"fHwRLll\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3f9c6830680.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1280 size-full\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3f9c6830680.png\" alt=\"Erro: Cannot open backup device. Operating system error\u00a0(the user name or password is incorrect)\" width=\"1104\" height=\"149\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3f9c6830680.png 1104w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3f9c6830680-300x40.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3f9c6830680-768x104.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3f9c6830680-1024x138.png 1024w\" sizes=\"auto, (max-width: 1104px) 100vw, 1104px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>O erro \u00e9 esperado, pois eu cadastrei as credenciais na <strong>sess\u00e3o do meu usu\u00e1rio<\/strong>. O credential manager, \u00e9 por usu\u00e1rio (e n\u00e3o por Logon Session, como expliquei no terceiro post da s\u00e9rie)!\u00a0 Isso nos d\u00e1 a vantagem de que eu preciso inserir apenas uma vez essas credenciais de acesso e mesmo ap\u00f3s restarts de servi\u00e7o, ou at\u00e9 mesmo da m\u00e1quina, o acesso ao share ir\u00e1 continuam funcionando!<\/p>\n<p>Logo, a \u00fanica coisa que eu preciso fazer agora para que \u00e9 cadastrar\u00a0 as credenciais no <strong>Credential Manager<\/strong> <strong>apenas uma vez<\/strong> para o <strong>usu\u00e1rio do SQL (conta de servi\u00e7o), e n\u00e3o para o meu. <span style=\"color: #ff0000;\">E isso \u00e9 muito importante destacar: <a href=\"http:\/\/bleepingcomputer.com\/forums\/t\/569157\/cryptofortress-a-torrentlocker-clone-that-also-encrypts-unmapped-network-shares\/\">Alguns ransonwares j\u00e1 conseguem detectar sess\u00f5es SMB e fazer o trabalho sujo, mesmo que n\u00e3o esteja mapeada como um drive local<\/a>&#8230; Caso ele se instale na sua conta de usu\u00e1rio, voc\u00ea pode ter aberto um brecha&#8230; Mapear apenas para um conta de servi\u00e7o, reduz mais ainda as chances, uma vez que ela n\u00e3o \u00e9 interativa. Isso vai tornar sua vida mais dif\u00edcil quando quiser validar algo&#8230; <span style=\"color: #000000;\">Mas a decis\u00e3o \u00e9 sua: mais seguran\u00e7a ou mais f\u00e1cil?<\/span><\/span><\/strong><\/p>\n<p>H\u00e1 v\u00e1rias maneiras de se mapear as credenciais para a conta do SQL, gra\u00e7as a ferramenta que mostrei no post anterior, <strong>cmdkey<\/strong>:<\/p>\n<ol>\n<li>Logando com a conta do SQL, se voc\u00ea possui a senha dele\n<ol>\n<li>Identifique a conta de servi\u00e7o (pode usar configuration manager, services.msc, powershell, etc.)\n<ol>\n<li>Eu gosto da <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/system-dynamic-management-views\/sys-dm-server-services-transact-sql?view=sql-server-ver15\">DMV sys,dm_server_services<\/a><\/li>\n<\/ol>\n<\/li>\n<li>Abra o cmd.exe e utilize o seguinte comando:\n<pre class=\"lang:ps decode:true\" title=\"Mapeando com runas.exe\">runas \/user:ContaServicoSQL \"cmd \/k cmdkey \/add:StorageAccountURI \/user:Azure\\StorageAccountName \/pass:AccountKey\"<\/pre>\n<p id=\"BxMWAsU\"><a href=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa25768438.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1282 size-full\" src=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa25768438.png\" alt=\"\" width=\"932\" height=\"66\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa25768438.png 932w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa25768438-300x21.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa25768438-768x54.png 768w\" sizes=\"auto, (max-width: 932px) 100vw, 932px\" \/><\/a><\/p>\n<p>O que este comando faz \u00e9 simples: Ele inicia um cmd com\u00a0 a conta de servi\u00e7o e executa o comando cmdkey para adicionar as credenciais.<br \/>\nCom isso, o cmdkey \u00e9 executado no contexto do usu\u00e1rio do SQL e as credenciais s\u00e3o adicionadas para este usu\u00e1rio.<\/li>\n<li>Se tudo ocorreu com sucesso, voc\u00ea ver\u00e1 uma nova janela se abrindo:\n<p id=\"nxzjitK\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"45\" class=\"alignnone size-full wp-image-1283 \" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa2783681b.png\" alt=\"\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa2783681b.png 560w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa2783681b-300x24.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fa2783681b-555x45.png 555w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>Com xp_cmdshell\n<ol>\n<li>Caso voc\u00ea n\u00e3o possua a senha da conta, ou a conta seja uma <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/security\/identity-protection\/access-control\/service-accounts\">virtual account<\/a> (ex.: NT SERVICE\\MSSQLSERVER), voc\u00ea dever\u00e1 usar este m\u00e9todo!<\/li>\n<li>Novamente, vou alertar para as quest\u00f5es de seguran\u00e7a ao usar xp_cmdshell:\n<ol>\n<li><strong>N\u00c3O ESQUE\u00c7A DE DESABILIT\u00c1-LA<\/strong> ap\u00f3s o uso, caso voc\u00ea n\u00e3o precise usar para mais nada no seu ambiente;<\/li>\n<li>N\u00e3o execute nenhum comando em produ\u00e7\u00e3o, sem que voc\u00ea fa\u00e7a um teste antes!<\/li>\n<\/ol>\n<\/li>\n<li>Dito isso, e considerando que ir\u00e1 executar <strong>por sua pr\u00f3pria conta e risco<\/strong>, <a href=\"https:\/\/github.com\/rrg92\/thesqltimes\/blob\/master\/azure-file-share-sql\/CmdKeyComXpCmdShell.sql\">j\u00e1 deixei o script pronto no git<\/a> que aceita algumas vari\u00e1veis como par\u00e2metros e faz todo o trabalho.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>Ap\u00f3s inserir na Credential Store da conta do SQL, o acesso funciona normalmente:<\/p>\n<p id=\"INzmGhO\"><img loading=\"lazy\" decoding=\"async\" width=\"853\" height=\"173\" class=\"alignnone size-full wp-image-1285 \" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb40b576b4.png\" alt=\"\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb40b576b4.png 853w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb40b576b4-300x61.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb40b576b4-768x156.png 768w\" sizes=\"auto, (max-width: 853px) 100vw, 853px\" \/><\/p>\n<p>Voc\u00ea querer facilita sua vida, utilizando um symbolic link:<\/p>\n<pre class=\"theme:powershell lang:ps decode:true\">cmd \/c mklink \/D NomeDiretorio URLAzureFileShare<\/pre>\n<p id=\"axevkbE\"><img loading=\"lazy\" decoding=\"async\" width=\"831\" height=\"67\" class=\"alignnone size-full wp-image-1286 \" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb7161f05d.png\" alt=\"\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb7161f05d.png 831w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb7161f05d-300x24.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb7161f05d-768x62.png 768w\" sizes=\"auto, (max-width: 831px) 100vw, 831px\" \/><\/p>\n<p id=\"XvirXFI\"><img loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"205\" class=\"alignnone size-full wp-image-1288 \" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb8ad12001.png\" alt=\"\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb8ad12001.png 666w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2020\/02\/img_5e3fb8ad12001-300x92.png 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/p>\n<p>Mas isso faz com que o file share seja enxergado a n\u00edvel de filesystem. Se estiver tentando dificultar a vida de um <strong>ransomware, por exemplo, isso pode n\u00e3o ser uma boa ideia<\/strong>. O link simb\u00f3lico \u00e9 um recurso muito pouco explorado no mundo Windows, por\u00e9m bastante usado no mundo Linux. A ideia \u00e9 criar um esp\u00e9cie de ponteiro para outros caminhos, de forma que voc\u00ea possa utilizar esse &#8220;ponteiro&#8221; como se fosse o caminho real. Deixei alguns links de refer\u00eancia para aprender mais. E algum momento posso abordar ele mais especificamente em outros casos envolvendo SQL Server. Mas, alerto que us\u00e1-lo aqui, pode realmente causar um efeito contr\u00e1rio do que voc\u00ea quer, em rela\u00e7\u00e3o a seguran\u00e7a&#8230;<\/p>\n<p>Finalizamos aqui nossa s\u00e9rie e espero que ela tenha sido \u00fatil de alguma forma!<\/p>\n<p>Utilize os coment\u00e1rios caso tenha ficado com alguma d\u00favida!<\/p>\n<p>&nbsp;<\/p>\n<p>Fontes e Links \u00fateis:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>mklink<br \/>\n<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-server\/administration\/windows-commands\/mklink\">https:\/\/docs.microsoft.com\/en-us\/windows-server\/administration\/windows-commands\/mklink<\/a><\/li>\n<li>NTFS Links<br \/>\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/NTFS_links\">https:\/\/en.wikipedia.org\/wiki\/NTFS_links<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"seriesmeta\">This entry is part 5 of 5 in the series <a href=\"https:\/\/thesqltimes.com\/blog\/series\/azure-file-share-sql\/\" class=\"series-279\" title=\"Azure File Share no SQL Server\">Azure File Share no SQL Server<\/a><\/div><p>Finalmente, chegamos ao nosso \u00faltimo post da s\u00e9rie sobre Azure File Share no SQL Server! No primeiro post, voc\u00ea viu a solu\u00e7\u00e3o completa, sem muita explica\u00e7\u00e3o para o cen\u00e1rio &#8220;Como mapear um azure file share para que eu possa fazer backup no meu SQL Server da maneira mais segura poss\u00edvel&#8221;. E ent\u00e3o, nos posts seguintes&hellip;&nbsp;<a href=\"https:\/\/thesqltimes.com\/blog\/2020\/05\/12\/azure-file-share-no-sql-server-5\/\" rel=\"bookmark\"><span class=\"screen-reader-text\">Azure File Share no SQL Server &#8211; [5] Tudo junto!<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1280,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_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,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[8,7],"tags":[280,284,281,331,282,328,329,330,73,326,292],"series":[279],"class_list":["post-1340","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administracao","category-sql-server","tag-azure","tag-cmdkey","tag-file-share","tag-fileshare","tag-mapeamento","tag-ransomware","tag-security","tag-seguranca","tag-sql-server","tag-symbolic-link","tag-xp_cmdshell","series-azure-file-share-sql"],"_links":{"self":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1340","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/comments?post=1340"}],"version-history":[{"count":8,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1340\/revisions"}],"predecessor-version":[{"id":1514,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1340\/revisions\/1514"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media\/1280"}],"wp:attachment":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media?parent=1340"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/categories?post=1340"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/tags?post=1340"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/series?post=1340"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}