DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Convertir un Stored Procedure de Usuario a Stored Procedure del Sistema en SQL Server 2000

Por hertino17 | 1/30/2006 | Visitas 11,996 | Voto 5.00
Este articulo brinda una herramienta con la cual convertir un procedimiento almacenado a un objeto del sistema, sin perder la informacion contenida en él.
Categorías : SQL Server
Descargar ejemplo SPdelSistema_orig.zip

Introducción
En sistemas de información implementados con plataformas Cliente/Servidor, normalmente nos encontramos como mínimo con las tres capas básicas de estructuración, una arquitectura de aplicaciones con capas normalmente contiene código de presentación, código de procesamiento de datos y código de almacenamiento de datos (bases de datos), diferenciándose unos aplicativos de otros según la distribución del código, su implementación o su diseño interno.

La inteligencia del negocio puede ser integrada con la capa de presentación, la de programación o la de datos según los requerimientos del aplicativo, alcanzando ventajas significativas en velocidad, mantenimiento, flexibilidad, escalabilidad y reusabilidad. Algunos de estos aplicativos concentran la inteligencia y reglas del negocio en la capa de base de datos, utilizando procedimientos almacenados (stored procedures), funciones y vistas para manipular la información del sistema, convirtiendo a esta capa en el núcleo de procesamiento de los datos y por lo tanto en un punto critico de seguridad.

En Microsoft SQL Server 2000 es posible encriptar las vistas, funciones y procedimientos por medio de una instrucción sencilla [Encryption], pero al encriptar no es posible obtener la información que ejecuta el objeto. Este articulo brinda una herramienta con la cual convertir un procedimiento almacenado a un objeto del sistema, sin perder la informacion contenida en él.

Preparando la estructura de práctica
Con el fin de probar todos los puntos expuestos en este articulo se define un procedimiento almacenado en la base de datos de pruebas Northwind.

Use northwind
Go

create procedure sp_leer_cliente
AS
begin
select
CompanyName,
ContactName,
Phone,
City
from Customers
where Region = 'OR'
end
GO


Encriptación de Objetos
Con el procedimiento almacenado del sistema sp_helptext, se visualiza el texto contenido en un procedimiento almacenado, función, vista, regla, disparador(trigger), o default que no se encuentre encriptado.

exec sp_helptext 'sp_leer_cliente'


El comando ENCRYPTION de SQL Server 2000 permite encriptar el texto que define a un objeto tal como vistas, funciones, disparadores y procedimientos almacenados. Este comando oculta la informacion almacenada en la tabla del sistema SysComments y evita que sea parte de un proceso de replicación.

En el ejemplo siguiente se puede observar el efecto de encriptar el procedimiento almacenado sp_leer_cliente.

alter procedure sp_leer_cliente
WITH ENCRYPTION
AS
begin
select
CompanyName,
ContactName,
Phone,
City
from Customers
where Region = 'OR'
end
GO


El resultado obtenido es: "The object comments have been encrypted."

Convertir un Procedimiento Almacenado
Una manera inteligente de evitar que un usuario pueda modificar equivocadamente o convenientemente un procedimiento almacenado, es convertir un procedimiento almacenado de usuario a un procedimiento almacenado del sistema, estos últimos no pueden ser modificados a través del administrador corporativo de SQL Server, complicando la actualización de los procedimientos almacenados de este tipo, pero no evitando definitivamente que sea modificado.

Para realizar esta conversión seguiremos los siguientes pasos:

1. Modificar y desencriptar el procedimiento almacenado de prueba.

alter procedure sp_leer_cliente
AS
begin
select
CompanyName,
ContactName,
Phone,
City
from Customers
where Region = 'OR'
end
GO


2. Se determina el estado actual en el sistema del procedimiento almacenado, accediendo a la tabla del sistema Sysobjects. Para acceder directamente al registro que nos compete se filtran los datos que pertenezcan al conjunto de los procedimientos almacenados (xtype = 'P').

select status, *
from sysobjects
Where name like 'sp_leer_cliente'
and xtype = 'P' --procedure


Generalmente el estado(status) de un procedimiento almacenado de usuario es cero o un numero positivo (EJ: 1610612736). La idea general para realizar la conversión es convertir este estado a un valor negativo. Guardar el número de estado generado por esta consulta para devolver los cambios realizados en esta conversión.

3. Entre las opciones de configuración se encuentra la propiedad allow updates(permite actualizaciones), cuando el valor de esta propiedad es cero(0) no se permiten las actualizaciones de las tablas del sistema, sucediendo lo contrario cuando su valor es uno(1). Estas opciones se pueden cambiar utilizando el procedimiento almacenado del sistema sp_configure.

Se requiere ejecutar la sentencia RECONFIGURE with override después de cambiar cualquier valor de configuración, con el fin de actualizar los valores de configuración en ejecución asignando los nuevos valores. Aunque algunas opciones requieren reiniciar los servicios del servidor de base de datos.

sp_configure 'allow updates', 1 --1:Permite las actualizaciones
RECONFIGURE with override --Es necesario para que tome los cambios
EXEC sp_configure --Muestra las opciones
GO


4. Actualizar el estado del procedimiento almacenado con un vor especifico:

Update sysobjects
Set status = -536870912
Where name like 'sp_leer_clnte'
and xtype = 'P' --procedure
GO


5. Reconfigurar los valores estándar.

sp_confiure 'allow updates', 0 --0:No permite las actualizaciones
RECONFIGURE with override --Es necesario para que tome los cambios
EXEC sp_configure --Muestra las opciones
GO


6. Verificar a través del administrador corporativo que el procedimiento almacenado se comporta como un objeto del sistema.

Conclusión
Esta es una herramienta que busca brindar a los programadores de bases de datos SQL Server 2000 la posibilidad de bloquear sus objetos de bases de datos de una manera sencilla y cómoda a través de un script, sin generar trastornos a los usuarios. Aquí se brinda una solución practica pero no definitiva a los problemas ocasionados por cambios realizados en la capa de base de datos por usuarios indebidamente autorizados.

Descargar ejemplo SPdelSistema_orig.zip
Area de Comentarios
Por VECINU - Fecha: 2006/02/26 07:18 PM
Excelente
Por Anónimo - Fecha: 2010/06/24 06:08 PM
Muy buena información, sin embargo, ¿Alguien sabe como se puede hacer esto en SQL Server 2005 o superior?
Por Anónimo - Fecha: 2010/06/24 06:08 PM
Muy buena información, sin embargo, ¿Alguien sabe como se puede hacer esto en SQL Server 2005 o superior?
Por Anónimo - Fecha: 2012/07/19 02:49 AM
Think about the newest SQL poersn . there are always new people coming on board so while your topics may help less of the seasoned SQL peeps, there are always newbies coming on and your blog may help them out big time. Also your poersnal twist on how you present that information may sink in better than say a stuffy Microsoft TechNet Article they can be pretty dry.I think that is the biggest thing you can take into consideration, how can I help the newest SQL poersn. That mentality has worked for us in our business and can transcend into your blog too.Keep it up!
Por Anónimo - Fecha: 2012/07/20 06:41 AM
eXguMQ , [url=http://teiuvzxjfyce.com/]teiuvzxjfyce[/url], [link=http://vrbqunhoukqj.com/]vrbqunhoukqj[/link], http://rxpqiklzdrbu.com/
Por Anónimo - Fecha: 2012/07/21 12:55 PM
zr5xHr , [url=http://mkorebzvojaa.com/]mkorebzvojaa[/url], [link=http://lynifvujqihq.com/]lynifvujqihq[/link], http://cllgmukjjczh.com/
Por Anónimo - Fecha: 2015/12/17 01:57 PM
I di'dnt know where to find this info then kaboom it was here.
Por Anónimo - Fecha: 2015/12/19 02:47 AM
ooooooooooh this is rellay cool it is the best ever it is rellay recommended and they are rellay pro . it is super fast super professional and super cool and when you talk about efficiency ,,,,,,, who is better . so what are you waiting for people go and check it out milesconsultingcorp . com http://ayzpdkjlb.com [url=http://epzsfcpniba.com]epzsfcpniba[/url] [link=http://nknadgqu.com]nknadgqu[/link]
Por Anónimo - Fecha: 2015/12/20 02:20 PM
the only thing this guy is running is his mouth. I own a small sevrcie bus. in the Inland empire, i tried google adwords (very expensive, time consuming, barely works) what has worked for me is getting out there in person and doing sales. http://xcnwwy.com [url=http://cqrnry.com]cqrnry[/url] [link=http://ejjdpyzt.com]ejjdpyzt[/link]
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
ricardo leppe t
pedrojavier
CALIN
willipinru
richard
ragomez
PER 238
MEX 236
CRI 188
COL 118
ESP 105
ARG 88