<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thiago Zavaschi R2 &#187; Stored Procedure</title>
	<atom:link href="http://zavaschi.com/index.php/category/stored-procedure/feed/" rel="self" type="application/rss+xml" />
	<link>http://zavaschi.com</link>
	<description>www.zavaschi.com</description>
	<lastBuildDate>Mon, 02 Jan 2012 16:51:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Repostagem &#8211; Como Proteger as Minhas Stored Procedures ?</title>
		<link>http://zavaschi.com/index.php/2009/06/repostagem-como-proteger-as-minhas-stored-procedures/</link>
		<comments>http://zavaschi.com/index.php/2009/06/repostagem-como-proteger-as-minhas-stored-procedures/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 22:50:00 +0000</pubDate>
		<dc:creator>Thiago Zavaschi</dc:creator>
				<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Stored Procedure]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://zavaschi.com/?p=34</guid>
		<description><![CDATA[Como proteger as minhas stored procedures?
Bom pessoal, o assunto do post de hoje não é uma novidade, mas hoje a tarde estava conversando com um amigo (Eduardo Ordine) e chegamos ao assunto de proteção às stored procedures no banco de dados SQL Server, vamos lá!
“Thiago, estou colocando minhas stored procedures em um banco de dados [...]]]></description>
			<content:encoded><![CDATA[<h6>Como proteger as minhas stored procedures?</h6>
<p>Bom pessoal, o assunto do post de hoje não é uma novidade, mas hoje a tarde estava conversando com um amigo (Eduardo Ordine) e chegamos ao assunto de proteção às stored procedures no banco de dados SQL Server, vamos lá!</p>
<p><em>“Thiago, estou colocando minhas stored procedures em um banco de dados compartilhado, ou que a administração não cabe a mim, e nas mesmas eu tenho regra de negócio importante e confidencial da minha empresa, tem como protegê-las?”</em></p>
<p>A resposta é: Sim!</p>
<p>As aplicações costumam ser divididas em camadas para agilizar seu entendimento e, principalmente, facilitar as manutenções. Acontece que eu, como consultor/estudante/desenvolvedor, já MUITAS empresas que colocam a regra de negócio em stored procedures do banco de dados, utilizando as linguagens de programação (.NET (C# e VB.NET), Delphi, VB, etc.) apenas como casca gráfica. Méritos e desvantagens à parte, temos o que: a necessidade de proteger estas procedures no banco de dados. Entendemos que “proteger” é igual a evitar que descubram o conteúdo das procedures.</p>
<p>Proteger 100% e garantir que NUNCA NINGUÉM conseguirá ver o conteúdo da procedure é utopia, mas podemos dificultar BASTANTE o acesso à mesma através da encriptação da procedure.</p>
<p>A stored procedure continua podendo ser executada normalmente (segundo as permições dos usuários da base de dados), mas ninguém ve o seu conteudo.</p>
<p>Como fazer?</p>
<p>Se a sua procedure ia ser criada com um comando similar a este:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:0104dfa9-0586-4580-813e-582259b1f174" class="wlWriterEditableSmartContent">
<pre style="background-color:White;overflow: auto;"><span style="color: #0000FF;">CREATE</span><span style="color: #000000;"> </span><span style="color: #0000FF;">PROCEDURE</span><span style="color: #000000;"> dbo.spImportante
</span><span style="color: #0000FF;">BEGIN</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">SELECT</span><span style="color: #000000;"> </span><span style="color: #FF0000;">'</span><span style="color: #FF0000;">Thiago Zavaschi</span><span style="color: #FF0000;">'</span><span style="color: #000000;">
</span><span style="color: #0000FF;">END</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>Então utilize da seguinte forma:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:b6db8c44-fafa-412f-b1d9-a6e9031b05ab" class="wlWriterEditableSmartContent">
<pre style="background-color:#FFFFFF;overflow: auto;"><span style="color: #0000FF;">CREATE</span><span style="color: #000000;"> </span><span style="color: #0000FF;">PROCEDURE</span><span style="color: #000000;"> dbo.spImportante
</span><span style="color: #0000FF;">WITH</span><span style="color: #000000;"> ENCRYPTION
</span><span style="color: #0000FF;">AS</span><span style="color: #000000;">
</span><span style="color: #0000FF;">BEGIN</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">SELECT</span><span style="color: #000000;"> </span><span style="color: #FF0000;">'</span><span style="color: #FF0000;">Thiago Zavaschi</span><span style="color: #FF0000;">'</span><span style="color: #000000;">
</span><span style="color: #0000FF;">END</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p><em>“Pronto Thiago, encriptei a minha procedure, estou seguro e não preciso me preocupar com mais nada, certo?”</em></p>
<p>Errado! E vejamos o porquê.</p>
<p>Vou criar aqui a procedure do exemplo acima e tentarei fazer alguns testes.</p>
<p>Primeiro farei um exec.</p>
<p><strong>---------------<br />
    <br />Thiago Zavaschi </strong></p>
<p><strong>(1 row(s) affected)</strong></p>
<p>Beleza, executado com sucesso! Agora vou executar a sp_helptext: </p>
<p><em>The text for object 'spImportante' is encrypted. </em></p>
<p>Não consigo ver, até mesmo o “Modify” do Management Studio fica desabilitado, impedindo a geração do script (e o mesmo vale para todas as formas de geração de scripts do SSMS). </p>
<p><em>“Bom Thiago, para mim parece bem seguro.”</em></p>
<p>Será mesmo? </p>
<p>Vamos fazer mais um teste: Vou ligar o SQL Server Profiler monitorando o banco e vou executar novamente a procedure (vimos que a execução é permitida sem problemas), e temos: </p>
<p><img src="http://a5ceig.blu.livefilestore.com/y1pSPPSyoFMU57l_hKMnHSgI-rwYAgOo2cuRXEDsb2nSALffL1tVf3JbUD9xK_-znQDD-ZjCpR7ScPCDGjpgRSMGo9Ed87U3mL9/spEncriptadaProfiler.png" /></p>
<p>Ok, texto encriptado, mas e se rodarmos o profiler DURANTE a criação da procedure:</p>
<p><img src="http://a5ceig.blu.livefilestore.com/y1pfEC_Q2GkdlICiFJB4Xfq1Di2gsuJkk8zH_WrAVCwltX926sPvla7WRuJeBKOqZdbSGq6_gR7eTW96KW3_5fq7iG4pnviP41j/spEncriptadaProfiler1.png" width="504" height="425" /></p>
<p>Opa, opa, opa, temos a visualização da procedure. Tem como proteger-se disso? Tem sim, basta adicionar um comentário (-- comment: sp_password) ao seu script.</p>
<p>Infelizmente há como burlar essa segurança (não vou mostrar como se faz, pois não acho ético), eu fiz aqui alguns métodos mas não consegui para algumas procedures, pois eram SPs CLR.</p>
<p>Consegui abrir essas stored procedures por outros métodos (que também não vou comentar quais), mas fiz isso só para mostrar que com segurança não devemos brincar!</p>
<p>Então fica aí a dica!</p>
<p>E não se esqueçam de manter o código original da stored prcedure em um lugar a salvo (de preferência sob o controle de um controlador de código como o TFS, etc.).</p>
<p>Grande abraço e até a próxima!<br />
  <br />Thiago Zavaschi</p>
]]></content:encoded>
			<wfw:commentRss>http://zavaschi.com/index.php/2009/06/repostagem-como-proteger-as-minhas-stored-procedures/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

