Você está na página 1de 17

Recuperación, concurrencia y seguridad de base de datos

1. Recuperación:

a) Concepto:

Un sistema de recuperación consiste en restaurar la BD a un estado que se


sepa correcto, tras cualquier fallo que la haya dejado en un estado incorrecto.

b) ¿Porque es necesaria la recuperación?


Siempre se introduce una transacción a un SGBD (SISTEMA DE GESTION
DE BASE DE DATOS) para ejecutarla, el sistema tiene que asegurarse de
que todas las operaciones de la transacción se superen con éxito y su efecto
quede registrado en la base de datos, o que la transacción no tenga efecto
alguno sobre la BD ni sobre cualquier otra transacción.

 Recuperación de Base de Datos

“Devolver la BD a un estado consistente”

Tipos de Fallos:
 Un fallo del computador (caída del sistema).
 Un error de la transacción o del sistema.
 Errores locales o condiciones de excepción detectadas por la
transacción.
 Imposible de control de concurrencia.
 Fallo del disco.
 Problemas físicos y catástrofes.
c) Concepto de Recuperación: Movimientos de disco a memoria:

Una o mas paginas de disco que contienen los elementos de información que
han de actualizarse se colocan en el bufers de memoria principal y luego se
actualizan en memoria antes de ser escritos otra vez en disco.

Por lo general, hay un grupo de búfers dentro de la memoria, llamados caché


del SGBD.
Puede ser necesario reemplazar o limpiar algunos de los búfers de la caché
para disponer de espacio para un nuevo elemento. Para ello, se usa alguna
técnica de reemplazo de páginas: el menos recientemente usado (LRU), o la
primera en entrar primera en salir (FIFO).

Se utiliza un directorio de la caché para seguir la pista de los elementos de la


base de datos que están en los búfers.

Cada búfers tiene un bit de ensuciado para indicar si el búfer ha sido o no


modificado.

Cuando se lee por primera vez una página de disco, se asigna la página a un
búfer y se coloca el bit ensuciado en 0. Solo se reemplaza la información en
el disco, si es que el bit de ensuciado cambia a 1.

Se usa otro bit de reserva que indica en 1 que una página aún no se puede
escribir en disco.

Para grabar un búfer en disco:


 Actualización en el lugar: escribe en la misma posición en disco
 Sombreado: escribe en una posición diferente, lo que hace posible
manejar diferentes versiones.

d) Concepto de Recuperación: Estratégica básica

Si hay daños extensos, entonces se restaura una copia de la base de datos


almacenada en disco

Si el daño no es extenso (no hay daño físico) pero hay inconsistencia como
las descritas en el manejo de transacciones, la estrategia es invertir los
cambios que provocaron la inconsistencia, deshaciendo algunas operaciones.
Para esto, las entradas mantenidas en el diario del sistema on-line (log) se
consultan durante la recuperación.
Se distinguen las siguientes técnicas de recuperación para fallos no
catastróficos.

 Actualización diferida:
No actualiza hasta que la transacción lleva a su punto de confirmación. Si una
transacción falla, no hay necesidad de DESHACER porque no se ha
modificado la base de datos. Pero puede ser necesario REHACER.

 Actualización inmediata

Es posible actualizar la BD antes de la confirmación de una transacción. Sin


embargo, estas operaciones se graban en el log mediante escritura forzada
antes de aplicarse a la base de datos. Puede ser necesario DESHACER y
REHACER.

 Paginación en sombra

Se basa en un directorio a las páginas de la BD. El directorio se copia cuando


comienza una transacción, pasando a ser un directorio sombra.

e) Escritura del Log:

Cuando se utiliza actualización inmediata, es necesario utilizar un log para la


recuperación. Esto se conoce como escritura anticipada en el disco.

Los dos tipos de información que maneja el log son:

 Información necesaria para deshacer: valor antiguo del elemento


 información necesaria para rehacer: nuevo valor del elemento
escrito.
f) Robar/Forzar

La estrategia no-robar establece que una página de la caché actualizada por


una transacción no puede escribirse a disco antes de la confirmación de dicha
transacción. El bit de reserva indica si la página puede o no escribirse a disco.
Si el protocolo permite escribir antes de confirmar, se le llama estrategia robar.
El robar se usa cuando el gestor de la caché necesita un búfer vacío.
Si todas las páginas actualizadas por una transacción son escritas
inmediatamente a disco cuando se confirma la transacción, se llama
estrategia forzar. De lo contrario se llama no-forzar.
g) Puntos de control
Otro tipo de entrada en el log es el llamado punto de control.
Se escribe en el diario un punto de control en que el sistema escribe en el
disco todos los búfers del SGBM que han sido modificados en la base de
datos.
Todas las transacciones confirmadas antes del punto de control no necesitan
rehacer sus actualizaciones.

Establecer un punto de control involucra:


 suspensión de la ejecución de transacciones temporalmente
 escritura forzada de todos los búfers de la memoria principal que han
sido modificados a disco
 Reescribir un registro (punto de control) al log y escritura forzada del
log en disco
 Reactivar las transacciones en ejecución.

h) Rollback: Restauración de transacciones


Si una transacción T se revierte, cualquier transacción S que haya leído
mientras tanto el valor de algún elemento escrito por T también debiera
revertirse. Esto en forma de cascada.
Como la recuperación es cascada es costosa, todas las estrategias de
recuperación tienden a que esta recuperación en cascada no sea necesaria.

i) Técnica de Recuperación: actualización diferida


Una transacción no puede modificar la base de datos en disco antes de llegar
a su punto de confirmación.
Una transacción no llega a su punto de confirmación antes de grabar todas
sus operaciones de actualización en el diario y forzar la escritura del diario en
disco.
j) Actualización diferida: monousuario
Usar dos listas de transacciones: confirmadas desde el último punto de control
activas (solo una en este tipo de sistemas). Aplicar la operación REHACER
de todas las operaciones de escritura de las transacciones confirmadas a
partir del log. Reiniciar operaciones activas.
Rehacer una operación de escritura OP-ESCRITURA consiste en examinar
su entrada de diario y asignar el nuevo valor en la base de datos.
k) Actualización diferida: multiusuario (concurrencia)
En muchos casos el control de concurrencia está interrelacionado con los
procesos de recuperación.
Asuma un control de concurrencia en dos fases donde todos los desbloqueos
se hacen en el commit. La recuperación usa el procedimiento descrito
anteriormente.
Se puede optimizar en el caso que hayan más de una actualización
confirmada desde el último punto de control. En tal caso, bastará con
REHACER la última actualización.
l) Técnica Recuperación: actualización inmediata
Una operación de actualización se realiza inmediatamente
Las actualizaciones se graban en el log antes que a la base de datos
Deben DESHACERSE operaciones de actualización que se hayan realizado
por una transacción que falla.
Dos categorías de algoritmos son:
 Si todas las actualizaciones se graban en un disco antes de confirmar,
entonces nunca necesita rehacer transacciones confirmadas

 Si se permite confirmar antes de escribir los cambios, entonces


tenemos el caso más general de DESHACER/REHACER.

Algoritmo ARIES
ARIES: conjunto de algoritmos de recuperación usados actualmente en
Sistemas de Base de Datos
Aries utiliza un esquema de robar/no forzar para a escritura basado en tres
conceptos: (1) escritura anticipada, (2) repetición de la historia durante el
rehacer, y (3) anotación en el log de las modificaciones durante el rehacer.
Repetición de la historia: ARIES vuelve a trazar todas las acciones del sistema
de la base de datos antes de la caída para reconstruir el estado de la base de
datos cuando ocurrió la caída. Las transacciones que no estaban confirmadas
en el momento de la caída se deshacen.
Anotación en el log de las modificaciones durante el rehacer evita que ARIES
repita las operaciones de DESHACER realizadas si se produce un fallo durante
la recuperación que obligue reiniciar el proceso de recuperación.
Tabla de transacciones y de páginas
La tabla de transacciones tiene una entrada por cada transacción activa, con el
id de la transacción, el estado de la transacción y el NSD del registro del diario
más reciente.
La tabla de página contiene el ID de la página y la primera entrada del diario que
haya hecho modificación a la página.
ARIES: REHACER
ARIES comienza rehaciendo desde el punto del diario donde sabe que los
cambios previos a las páginas sucias han sido ya aplicados a la base de datos
en disco.
ARIES determina esto encontrando el NSD más pequeño, M, de todas las
páginas sucias de la tabla de página sucias.
ARIES: DESHACER
La tabla de transacciones identifica las transacciones activas que deben
deshacerse.
la fase comienza de atrás hacia adelante deshaciendo las transacciones activas.

2. Concurrencia:
El termino concurrencia se refiere al hecho de que los DBMS (SISTEMAS DE
ADMINISTRACION DEBD) permiten que muchas transacciones puedan accesar
a una misma base de datos a la vez.

En un sistema de estos se necesitan algún tipo de mecanismos de control de


concurrencia para asegurar que las transacciones concurrentes no interfieran
entre si.

En sistemas multiusuario, es necesario un mecanismo para controlar la


concurrencia. Se pueden producir inconsistencias importantes derivadas del
acceso concurrente, como, por ejemplo, el problema de la operación perdida.
Métodos de control de concurrencia

Protocolos basados en técnicas de bloqueo

Cabe destacar antes de comenzar el estudio de los protocolos basados en


bloqueos que son los más utilizados por los SGBD comerciales. Los demás
tienen un alcance más teórico que práctico.

Un bloqueo es una variable asociada a un elemento de datos de la base de datos,


usada para restringir las operaciones que se pueden aplicar sobre él.

Existen varios tipos de bloqueo: binarios (de propiedades limitadas),


compartidos, exclusivos (usados en la práctica), y bloqueos de certificación.
Las operaciones sobre bloqueos se deben implementar como secciones críticas,
es decir, de forma indivisible; el SGBD no deberá alternar sus instrucciones con
otras.

Bloqueos binarios

Se caracterizan por tener dos valores posibles, bloqueados y desbloqueados.


Cada elemento de la base de datos tiene un bloqueo distinto. El bloqueo señala
si una transacción está operando sobre el elemento o está libre para que se
pueda operar con él. De esta manera se impide que dos o más transacciones
estén operando sobre un mismo elemento al mismo tiempo.

La implementación de un bloqueo binario es simple; basta con un vector de la


siguiente forma: donde el booleano es en sí el indicador del bloqueo.

Bloqueos de lectura/escritura

Son una ampliación de los bloqueos binarios. Tenemos que el bloqueo puede
tener tres posibles posiciones: libre, bloqueado para lectura, y bloqueado para
escritura. De esta forma, más de una transacción puede tener un mismo
elemento de datos bloqueado para lectura, pero sólo una para escritura. Si una
transacción quiere escribir en ese elemento, habrá de esperar a que el bloqueo
quede libre (cualquiera que sea el tipo de bloqueo), y a continuación, bloquearlo
para escritura. Si quiere leer, sólo tendrá que esperar si el elemento está
bloqueado para escritura. Se dice, por tanto, que el bloqueo de lectura es
compartido y el de escritura exclusivo. Tendremos por tanto tres operaciones;
bloquear_escritura(X), bloquear_lectura(X) y desbloquear(X).

Problemas del bloqueo en dos fases: interbloqueo y espera indefinida


El interbloqueo se produce cuando cada transacción T en un conjunto de dos o
más transacciones está esperando a algún elemento que está bloqueado por
alguna otra transacción T' de dicho conjunto. En este estado, cada transacción
está parada en espera a que otra transacción libere el recurso. Las condiciones
para que se produzca en interbloqueo son las siguientes:
1. Exclusión mutua. Cada elemento está bloqueado por una
transacción, o está libre.

2. Retención y espera: Una transacción que ya tiene elementos


bloqueados puede solicitar un elemento adicional, y esperar que se le
asigne, sin devolver previamente ninguno de los anteriores.

3. No apropiación: Sólo puede liberar un elemento la transacción que lo


tiene asignado; no se lo puede quitar otra transacción que tenga mayor
prioridad, ni el SGBD.

4. Espera circular: Existe una cadena circular, compuesta por dos


transacciones o más, y otros tantos elementos intercalados, de manera
que cada proceso está esperando que se le asigne un elemento, el cual,
a su vez, está asignado al siguiente proceso de la cadena.

5. Bloqueo mutuo o deadlock: Un proceso se encuentra en estado de


deadlock si esta esperando por un suceso que no ocurrirá nunca. Se
puede producir en la comunicación de procesos y mas frecuentemente en
la gestión de recursos.

Existen cuatro condiciones necesarias para que se pueda producir deadlock:

· Los procesos necesitan acceso exclusivo a los recursos.


· Los procesos necesitan mantener ciertos recursos exclusivos mientras
esperan por otros.
· Los recursos no se pueden obtener de los procesos que están a la espera.
· Existe una cadena circular de procesos en la cual cada proceso posee uno o
más de los recursos que necesita el siguiente proceso en la cadena.

El tratamiento del interbloqueo está orientado bien a prevenirlo, bien a


detectarlo y evitarlo.

Protocolos de prevención de interbloqueo

Bloqueo en dos fases conservador: consiste en ordenar todos los elementos


de la base de datos y asegurarse de que una transacción que necesite varios
elementos los bloqueará según ese orden. Su inconveniente es que obliga al
programador a conocer la manera en que están ordenados estos elementos.

Detección del interbloqueo: este enfoque es más práctico, y más interesante


si esperamos que haya poca interferencia entre transacciones. La forma más
sencilla y conocida es mediante el grafo de espera de
transacciones/elementos. Se tiene que existe interbloqueo si el grafo de espera
tiene un ciclo. El sistema revisa periódicamente este grafo, y si encuentra un
ciclo, elige una transacción víctima para abortarla y así romper el anterior. El
inconveniente de este sistema es decidir una política adecuada para la
frecuencia de la comprobación y la selección de víctimas.

IMPORTANTE:

La concurrencia es un fenómeno que se presenta en varios contextos. Uno de


ellos es la multiprogramación ya que el tiempo del procesador es compartido
dinámicamente por varios procesos.
Otro caso son las aplicaciones estructuradas, donde la programación
estructurada se implementa como un conjunto de procesos concurrentes. Y por
último se tiene que la misma estructuración recién mencionada es utilizada en el
diseño de los sistemas operativos, los cuales se implementan como un conjunto
de procesos.

El termino concurrencia se refiere al hecho de que los DBMS (SISTEMAS DE


ADMINISTRACION DE BD) permiten que muchas transacciones puedan
accesar a una misma base de datos a la vez.

En un sistema de estos se necesitan algún tipo de mecanismos de control de


concurrencia para asegurar que las transacciones concurrentes no interfieran
entre sí.

SERIABILIDAD

La serialización es el criterio de lo correcto, para el control de la concurrencia.


Un conjunto entrelazado de transacciones es correcto si es serializable. Es decir,
si produce el mismo resultado mediante la ejecución en serie de las mismas
transacciones. Dado un conjunto de transacciones entrelazadas, cualquier
ejecución de esas transacciones se dice que es una calendarización
(“scheduling”)

Esta es la ejecución de esta aseveración:

1. - Las transacciones individuales son tomadas como correctas, es decir, se da


por hecho que transforman un estado correcto de la base de datos en otro estado
correcto.

2. - Por lo tanto, también es correcta la ejecución de una transacción a la vez en


cualquier orden serial y se dice en cualquier orden serial debido a que las
transacciones individuales son consideradas independientes entre sí.

3. - Por lo tanto, una ejecución intercalada es correcta cuando equivale a una


ejecución serial, es decir cuando es seriable.

Es la propiedad que garantiza que un plan de ejecución concurrente es


equivalente al secuencial.

Formas de planificar la seriabilidad: 1) por conflicto 2) por visión

Por simplicidad solo se consideran las operaciones de lectura y escritura.


No se consideran las operaciones de cálculo sobre los datos obtenidos.

Seriabilidad por conflicto

 Eliminar conflictos entre dos o más transacciones

 Operaciones sobre los mismos datos en más de una transacción *


 Tipos de operaciones:

o T1: lectura y T2: lectura

 No hay conflicto

o T1: lectura y T2: escritura ó T1: escritura y T2: lectura

 Conflicto: hay que respetar el orden

o T1: escritura y T2: escritura

 Conflicto: el orden afecta al valor final de la BD

 Se dice que hay conflicto cuando se consideran operaciones sobre los


mismos datos en dos transacciones diferentes

 Un plan de ejecución se puede transformar en otro cambiando de orden


las instrucciones y manteniendo la seriabilidad

 Todos estos planes son equivalentes al plan secuencial.

Seriabilidad por visión

 Se basa en definir una regla de equivalencia menos estricta que la de


conflicto.

 Pero basándose solo en las operaciones de lectura y escritura.

 Se puede considerar como un refinamiento de la equivalencia por


conflicto.

Ordenamiento por entidades


En bases de datos, una entidad es la representación de un objeto o concepto
del mundo real que se describe en una base de datos.

Una entidad se describe en la estructura de la base de datos empleando


un modelo de datos.

Por ejemplo, nombres de entidades pueden ser: Alumno, Empleado, Artículo,


etc.

Cada entidad está constituida por uno o más atributos. Por ejemplo, la entidad
"Alumno" podría tener los atributos: nombre, apellido, año de nacimiento, etc.

En el modelo de entidad-relación se emplean dos tipos de entidades: entidad


fuerte y entidad débil.
Las entidades fuertes tienen atributos claves, en tanto las entidades débiles no
tienen atributos claves propios.

3. SEGURIDAD:
DEFINICIÓN DE UN ESQUEMA DE SEGURIDAD

Al concepto de seguridad también se le puede llamar privacidad


El problema de la seguridad consiste en lograr que los recursos de un sistema
sean, bajo toda circunstancia, utilizados para los fines previstos.

LA FIABILIDAD DEL SISTEMA

EL CONCEPTO DE SEGURIDAD LO MEDIMOS EN:


La protección del sistema frente a ataques externos.

La protección frente a caídas o fallos en el software o en el equipo.

La protección frente a manipulación por parte de usuarios no autorizados.

PRINCIPIOS BÁSICOS PARA LA SEGURIDAD

Suponer que el diseño del sistema es público:


•El defecto debe ser: sin acceso.

•Chequear permanentemente.

•Los mecanismos de protección deben ser simples, uniformes y construidos en


las capas más básicas del sistema.

MEDIDAS DE SEGURIDAD

FÍSICAS: Controlar el acceso al equipo.


Mediante tarjetas de acceso…

PERSONAL: Acceso solo de personal autorizado.


Identificación directa de personal…

SGBD: Uso de herramientas que proporcione el SGBD


Perfiles de usuario, vistas, restricciones de uso de vistas…

MEDIDAS DE SEGURIDAD

HAY DOS TIPOS DE SEGURIDAD:

•OBLIGATORIA
•Sirve para imponer seguridad de varios niveles tanto para los usuarios como
para los datos.

•Para eso se utilizan mecanismos de protección.

REQUISITOS PARA LA SEGURIDAD DE LAS BD

La base de datos debe ser protegida contra el fuego, el robo y otras formas de
destrucción.
Los datos deben ser reconstruibles, ya que siempre pueden ocurrir accidentes.
Los datos deben poder ser sometidos a procesos de auditoria.
El sistema debe diseñarse a prueba de intromisiones, no deben poder pasar
por alto los controles.
Ningún sistema puede evitar las intromisiones malintencionadas, pero es
posible hacer que resulte muy difícil eludir los controles.
El sistema debe tener capacidad para verificar que sus acciones han sido
autorizadas.
Las acciones de los usuarios deben ser supervisadas, de modo tal que pueda
descubrirse cualquier acción indebida o errónea.

CARACTERÍSTICAS PRINCIPALES

El objetivo es proteger la Base de Datos contra accesos no autorizados.

LAS 3 PRINCIPALES CARÁCTERÍSTICAS DE LA SEGURIDAD EN UNA


BASE DE DATOS SON:

La Confidencialidad de la información
La Integridad de la información
La Disponibilidad de la información

TIPOS DE USUARIOS

HAY DOS TIPOS DE USUARIOS:


•Usuario con derecho a crear, borrar y modificar objetos y que además puede
conceder privilegios a otros usuarios sobre los objetos que ha creado.

•Usuario con derecho a consultar, o actualizar, y sin derecho a crear o borrar


objetos. Privilegios sobre los objetos, añadir nuevos campos, indexar, alterar la
estructura de los objetos, etc.

IDENTIFICACIÓN Y AUTENTIFICACIÓN

En un SGBD existen diversos elementos que ayudan a controlar el acceso a


los datos.
En primer lugar el sistema debe identificar y autentificar a los usuarios
utilizando alguno de las siguientes formas:

IDENTIFICACIÓN Y AUTENTIFICACIÓN
•Código y contraseña

•Identificación por hardware

•Conocimiento, aptitudes y hábitos del usuario

•Crear identificadores

MATRIZ DE AUTORIZACIÓN
La seguridad se logra si se cuenta con un mecanismo que limite a los usuarios
a su vista o vistas personales.
La norma es que la base de datos relacionales cuente con dos niveles de
seguridad:

•Relación: Puede permitírsele o impedírsele que el usuario tenga acceso directo


a una relación.

•Vista: Puede permitírsele o impedírsele que el usuario tenga acceso a la


información que aparece en una vista.
INYECCIÓN SQL
¿QUÉ ES LA INYECCIÓN SQL?
INYECCIÓN SQL

SELECT * FROM usuarios WHERE usuario =


‘ " + Usuario + “ ‘ and password=‘ "+ pass+ “ ‘;
INYECCIÓN SQL
•Un usuario cualquiera colocaría su nombre y su password de la siguiente
manera:

SELECT * FROM usuarios WHERE usuario=


' pepe' and password =' 020304'

INYECCIÓN SQL
•Hasta aquí todo normal, pero un usuario podría modificar el campo password:

SELECT * FROM usuarios WHERE usuario =


' pepe' and password=' 020304' OR passwordLIKE '%'

INYECCIÓN SQL
•Como hemos visto la inyección SQL se ha hecho con el fin de burlar la
restricción de acceso, pero se pueden realizar cosas más desastrosas en la BD,
como por ejemplo:
DROP TABLE usuarios

PROTEGERSE DE INYECCIÓN SQL


•ASIGNACION DE MÍNIMOS PRIVILEGIOS
–Debe tener los privilegios necesarios, ni más ni menos.

•VALIDAR TODAS LAS ENTRADAS


–Especifique el tipo de dato de entrada, si son números, asegúrese de que son
solo números.

•EMPLEO DE PROCEDIMIENTOS ALMACENADOS


–Utilizar procedimientos almacenados y aceptar los datos del usuario como
parámetros en lugar de comandos SQL.

•UTILIZAR COMILLAS DOBLES EN LUGAR DE SIMPLES


–Puesto que las comillas simples finalizan las expresiones SQL, y posibilitan la
entrada de expresiones de más potencia.

INYECCIÓN SQL
•Como hemos visto la inyección SQL se ha hecho con el fin de burlar la
restricción de acceso, pero se pueden realizar cosas más desastrosas en la BD,
como por ejemplo:

DROP TABLE usuarios

PROTEGERSE DE INYECCIÓN SQL


•ASIGNACION DE MÍNIMOS PRIVILEGIOS
–Debe tener los privilegios necesarios, ni más ni menos.

•VALIDAR TODAS LAS ENTRADAS


–Especifique el tipo de dato de entrada, si son números, asegúrese de que son
solo números.

•EMPLEO DE PROCEDIMIENTOS ALMACENADOS


–Utilizar procedimientos almacenados y aceptar los datos del usuario como
parámetros en lugar de comandos SQL.

•UTILIZAR COMILLAS DOBLES EN LUGAR DE SIMPLES


–Puesto que las comillas simples finalizan las expresiones SQL, y posibilitan la
entrada de expresiones de más potencia.

PROTEGERSE DE INYECCIÓN SQL


•La inyección SQL es fácil de evitar en la mayoría de los lenguajes de
programación que desarrollan aplicaciones web

PROTEGERSE DE INYECCIÓN SQL


•EN PHP
–Para MySQL, la función a usar es mysql_real_escape_string:
Ejemplo:
$query_result= mysql_query("SELECT * FROM usuariosWHERE nombre=
\"" . mysql_real_escape_string($nombre_usuario) . "\"");

PROTEGERSE DE INYECCIÓN SQL


•EN JAVA
–En Java, tenemos que usar la clase PreparedStatement

En vez de:
Connectioncon = (acquireConnection) Statementstmt= con.createStatement();
ResultSetrset= stmt.executeQuery("SELECT * FROM usuarios WHERE nombre
= '" + nombreUsuario+ "';");

Habría que poner:


Connectioncon = (acquireConnection) PreparedStatement pstmt=
con.prepareStatement("SELECT * FROM usuarios WHERE nombre = ?");
pstmt.setString(1, nombreUsuario); ResultSetrset= pstmt.executeQuery();

PROTEGERSE DE INYECCIÓN SQL


•EN C#

–El siguiente ejemplo muestra cómo prevenir los ataques de inyección de código
usando el objeto SqlCommand

PROTEGERSE DE INYECCIÓN SQL


En vez de:
using(SqlConnectioncon = (acquireconnection) ) { con. Open(); using(
SqlCommandcmd= new SqlCommand("SELECT * FROM usuarios WHERE
nombre = '" + nombreUsuario+ "'", con) ) { using( SqlDataReaderrdr=
cmd.ExecuteReader() ){ ... } } }

Habría que usar:

using(SqlConnectioncon = (acquireconnection) ) { con. Open(); using(


SqlCommandcmd= new SqlCommand("SELECT * FROM usuarios WHERE
nombre = @nombreUsuario", con) ) {
cmd.Parameters.AddWithValue("@nombreUsuario", nombreUsuario); using(
SqlDataReaderrdr= cmd.ExecuteReader() ){ ... } } }

Você também pode gostar