<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>BLOG DE MAXI ACCOTTO : Seguridad</title><link>http://msmvps.com/blogs/maxiaccotto/archive/tags/Seguridad/default.aspx</link><description>Tags: Seguridad</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Sql Dinamico y seguridad en SQL2005</title><link>http://msmvps.com/blogs/maxiaccotto/archive/2007/11/08/sql-dinamico-y-seguridad-en-sql2005.aspx</link><pubDate>Thu, 08 Nov 2007 23:56:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1288580</guid><dc:creator>Maxi Accotto</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/maxiaccotto/rsscomments.aspx?PostID=1288580</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/maxiaccotto/commentapi.aspx?PostID=1288580</wfw:comment><comments>http://msmvps.com/blogs/maxiaccotto/archive/2007/11/08/sql-dinamico-y-seguridad-en-sql2005.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;SQL-Dinámico y seguridad dentro de SQLServer 2005&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;El SQL-dinámico es una técnica la cual nos permite ejecutar sentencias TSQL de forma dinámica,&amp;nbsp; para poder hacer uso de esta técnica es necesario utilizar o bien el store procedure sp_executesql o sino EXEC(@str).&lt;/p&gt;
&lt;p&gt;Este articulo no tiene como objetivo entrar en detalle del SQL-dinámico ya que hay otros escritos al respecto como por ejemplo el siguiente link el cual recomiendo leer &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hayes.ch/sql/sql_dinamico.html"&gt;http://www.hayes.ch/sql/sql_dinamico.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Aquí nos concentraremos en la seguridad y los cambios que hay en SQL2005 al respecto.&lt;/p&gt;
&lt;p&gt;Una de las mayores contras que tiene el uso de SQL-Dinámico es que si lo ponemos dentro de un Store Procedure el usuario que ejecute tal Store no solo deberá tener permisos de execute sino que también deberá tener permisos sobre los objetos que haga referencia el SQL-Dinámico.&lt;/p&gt;
&lt;p&gt;Para poder ser más específicos veamos un ejemplo al respecto&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;USE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;MASTER&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;CREATE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;DATABASE&lt;/font&gt;&lt;font size="2"&gt; TEST1&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;USE&lt;/font&gt;&lt;font size="2"&gt; TEST1&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- CREAMOS UN NUEVO LOGIN&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;CREATE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;LOGIN&lt;/font&gt;&lt;font size="2"&gt; FEDERICO &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;WITH&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;PASSWORD&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;=&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&amp;#39;PASSW@RD&amp;#39;&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;USE&lt;/font&gt;&lt;font size="2"&gt; TEST1&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- CREAMOS EL USUARIO EN LA BASE DE DATOS&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;CREATE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;USER&lt;/font&gt;&lt;font size="2"&gt; FEDERICO&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- CREAMOS UNA TABLA&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;CREATE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;TABLE&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;EMPLEADOS &lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;ID &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;INT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;IDENTITY&lt;/font&gt;&lt;font color="#808080" size="2"&gt;,&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;NAME&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;VARCHAR&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;font color="#808080" size="2"&gt;))&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- CREAMOS UN STORE QUE CONSUME LA TABLA EMPLEADOS&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;CREATE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;PROC&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;AS&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;SELECT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;*&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;FROM&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;EMPLEADOS&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- CREAMOS OTRO STORE QUE CONSUME LA TABLA PERO CON SQLDINAMICO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;CREATE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;PROC&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL2 &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;AS&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;DECLARE&lt;/font&gt;&lt;font size="2"&gt; @N &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;NVARCHAR&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;SET&lt;/font&gt;&lt;font size="2"&gt; @N &lt;/font&gt;&lt;font color="#808080" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt; N&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&amp;#39;SELECT * FROM DBO.EMPLEADOS&amp;#39;&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;EXECUTE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#800000" size="2"&gt;SP_EXECUTESQL&lt;/font&gt;&lt;font size="2"&gt; @N&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- FEDERICO SOLO TIENE PERMISOS A LOS STORES&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;GRANT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;EXECUTE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;ON&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;TO&lt;/font&gt;&lt;font size="2"&gt; FEDERICO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;GRANT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;EXECUTE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;ON&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL2 &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;TO&lt;/font&gt;&lt;font size="2"&gt; FEDERICO&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- ENTRAMOS COMO FEDERICO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;EXECUTE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;AS&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;LOGIN&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&amp;#39;FEDERICO&amp;#39;&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;SELECT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#ff00ff" size="2"&gt;SUSER_SNAME&lt;/font&gt;&lt;font color="#808080" size="2"&gt;()&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;SELECT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;*&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;FROM&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;EMPLEADOS &lt;/font&gt;&lt;font color="#008000" size="2"&gt;-- FALLA PORQUE NO TENEMOS PERMISO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;EXEC&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL &lt;/font&gt;&lt;font color="#008000" size="2"&gt;-- FUNCIONA&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;EXEC&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL2 &lt;/font&gt;&lt;font color="#008000" size="2"&gt;-- FALLA POR EL SQL-DINAMICO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;REVERT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008000" size="2"&gt;-- REVERTIMOS EL LOGIN&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Como se ha podido observar en el ejemplo el segundo Store ha fallado cuando el usuario Federico lo invoco ya que no tenia permisos sobre los objetos internos del mismo, en este caso la tabla &amp;quot;Empleados&amp;quot;.&lt;/p&gt;
&lt;p&gt;Esto atenta contra el buen uso de un Store procedure ya que una de sus virtudes es aislar a los usuarios del acceso directo a los objetos, con lo cual si deseamos en este caso usar SQL-Dinámico deberíamos darle permisos de Select a la tabla correspondiente.&lt;/p&gt;
&lt;p&gt;Esto funciona así en 2000 y no hay solución al respecto, por lo cual yo no recomiendo mucho el uso de SQL-Dinámico y de usarlo tener en claro lo que está sucediendo.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;¿Que cambios hay en 2005?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;SqlServer 2005 permite dentro de un objeto como el Store Procedure indicarle el contexto de ejecución, esto es totalmente nuevo y se indica con la sentencia WITH EXECUTE AS (Caller, Owner o Username)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Caller es utilizado por defecto y representa a quien llama (como vimos en el ejemplo 1)&lt;/li&gt;
&lt;li&gt;Owner indica que se impersonificara como el usuario propietario del objeto, en este caso como entre con la cuenta de SA entonces estamos impersonificando con ella.&lt;/li&gt;
&lt;li&gt;User_name nos permite indicar con que login deseamos que se impersonifique&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;El siguiente ejemplo modifica el &amp;nbsp;Store con SQL Dinámico pero utilizando Execute AS&lt;/p&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- CAMBIOS EL STORE DEL SQL DINAMO PARA QUE SE EJECUTE EN&lt;/p&gt;
&lt;p&gt;-- OTRO CONTEXTO DE SEGURIDAD&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;ALTER&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;PROC&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL2 &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;WITH&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;EXECUTE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;AS&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;OWNER&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;AS&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;DECLARE&lt;/font&gt;&lt;font size="2"&gt; @N &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;NVARCHAR&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;50&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;SET&lt;/font&gt;&lt;font size="2"&gt; @N &lt;/font&gt;&lt;font color="#808080" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt; N&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&amp;#39;SELECT * FROM DBO.EMPLEADOS&amp;#39;&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;EXECUTE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#800000" size="2"&gt;SP_EXECUTESQL&lt;/font&gt;&lt;font size="2"&gt; @N&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;GO&lt;/p&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;
&lt;p&gt;-- VOLVEMOS A PROBAR&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;EXECUTE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;AS&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;LOGIN&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;=&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&amp;#39;FEDERICO&amp;#39;&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;SELECT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#ff00ff" size="2"&gt;SUSER_SNAME&lt;/font&gt;&lt;font color="#808080" size="2"&gt;()&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;SELECT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;*&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;FROM&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;EMPLEADOS &lt;/font&gt;&lt;font color="#008000" size="2"&gt;-- FALLA PORQUE NO TENEMOS PERMISO&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;EXEC&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL &lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;EXEC&lt;/font&gt;&lt;font size="2"&gt; DBO&lt;/font&gt;&lt;font color="#808080" size="2"&gt;.&lt;/font&gt;&lt;font size="2"&gt;USP_EMPLEADOS_GET_ALL2 &lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;REVERT&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Aquí se ve claramente que ahora Federico no necesito permisos sobre la tabla &amp;quot;Empleados&amp;quot; para poder hacer uso del SQL-Dinámico.&lt;/p&gt;
&lt;p&gt;Con esto lo que logramos es seguir manteniendo una de las enormes virtudes que tienen los Stores Procedures que es el aislamiento con respecto a los objetos base.&lt;/p&gt;
&lt;p&gt;No confundir el Execute AS del Store con el luego utilizado en el query para dentro del management Studio impersonificarnos como Federico sin la necesidad entrar a otra ventana.&lt;/p&gt;
&lt;p&gt;Estos ejemplos deben ser probados desde SQL2005, si desea probar el primer ejemplo desde SQL2000 deberá sacar la sentencia Execute AS y probar la seguridad entrando con el correspondiente login y password.&lt;/p&gt;
&lt;p&gt;Bueno espero les sea de utilidad y espero sus comentarios.&lt;/p&gt;
&lt;p&gt;Nos vemos!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1288580" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/maxiaccotto/archive/tags/Seguridad/default.aspx">Seguridad</category></item></channel></rss>