{"id":2152,"date":"2020-07-22T23:21:51","date_gmt":"2020-07-22T23:21:51","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=2152"},"modified":"2020-07-22T23:21:52","modified_gmt":"2020-07-22T23:21:52","slug":"encriptar-procedimientos-almacenados-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2152","title":{"rendered":"Encriptar procedimientos almacenados SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/07\/ManualSQL_SP_encriptados__D.png\" alt=\"\" class=\"wp-image-2153\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Procedimientos almacenados encriptados SQL Server<\/h2>\n\n\n\n<p>En este art\u00edculo se muestran los procedimientos almacenados de una tabla de Categor\u00edas de platos en un restaurante. Es importante que la definici\u00f3n de los Store procedures no se puedan visualizar ya que al tener el nombre de una de las tablas de la base de datos se puede llegar a cualquiera de las tablas de la misma con el peligro de llegar a la tabla con los usuarios y lograr acceder a los sistemas.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p style=\"font-size:24px\"><strong>Asegurable que se pueden encriptar<\/strong><\/p>\n\n\n\n<p><strong>Elementos de la base de datos que se pueden encriptar, para esto se utiliza la cl\u00e1usula with encryption<\/strong><br><strong><a href=\"https:\/\/manualsqlserver.com\/?p=310\" target=\"_blank\" rel=\"noreferrer noopener\">Vistas<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=335\" target=\"_blank\" rel=\"noreferrer noopener\">Funciones definidas por el usuario<br><\/a><a href=\"https:\/\/manualsqlserver.com\/?p=314\" target=\"_blank\" rel=\"noreferrer noopener\">Procedimientos almacenados<br><\/a><a href=\"https:\/\/manualsqlserver.com\/?p=385\" target=\"_blank\" rel=\"noreferrer noopener\">Triggers<\/a><\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Importante:<\/strong><\/p>\n\n\n\n<p style=\"font-size:18px\" class=\"has-background has-very-light-gray-background-color\"><strong>Cree procedimientos almacenados y asignar el permiso para ejecutarlo al usuario de base de datos relacionado con el inicio de sesi\u00f3n asignado al usuario que utilizar\u00e1 el sistema.<\/strong><\/p>\n\n\n\n<p><strong>Para mayor informaci\u00f3n sobre seguridad ver<\/strong><br><strong><a href=\"https:\/\/manualsqlserver.com\/?p=540\" target=\"_blank\" rel=\"noreferrer noopener\">Inicios de sesi\u00f3n<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=561\" target=\"_blank\" rel=\"noreferrer noopener\">Usuarios de base de datos<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=617\" target=\"_blank\" rel=\"noreferrer noopener\">Asignar permisos Grant<\/a><\/strong><\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:24px\"><strong>Base de datos<\/strong><\/p>\n\n\n\n<p>Para este art\u00edculo se va a crear la base de datos es <strong>CocinArte<\/strong>.<\/p>\n\n\n\n<p>Create database CocinArte<br>go<br>use CocinArte<br>go<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Tabla Categor\u00edas<\/strong><\/p>\n\n\n\n<p>Create table Categorias<br>(<br>CategoriasCodigo nchar(5),<br>CategoriasDescripcion nvarchar(50) not null,<br>CategoriasFechaRegistro Date,<br>CategoriasEstado nchar(1),<br>constraint CategoriasPK primary key (CategoriasCodigo),<br>constraint CategoriasDescripcionUQ Unique (CategoriasDescripcion)<br>)<br>go<\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Insertar las categor\u00edas de los platos.<\/strong><\/p>\n\n\n\n<p>set dateformat dmy<br>insert into Categorias<br>(CategoriasCodigo, CategoriasDescripcion,<br>CategoriasFechaRegistro, CategoriasEstado)<br>Values<br>(&#8216;00001&#8242;,&#8217;Entradas&#8217;,&#8217;10\/02\/2019&#8242;,&#8217;A&#8217;),<br>(&#8216;00002&#8242;,&#8217;Arroces&#8217;,&#8217;21\/11\/2018&#8242;,&#8217;A&#8217;),<br>(&#8216;00003&#8242;,&#8217;Ensaladas&#8217;,&#8217;16\/11\/2017&#8242;,&#8217;A&#8217;),<br>(&#8216;00004&#8242;,&#8217;Carnes&#8217;,&#8217;23\/07\/2020&#8242;,&#8217;A&#8217;),<br>(&#8216;00005&#8242;,&#8217;Parrillas&#8217;,&#8217;01\/10\/2016&#8242;,&#8217;A&#8217;),<br>(&#8216;00006&#8242;,&#8217;Bebidas&#8217;,&#8217;06\/08\/2010&#8242;,&#8217;A&#8217;),<br>(&#8216;00007&#8242;,&#8217;Pescados y Mariscos&#8217;,&#8217;14\/07\/2013&#8242;,&#8217;A&#8217;)<br>go<\/p>\n\n\n\n<p><strong>El campo estado servir\u00e1 para eliminar un registro \u00fanicamente cambiando el estado, el valor por defecto es \u00abA\u00bb de Activo, al eliminar el registro cambia a \u00abE\u00bb de eliminado.<\/strong><\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Listado<\/strong><\/p>\n\n\n\n<p><strong>Procedimiento para listar las Categor\u00edas no eliminadas<br>Este primer SP no se va a encriptar.<\/strong><\/p>\n\n\n\n<p>Create Or Alter procedure spCategoriasListadoSinBorrados<br>As<br>Select [CategoriasCodigo], [CategoriasDescripcion],<br>[CategoriasFechaRegistro], [CategoriasEstado]<br>from Categorias As C<br>where C.CategoriasEstado = &#8216;A&#8217;<br>go<\/p>\n\n\n\n<p><strong>Se puede visualizar la definici\u00f3n del procedimiento usando el SP del sistema sp_helptext<br><\/strong>sp_helptext spCategoriasListadoSinBorrados<br>go<br><strong>La imagen muestra el resultado mostrando la definici\u00f3n del SP<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/07\/ManualSQL_SP_encriptados_01.png\" alt=\"\" class=\"wp-image-2154\" width=\"797\" height=\"433\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/07\/ManualSQL_SP_encriptados_01.png 538w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/07\/ManualSQL_SP_encriptados_01-300x163.png 300w\" sizes=\"auto, (max-width: 797px) 100vw, 797px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Modificar el SP y encriptarlo, para ello se utiliza la opci\u00f3n with encryption<\/strong><\/p>\n\n\n\n<p>Create Or Alter procedure spCategoriasListadoSinBorrados<br><strong>with encryption<\/strong><br>As<br>Select [CategoriasCodigo], [CategoriasDescripcion],<br>[CategoriasFechaRegistro], [CategoriasEstado]<br>from Categorias As C<br>where C.CategoriasEstado = &#8216;A&#8217;<br>go<\/p>\n\n\n\n<p><strong>Al intentar visualizar la definici\u00f3n del SP<\/strong><br>sp_helptext spCategoriasListadoSinBorrados<br>go<br>Resultado: <strong>The text for object &#8216;spCategoriasListadoSinBorrados&#8217; is encrypted.<\/strong><\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Procedimiento para listar Categor\u00edas eliminadas<\/strong><\/p>\n\n\n\n<p>Create Or Alter procedure spCategoriasListadoBorrados<br>with encryption<br>As<br>Select [CategoriasCodigo], [CategoriasDescripcion],<br>[CategoriasFechaRegistro], [CategoriasEstado]<br>from Categorias As C<br>where C.CategoriasEstado = &#8216;E&#8217;<br>go<\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Procedimiento para insertar una Categor\u00eda<\/strong><\/p>\n\n\n\n<p>Create Or Alter procedure spCategoriasInsertarNueva<br>(<br>@CategoriasCodigo nchar(5),<br>@CategoriasDescripcion nvarchar(50),<br>@CategoriasFechaRegistro Date,<br>@CategoriasEstado nchar(1)<br>)<br>with encryption<br>As<br>insert into Categorias<br>Values<br>(@CategoriasCodigo, @CategoriasDescripcion,<br>@CategoriasFechaRegistro, @CategoriasEstado )<br>go<\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Procedimiento para actualizar una Categor\u00eda<\/strong><\/p>\n\n\n\n<p>Create Or Alter procedure spCategoriasActualiza<br>(<br>@CategoriasCodigo nchar(5),<br>@CategoriasDescripcion nvarchar(50),<br>@CategoriasFechaRegistro Date<br>)<br>with encryption<br>As<br>Update Categorias<br>set<br>CategoriasDescripcion = @CategoriasDescripcion,<br>CategoriasFechaRegistro = @CategoriasFechaRegistro<br>where CategoriasCodigo = @CategoriasCodigo<br>go<\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Procedimiento para eliminar una Categor\u00eda<\/strong><\/p>\n\n\n\n<p>Create Or Alter procedure spCategoriasElimina<br>(<br>@CategoriasCodigo nchar(5)<br>)<br>with encryption<br>As<br>Update Categorias<br>set<br>CategoriasEstado = &#8216;E&#8217;<br>where CategoriasCodigo = @CategoriasCodigo<br>go<\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Procedimiento para recupera una Categor\u00eda<\/strong><\/p>\n\n\n\n<p>Create Or Alter procedure spCategoriasRecupera<br>(<br>@CategoriasCodigo nchar(5)<br>)<br>with encryption<br>As<br>Update Categorias<br>set<br>CategoriasEstado = &#8216;A&#8217;<br>where CategoriasCodigo = @CategoriasCodigo<br>go<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Procedimientos almacenados encriptados SQL Server En este art\u00edculo se muestran los procedimientos almacenados de una tabla de Categor\u00edas de platos en un restaurante. Es importante que la definici\u00f3n de los Store procedures no se puedan visualizar ya que al tener el nombre de una de las tablas de la base de datos se puede llegar &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2152\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2153,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[233],"tags":[18,243,242,244],"class_list":["post-2152","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sp","tag-create-procedure","tag-encriptar","tag-store-procedure","tag-with-encryption","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2152"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2152\/revisions"}],"predecessor-version":[{"id":2155,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2152\/revisions\/2155"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2153"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}