25
1 INSTITUTO TECNOLÓGICO SUPERIOR DE FELIPE CARRILLO PUERTO “INVESTIGACION DOCUMENTAL DE SEGURIDAD E INTRODUCCIÓN AL SQL PROCEDURAL” DOCENTE: Ing. Noemí Guadalupe Castillo Sosa MATERIA: Taller De Base De Datos ALUMNOS: Cetz Sulub Juanita Aurora Martínez Gómez Alex Adrian Alcocer Balam Alfredo Alonso Peraza Poot Gaspar de Jesús CARRERA: Ingeniería en Sistemas Computacionales GRUPO: “ B ” SEMESTRE: Quinto AULA: H – 6 TURNO: Vespertino

SEGURIDAD E INTRODUCCIÓN AL SQL PROCEDURAL

  • Upload
    axshin

  • View
    836

  • Download
    7

Embed Size (px)

Citation preview

Page 1: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

1

INSTITUTO TECNOLÓGICO SUPERIORDE FELIPE CARRILLO PUERTO

“INVESTIGACION DOCUMENTAL DE SEGURIDAD E INTRODUCCIÓN AL SQL PROCEDURAL”

DOCENTE: Ing. Noemí Guadalupe Castillo Sosa

MATERIA: Taller De Base De Datos

ALUMNOS:Cetz Sulub Juanita AuroraMartínez Gómez Alex AdrianAlcocer Balam Alfredo AlonsoPeraza Poot Gaspar de Jesús

CARRERA: Ingeniería en Sistemas Computacionales

GRUPO: “ B ”

SEMESTRE: Quinto

AULA:H – 6

TURNO:Vespertino

FELIPE CARRILLO PUERTO QUINTANA ROO08 DE DICIEMBRE DEL 2010

Page 2: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

2

INDICE

Introducción………………………………………………….3

Tema 1

Seguridad……………………………………………………4

Subtemas

Esquemas de autorización……………………….-4

Instrucciones GRANT y REVOKE………………….4

Tema 2

Introducción al SQL Procedural……………….5

Subtemas

Procedimientos almacenados………………………6

Disparadores (Triggers)………………………….14

Conclusión…………………………………………………..18

Bibliografía………………………………………………19

Page 3: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

3

INTRODUCCIÓN

El SQL PL es, en realidad, un subconjunto del SQL que proporciona construcciones de procedimiento que se pueden utilizar para implementar la lógica alrededor de las sentencias de SQL tradicionales. El SQL PL es un lenguaje de programación de alto nivel con una sintaxis sencilla y sentencias habituales de control de programación, que incluyen las sentencias IF, ELSE, WHILE, FOR, ITERATE y GOTO, así como otras sentencias.

Procedimientos de SQL PL y de SQL

Los procedimientos de SQL PL pueden contener parámetros, variables, sentencias de asignación, sentencias de control de SQL PL y sentencias de SQL compuestas. Los procedimientos de SQL PL también dan soporte a un potente mecanismo de manejo de errores y condiciones, a las llamadas anidadas y repetitivas y a la devolución de varios conjuntos de resultados al llamante o a la aplicación cliente. Para conocer el conjunto completo de elementos del lenguaje soportado en los procedimientos de SQL PL, vea la sentencia CREATE PROCEDURE (SQL) en la Consulta de SQL.

En esta pequeña investigación pero si de gran importancia trataremos sobre cómo se manejan procedimientos almacenados y los disparadores (Triggers) en SQL PL. asi también aremos mención sobre su funcionamiento de cada uno de los antes mencionados. Además mencionaremos los conceptos de seguridad y privilegios que se pueden tener como administrador de base de datos respecto al sistema.

Page 4: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

4

SEGURIDAD SQL

ESQUEMAS DE AUTORIZACIÓN

Los usuarios pueden tener varios tipos de privilegios o autorización de modificación de esquema de la base de datos:

Autorización de Índices: permite la creación y borrado de índices Autorización de Recursos: permite la creación de nuevas relaciones Autorización de Alteración: permite el añadido y borrado de atributos de una

relación Autorización de Eliminación: Permite el borrado de relaciones

Los usuarios pueden tener varios tipos de privilegios o autorización de acceso para diferentes usos de la base de datos:

Autorización de Lectura (SELECT): permite la lectura de datos pero no la modificación de datos existentes

Autorización de Inserción (INSERT): permite la inserción de nuevos datos pero no la modificación de datos existentes

Autorización de Actualización (UPDATE): permite la modificación de datos pero no su borrado

Autorización de Borrado (DELETE): Permite el borrado de datos

INSTRUCCIONES GRANT Y REVOKE

Derecho a ejecutar un tipo de comando SQL sobre objetos de un esquema, objetos de un tipo especificado, sobre el sistema o sobre un usuario.

El administrador de la base de datos puede tener cualquier variedad de privilegios del sistema.

Sintaxis para otorgar privilegios:GRANT {privilegio1 [, privilegio2 ..] | rol}|ALL [privileges] [(columna1[, columna2])]ON [usuario] objetoTO {usuario| rol | public} [,{usuario| rol | public}][WITH GRANT OPTION]|[WITH ADMIN OPTION]

RETIRADA DE PRIVILEGIOSDe objetos a los usuarios o roles:

Page 5: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

5

REVOKE {priv_objeto[,priv_objeto]...|ALL [privileges]}

ON [usuario.] objeto

FROM {usuario|rol|PUBLIC} [,{usuario|rol|PUBLIC}]...;

DE SISTEMA O ROLES A USUARIOS O A ROLES:

REVOKE {priv_sistema|rol} [, {priv_sistema|rol} ]...

FROM {usuario|rol|PUBLIC} [,{usuario|rol|PUBLIC}]...;

INTRODUCCIÓN AL SQL PROCEDURAL

Características de PL/SQL (Procedural Language/SQL):

Combina la potencia y flexibilidad de SQL con la de un lenguaje 3GL:a. SQL es un Lenguaje de Cuarta Generación (4GL): El lenguaje describe lo que

debe hacerse pero no cómo hacerlo, dentro de una sintaxis relativamente simple.

b. Lenguajes de Tercera Generación (3GL): Tienen estructuras procedimentales para expresar cómo efectuar las operaciones.

PL/SQL permite utilizar o declarar: Variables y tipos de datos, estructuras de control (selección e iteración), procedimientos y funciones y, a partir de PL/SQL 8, también tipos de objetos y métodos.

Es un lenguaje estructurado y potente, con estructuras ideales para el trabajo con bases de datos.

Integrado en el SGBD Oracle, por lo que su ejecución es eficiente. Permite empaquetar órdenes SQL, de forma que minimice la comunicación entre

Cliente y Servidor de BD y los accesos a la BD. PL/SQL se basa en el Lenguaje Ada (3GL) y tiene muchas de sus características

(estructura de bloques, excepciones...) Oracle y PL/SQL soportan el estándar ANSI SQL92 (o SQL2) a nivel básico (se

pretende que sea a nivel completo en futuras versiones). Caracteres: PL/SQL utiliza los caracteres ASCII. PL/SQL no distingue entre

mayúsculas y minúsculas, excepto en una cadena de caracteres entre comillas. Palabras Reservadas: PL/SQL tiene más de 200. Están reservadas para la definición

del lenguaje y suelen ponerse siempre en mayúsculas. Identificadores: Empiezan con una letra, seguida opcionalmente de letras,

números y tres caracteres especiales ($, _ y #). Máxima Longitud: 30. Identificadores entre comillas dobles: Como norma general no deben usarse pues

denotan un mal estilo de programación, pero son útiles para: a) Introducir otros caracteres imprimibles (incluyendo el espacio), b) Distinguir entre mayúsculas y minúsculas y c) Utilizar una palabra reservada como identificador.

Page 6: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

6

a. Ejemplo: Si una tabla se llama EXCEPTION, usar "EXCEPTION" (en mayúsculas).

Delimitadores: Símbolos con un significado especial, como son:a. Operadores Aritméticos: +, -, *, /, ** (potenciación).b. Operadores Relacionales: =, >, <, >=, <=, <>, !=, ^=, ~=.c. Otros Operadores: := (asignación), || (concatenar cadenas), => (asociación),

¨ (rango), LIKE, BETWEEN, IN, IS NULL y los operadores lógicos (NOT, AND y OR).

d. Otros: Paréntesis para alterar la precedencia (( y )), terminador de orden (;), comentarios (--, /* y */), espacio, tabulador, retorno de carro, delimitadores de etiquetas (<< y >>), indicador de variable de asignación (:), delimitadores de cadenas (', comilla simple), identificador entre comillas dobles ("), selector de componente de un registro, una tabla... (.), enlace a BD (@), indicador de atributo (%) y separador de elementos (,).

PROCEDIMIENTOS ALMACENADOS

Un procedimiento almacenado (store procedure) no es más que una secuencia ordenada de instrucciones T-SQL, que pueden recibir y proporcionar parámetros provistos por el usuario y se pueden guardar en el servidor con un nombre, para posteriormente se invocados y ejecutados, por lo regular desde una aplicación (Escritorio o Web). Desde la versión 2005, se incorpora la posibilidad de utilizar procedimientos almacenados usando el CLR de .NET. Es decir tenemos dos tipos de procedimientos almacenados.

Un procedimiento almacendado CLR es una referencia a un método de un ensamble (dll) de .NET Framework que puede aceptar y devolver parámetros suministrados por el usuario.

Ventajas de usar SP

Compilación: La primera vez que se invoca un SP, el motor lo compila y a partir de ahí, se sigue usando la versión compilada del mismo, hasta que se modifique o se reinicie el servicio de SQL. Esto siginifica que se tendrá un mejor rendimiento que las consultas directas que usan cadenas con las instrucciones T-SQL, que se compilan cada vez que se invocan.

Automatización: si tenemos un conjunto de instrucciones T-SQL, las cuales queremos ejecutar de manera ordenada, un SP es la mejor manera de hacerlo.

Administración: cuando realizamos aplicaciones con un gran numero de lineas de código, y queremos hacer cambios, solo implica modificar un SP y no toda la aplicación, lo que significa solo cambiamos los SP en el servidor y no tenemos que actualizar la aplicación en todos los equipos cliente.

Page 7: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

7

Seguridad: una parte importante es que a los usuarios de nuestra aplicación, solo les proporcionamos los permisos para ejecutar los procedimientos almacenados y no el acceso a todos los objetos de la base. Es decir, si en nuestra aplicación encuentran una vulnerabilidad como SLQ Injection no se podrá explotar ejecutando SQL directamente.

Programabilidad: Los SP admiten el uso de variables y estructuras de control como IF, Bucles, Case, etc. además del manejo de transacción y permite controlar excepciones. Y cuando trabajamos con SP CLR podemos hacer uso de cualquier lenguaje .NET como lo son C# y VB.NET.

Trafico de Red: Pueden reducir el trafico de la red, debido a que se trabaja sobre el motor (en el servidor), y si una operación incluye hacer un trabajo de lectura primero y en base a eso realizar algunas operaciones, esos datos que se obtienen no viajan por la red.

Creando un Procedimiento almacenado

Para crear un procedimiento almacenado solo basta con ir a la base de datos desplegar el árbol hasta la parte de programación y luego en procedimientos almacenados y damos clic derecho en nuevo procedimiento almacenado como se ve en la siguiente figura:

Lo cual genera el siguiente código:

SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: <Author,,Name>-- Create date: <Create Date,,>-- Description: <Description,,>-- =============================================CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>

Page 8: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

8

-- Add the parameters for the stored procedure here <@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>ASBEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON;

-- Insert statements for procedure here SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>ENDGO

Es aquí en donde editamos nuestro procedimiento como mejor nos interese, en este caso usando la base de datos Northwind, crearemos un SP sencillo que queda más o menos así:

USE [Northwind]GO

CREATE PROCEDURE [dbo].[GetAllEmployees] -- Add the parameters for the stored procedure here @LastName nvarchar(50), @FirstName nvarchar(50)ASBEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON;

-- Insert statements for procedure here SELECT LastName, FirstName, Title FROM dbo.Employees WHERE FirstName = @FirstName AND LastName = @LastNameEND

En este sencillo ejemplo, sólo devuelve el empleado especificado (nombre y apellidos), y el titulo a partir de una vista. Este procedimiento almacenado acepta coincidencias exactas de los parámetros pasados.

Para ejecutar el código debemos hacerlo de esta manera:

Page 9: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

9

EXEC dbo.GetAllEmployees 'Davolio', 'Nancy'

Cómo lo consumimos desde una aplicación en .NET, pues de esta manera:

static void Main(string[] args) { //Creamos una nueva conexion. SqlConnection miConn = new SqlConnection("Data Source=NORTABLEPC\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");

//Creamos un nuevo comando SqlCommand miComm = new SqlCommand(); //Le asignamos la conexion. miComm.Connection = miConn; //especificamos que el comando es un stored procedure miComm.CommandType = System.Data.CommandType.StoredProcedure; //y escribimos el nombre del stored procedure a invocar miComm.CommandText = "dbo.GetAllEmployees"; //Creamos un nuevo parametro SqlParameter paramLastName = new SqlParameter(); paramLastName.ParameterName = "@LastName"; paramLastName.SqlDbType = System.Data.SqlDbType.NVarChar; paramLastName.Value = "Davolio";

miComm.Parameters.Add(paramLastName);

SqlParameter paramFirstName = new SqlParameter(); paramFirstName.ParameterName = "@FirstName"; paramFirstName.SqlDbType = SqlDbType.NVarChar; paramFirstName.Value = "Nancy"; miComm.Parameters.Add(paramFirstName); //Y los agregamos a la coleccion de parametros del comando myComm.Parameters.Add(myParam) 'Creamos un nuevo DataAdapter con nuestro comando. SqlDataAdapter miDA = new SqlDataAdapter(miComm); //Creamos un dataset para soportar los datos devueltos por el stored procedure DataSet EmpleadosDS = new DataSet(); //Pedimos al Data Adapter que llene el dataset (Esto llama a nuestro comando) miDA.Fill(EmpleadosDS); //Y lo mostramos por pantalla

foreach (DataRow row in EmpleadosDS.Tables[0].Rows) {

Page 10: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

10

Console.WriteLine(row["LastName"].ToString() + " " + row[1].ToString() + " " + row[2].ToString()); } }

Procedimientos Almacenados con CLR

En Common Language Runtime (CLR), los procedimientos almacenados se implementan como métodos estáticos públicos en una clase de un ensamblado de Microsoft .NET Framework. El método estático se puede declarar como void o puede devolver un valor entero. Si devuelve un valor entero, éste se trata como el código devuelto desde el procedimiento. Los parámetros que se pasan a un procedimiento almacenado CLR pueden ser cualquiera de los tipos nativos de SQL Server que tengan un equivalente en código administrado. Para que la sintaxis Transact-SQL cree el procedimiento, estos tipos se deben especificar con el equivalente del tipo nativo de SQL más adecuado.

Ejemplo:

Para crear un SP con integración del CLR vamos a usar VS, y creamos un Proyecto de tipo SQL, al que llame StoreProcedure_Demo, lo primero que hace Visual Studio es preguntar el origen de datos, como se ve en la figura siguiente:

En donde seleccionamos Microsoft SQL Server (SqlClient) y damos clic en continuar. Ahora toca el turno de elegir el Servidor

Page 11: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

11

En donde yo selecciono el servidor NORTABLEPC\SQLEXPRESS, y la base de datos Northwind, luego verifico la conexión y si todo va bien, por ultimo nos pedirá que si queremos habilitar la integración con el CLR, damos clic y listo. Luego damos clic derecho en nuestro proyecto Agregar->Procedimiento almacenado, como se ve en la figura:

Al procedimiento lo llamamos: GetEmpleado, damos y damos clic en Aceptar. Ahora vamos a escribir el siguiente código:

using System;using System.Data;using System.Data.SqlClient;using System.Data.SqlTypes;using Microsoft.SqlServer.Server;

Page 12: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

12

public partial class StoredProcedures{ [Microsoft.SqlServer.Server.SqlProcedure (Name="GetEmpleado")] public static void GetEmpleado() { // Inserte el código aquí SqlContext.Pipe.Send("Hola Mundo! son las : " + System.DateTime.Now.ToString() + "\n"); using (SqlConnection connection = new SqlConnection("context connection=true")) { connection.Open(); SqlCommand command = new SqlCommand("SELECT LastName, FirstName FROM Employees", connection); SqlDataReader reader = command.ExecuteReader(); SqlContext.Pipe.Send(reader); }

}};

En el código anterior solo mandamos un mensaje, y devolvemos un select sencillo de los empleados, Bien para que esto funcione, debemos generar una solución de nuestro proyecto y después una implementación del mismo, esto permite que automáticamente se envié la dll a nuestra base de datos con el nombre de nuestro proyecto, y al mismo tiempo agrega el procedimiento llamado GetEmpledo

Ahora solo nos resta ejecutar nuestro procedimiento con la siguiente instrucción:

EXEC dbo.GetEmpleado

Page 13: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

13

Lo interesante de esto, es que una vez que ya hemos llamado al SP, cuando se ejecute de nuevo, ya no se compilara instrucción por instrucción solo se llama al dll y listo, el resultado de ejecutarlo es el siguiente, por un lado manda el resultado y por otro el mensaje de “hola mundo” con la hora de la maquina, como se ve en la figura:

Page 14: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

14

DISPARADORES (TRIGGERS).

Sintaxis general de un disparador:CREATE [OR REPLACE] TRIGGER nombre[temporalidad del evento][granularidad del evento][WHEN condición]BEGINcuerpo del triggerEND nombre;/CREATE [OR REPLACE] TRIGGER nombreCrea o reemplaza un disparador con el nombre especificado.[temporalidad del evento]

Puede tomar dos valores: BEFORE ó AFTER que indicará si el cuerpo del disparador debe ejecutarse antes o después del evento que causa la activación del disparador.Ambos valores pueden aplicarse tanto para disparadores a nivel de fila como a nivel de orden.

La opción BEFORE/AFTER debe acompañarse de la operación que causa la activación del disparador. Estas pueden ser operaciones de inserción (INSERT) Y/O borrado (DELETE) y/o modificación (UPDATE) respecto a una tabla o respecto a una columna de una tabla. Cuando se quiere especificar más operación, estas se pueden unir utilizando los operadores OR y AND.

La forma general de la temporalidad del evento será, por tanto: BEFORE/AFTER INSERT/UPDATE/DELETE [OF nombre_columna] ON nombre_tabla

Por ejemplo:

BEFORE INSERT ON empleadoBEFORE INSERT OR DELETE ON empleadoBEFORE UPDATE ON salario ON empleado

Esta última se activará para una operación como:

UPDATE empleado SET salario=salario+1;Y también para:UPDATE empleado SET salario=salario;Pero no para:UPDATE empleado SET emp_cod=101;

Page 15: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

15

La cláusula OF nombre_columna puede utilizarse tanto a nivel de fila como a nivel de orden.[granularidad del evento][WHEN condición]

Permite distinguir si el disparador es a nivel de fila o a nivel de orden. Un disparador se define a nivel de fila cuando el cuerpo del disparador se debe aplicar fila a fila de la tabla afectada y se define a nivel de orden cuando se debe aplicar a toda la tabla a la vez.

Si queremos definir el disparador a nivel de fila, la granularidad deberá especificarse con la cláusula FOR EACH ROW a la que habrá que acompañar de la condición que debe cumplir la fila para aplicar el cuerpo del disparador. Esta condición se indica en la orden SQL mediante la cláusula WHEN condición.

Cuando no exista definición del granularidad del evento, significará que el disparador está definido a nivel de orden.

Page 16: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

16

Ejemplos:CREATE TRIGGER nivel_fila_sin_condiciónAFTER DELETE OF salario ON empleadoFOR EACH ROWBEGIN...CREATE TRIGGER nivel_fila_con_condiciónAFTER DELETE OF salario ON empleadoFOR EACH ROWWHEN empleado.salario >60000BEGIN...

CREATE TRIGGER nivel_columnaAFTER DELETE OF salario ON empleadoBEGIN...

Si se quiere hacer mención en la condición WHEN al valor de la fila a borrar, se debe hacer referencia mediante las variables NEW y OLD. Así, para el ejemplo anterior, el disparador estaría correctamente definido de la siguiente manera:

CREATE TRIGGER nivel_fila_con_condiciónAFTER DELETE OF salario ON empleadoFOR EACH ROWWHEN OLD.salario >60000BEGIN...Con OLD.nombre_columna referenciamos:

Al valor que tenía la columna antes del cambio debido a una modificación (UPDATE) Al valor de una columna antes de una operación de borrado sonbre la misma (DELETE) Al valor NULL para operaciones de inserción (INSERT)

Con NEW.nombre_columna referenciamos:

Al valor de una nueva columna después de una operación de inserción (INSERT) Al valor de una columna después de modificarla mediante una sentencia de

modificación (UPDATE) Al valor NULL para una operación de borrado (DELETE)

Sin embargo hay que tener en cuenta que las variable OLD y NEW sólo pueden ser utilizadas cuando el disparador se ha definido a nivel de fila.

Page 17: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

17

BEGIN

Cuerpo del triggerEND nombre;

Dentro del cuerpo de un disparador podemos incluir sentencias de borrado (DELETE), inserción (INSERT) o modificación (UPDATE) pero también se puede poner cualquier otra sentencia SQL (SELECT..) e incluso un programa escrito en PL/SQL. Esta última opción se verá en la siguiente práctica.

Dentro de este cuerpo también se puede hacer referencia a las variables OLD y NEW sólo que en este caso habrá que utilizarlas con: delante.

Ejemplo:

BEGINDELETE FROM tabla2 WHERE tabla2.cod=:OLD.cod;END Ejemplo;

Órdenes de disparadores

Eliminación de un disparadorDROP TRIGGER nombre;Habilitación/deshabilitación de un disparadorALTER TRIGGER nombre [ENABLE|DISABLE]Habilitación/deshabilitación de todos los disparadores de una tabla:ALTER TABLE nombretabla [ENABLE|DISABLE] ALL TRIGGERS;Ver todos los disparadores definidos por un usuarioSELECT TRIGGER_NAME FROM USER_TRIGGERSVer el cuerpo de un disparador:SELECT TRIGGER_BODY FROM USER_TRIGGERSWHERE TRIGGER_NAME = ‘nombre_disparador’;Ver la descripción de un disparador:SELECT DESCRIPTION FROM USER_TRIGGERSWHERE TRIGGER_NAME = ‘nombre_disparador’;

Page 18: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

18

CONCLUSIÓN

Podemos concluir diciendo que SQL PL es un lenguaje de programación que

nos sirve como una herramienta única y muy poderosa que nos brinda una

gran gama de operaciones que nos ayudan a facilitar la creación de nuestra

base de datos.

Por último algo que nos gusto mucho fue el procedimiento almacenado

(store procedure) no es más que una secuencia ordenada de instrucciones

T-SQL, que pueden recibir y proporcionar parámetros provistos por el

usuario y se pueden guardar en el servidor con un nombre, para

posteriormente se invocados y ejecutados.

Page 19: SEGURIDAD  E  INTRODUCCIÓN AL SQL PROCEDURAL

19

BIBLIOGRAFÍA

http://powerbuilder.iespana.es/tutoriales/bd_itis2.pdf http://mspnor.wordpress.com/2008/10/31/sqlprocedimientos-almacenados-paso-

a-paso/ http://alarcos.inf-cr.uclm.es/doc/bbddavanzadas/practivasI.pdf http://apuntes.rincondelvago.com/seguridad-sql.html