Sunteți pe pagina 1din 15

Seguridadenlas

BasesdeDatos
Autor:AlfonsoPalomares
Correccin:JavierRebagliatti
SeguridadenlasBasesdedatosbyAlfonsoPalomaresislicensedundera
CreativeCommonsAtribucinNoComercialSinDerivadas3.0UnportedLicense.
Pgina115
11.Seguridadenlasbasesdedatos
11.1.Introduccinalaseguridad
La seguridad en las bases de datos est signada por varios factores. Primero, las leyes
definidas dentro del pas donde se van a albergar los datos. Los cuales se ven afectados
conforme a lo almacenado como a lo que posteriormente puede ser consumido desde
nuestro almacn de datos. Estos datos, conocidos como datos sensibles de las personas,
que revelan origen racial y tnico, opiniones polticas, convicciones religiosas, filosficas o
morales, afiliacin sindical e informacin referente a la salud o a la vida sexual. Son los que
estn amparados por el derecho de habeas data, por lo que no pueden ser almacenados sin
unfinjustoyelusodeestosdebeserconfinesamparadosporlaticaylaley .
1
Por otro lado, tenemos la seguridad signada por la organizacin donde estemos generando
este juego de datos, organizacin que definir cules y cmo son los accesos a la
informacin.Sobreestosconceptossernlosquetrabajaremosmsprofundamente.
Recordemos adems, que no slo es materia de seguridad el cuidado de la intromisin
sobre los datos, sino tambin el poder conservar en el tiempo los datos, aportando
durabilidaddelosmismos.
11.1.1.SeguridaddesdeelpuntodevistadelDBA
El administrador de la base de datos (Data Base Administrator) es quien debe determinar
que la informacin almacenada es la que debera ser y quien debe impedir que los ataques
maliciosos modifiquen u obtengan informacin de la base de datos que no debera ser
accesible.
Paralograresto,elDBAdebe
Manejarcuentasdeusuario
Asignarprivilegiosaesascuentas
Definirnivelesdeseguridad
con estas tres acciones el dba maneja las diferentes escalas de acceso al conjunto de
datos.
Para realizar estas tareas, se defini un subconjunto de instrucciones ANSISQL que se di
enllamarLenguajedeControldeDatos(eningls:DataControlLanguageDCL).
11.1.1.1.Administrarcuentasdeusuario
Eldbapuedecrear,inhabilitaroborrarunusuario.
1
Art43ConstitucinNacionalArgentina
Pgina215
De forma genrica, para acceder a una base de datos tenemos al usuario y al grupo al que
pertenece.Lospermisospuedenasignarseaesteusuarioy/oalgrupoalquepertenece.
Algunos Motores de bases de datos, dividen al usuario como Usuario de Acceso y usuario
de Base de datos, en lugar de usuario y grupo. Pudiendo adems llamarse ambos de
distinta manera. Esto ocurre, por ejemplo en MSSQL Server, cuando para crear un usuario
debemoshacerlosiguiente
CREATELOGINusuarioWITHPASSWORD='clave'
CREATEUSERmi_usuarioFORLOGINusuario
Donde el Login es el usuario de acceso. Luego el User ser la identidad dentro de la base
dedatos.
En otras bases de datos, los usuarios se llaman Roles. Por ejemplo en Postgresql, cuando
debemoshacerlosiguiente
CREATEROLEusuarioWITHLOGINPASSWORD'clave'VALIDUNTIL
'20130101'
Conlaparticularidadque,comosonRoles,losgrupostambinlosllamaroles.
Mientras que en otros motores, como Oracle, podemos crear usuarios y roles, para
identificaralosprimerosdeformapuntualylossegundosdeformagenrica.
CREATEUSERusuarioIDENTIFIEDBY'clave'
CREATEROLEusuarios
Paraborrarusuarios,siemprepodemoshacerlomediantelainstruccinDROP
Entonces, podemos definir accesos o denegarlos para un usuario o para un grupo,
aplicndoloatodoslosquepertenecenaestegrupo.
11.1.1.2.Privilegiosenlasbasesdedatos
Cada uno de los usuarios en la base de datos tiene privilegios y solo pueden operar con
esosdatoscuandoestnautorizadosparahacerlo.
Pgina315
Lospermisospuedendarsesegn
eltipodeAccin
Select
Update
Delete
Insert
elobjetousado
todalatabla
Algncampo
Paraanalizarcmosecomportanestospermisos,analizaremosvariosejemplos.
Ejemplo1.Select
SELECT*
FROMtabla1
Para que el usuario pueda ejecutar esta consulta, debera tener acceso a todos los campos
delatabla1.
Ejemplo2.Select
SELECTa,b
FROMtabla1
Para que el usuario pueda ejecutar esta consulta, debera tener acceso a la tabla1 y solo los
camposdeayb.
Veamosahoraunejemplounpocomscomplejo
UPDATEtabla2
SETcampoA=b
WHEREcampoBIN
(SELECTcampo1
FROMtabla1
WHEREcampo2>78)
Para poder realizar esta actualizacin, el usuario debera poder tener permisos de
actualizacin (Update) sobre el campoA de la tabla2, y de seleccin (select) sobre el
campoB.
Mientras que tambin debera tener permisos de seleccin (select) sobre los campos
campo1ycampo2delatabla1.
Pgina415
El no contar con alguno de estos privilegios hara que el usuario no pueda efectuar esta
consulta.
Ejemplodeborrado
DELETEFROMtabla1
WHEREcampo2NOTIN
(SELECTcampoCFROMtabla2)
Los privilegios que debera tener el usuario para efectuar este borrado, debera ser, sobre la
tabla1,permisosdeborradoydeseleccinsobreelcampo2.
Mientrasqueparalatabla2,deberapoderseleccionarsobreelcampoc.
11.1.2.Seguridadyauditoradebasededatos
Un aspecto interesante de las bases de datos es como poder hacer un seguimiento reactivo
respecto de la seguridad, manteniendo una auditora de lo realizado por cada usuario o
grupodeusuariosencadamomentodentrodelabasededatos.
Recordemos que para una base de datos, cualquier sistema que se conecta a ella es
consideradocomounusuario.
Teniendo esto en cuenta, podemos decir que sera de sobrada utilidad, saber qu usuario o
sistema realiza cul operacin, con qu frecuencia, qu objetos se utilizaron de la base y si
serealizaronbloqueossobrelosmismos.
La herramienta que est a nuestra disposicin para trabajar con esto es el log transaccional
de la base de datos. El cual, siempre mantiene las operaciones realizadas sobre los objetos.
Solo se debe contemplar, almacenar tambin quin es el usuario que realiz dicha tarea,
cul fue la hora de inicio y cul la de finalizacin. Adems, guardar la sintaxis de lo realizado,
paraaspoderreproducirlo.
Es trabajo del DBA gestionar estas estadsticas, ponerlas a disposicin y actuar en
consecuencia,paraprevenirproblemasenlaseguridaddelosdatos.
Cada motor de bases de datos, cuenta con un manejo de auditora diferente, ya que no hay
nada prefijado por un estndar para cubrir este aspecto de las bases de datos. Igualmente,
todoslosmotoressenutrendeloalmacenadoenellogtransaccional.
11.1.3.Seguridadyprivacidad.Similitudesydiferencias
Cuando hablamos de seguridad en las bases de datos pensamos en distintos controles para
que los conjuntos de informacin sean usados para los fines que fueron ideados y no sean
alcanzadosporquienesnodeberanhacerlo.Seanpersonasosistemas.
Mientras tanto, cuando pensamos en privacidad, nuestro pensamiento refiere directamente a
Pgina515
quepartedeunconjuntodedatospuedesersensible.
Estos dos aspectos, se juntan en numerosos puntos. Sobre todo cuando cuando somos
conscientesdequeyporquestamosdandoseguridadaciertosdatosdelaorganizacin.
Por ejemplo, cuando pensamos en datos estratgicos para la organizacin, necesitamos
segurizarlos y darle privacidad. Que sean alcanzados por solo un conjunto de usuarios en
unmomentodeterminado.
Estos dos conceptos se alejan cuando apuntamos la seguridad en los pilares de la
prevencindecambiosenlosdatos,ocontrolesdehardware,entreotros.
11.2.Asignandoyrevocandopermisos
Para trabajar con permisos, se defini un un lenguaje, conocido como lenguaje de control de
datos, o DCL por su sigla en ingls (Data Control Languaje). Este lenguaje tiene tres
palabrasreservadas
GRANTREVOKEDENY
De estas, GRANT es la que nos permite asignar permisos a un usuario o a un grupo de
usuarios, REVOKE es aquella que nos sirve para eliminar un permiso dado, mientras que
DENY sirve para denegar permisos sobre un objeto de la base de datos. Cabe destacar, que
la instruccin DENY no forma parte del estndar, lo cual hace que solo se incluya en algunos
motoresdebasededatos.
Construccindelalneabsicaparaasignarpermisos
Pgina615
Construccindelalneabsicapararevocarpermisos
Veremosahoraalgunosejemplosdeasignacindepermisos.
Para darle permisos al usuario BDD1 sobre la tabla tablaEj. Con este permiso le
permitiramosaccederatodosloscamposdedichatabla.
GRANTSELECTONtablaEjTOBDD1
MientrasquesiquisiramosquesolotengaaccesoaloscamposC1yC2dedichatabla
Postgresql MSSqlServer
GRANTSELECT(C1,C2)
ONtablaEjTOBDD1
GRANTSELECT
ONtablaEj(C1,C2)TOBDD1
Colocamos solo dos ejemplos de distintos motores, para que vean que el predicado, o lo
queacompaaalGRANTpuedeescribirsededistintamanera.
Si quisiramos que el usuario BDD1, tenga permisos para acceder a la tabla y adems
poderactualizarlosdatosdeberamosdefinir
GRANTSELECT,UPDATE
ONtablaEjTOBDD1
Como vemos, cada accin que quisiramos agregar para que el usuario pueda hacer, se
puede realizar haciendo la indicacin de las columnas, asignando permisos slo sobre
estas,osindefinirlas,teniendopermisossobretodaslascolumnas.
Lo mismo sucede sobre que permiso estoy definiendo, puede ser de seleccin,
Pgina715
actualizacin, borrado, manejo de triggers, ejecucin de funciones y/o procedimientos, entre
otroscasos.
Veamos ahora, cmo asignarle permisos al usuario BDD1 sobre la columna C1 para hacer
unselectyunpermisoparahaceractualizacionessobrelacolumnaC2.
Postgresql MSSqlServer
GRANTSELECT(C1),
UPDATE(C2)
ONtablaEjTOBDD1
GRANTSELECT
ONtablaEj(C1)TOBDD1
GRANTUPDATE
ONtablaEj(C2)TOBDD1
Por otro lado, si quisiramos darle a un sistema que usa el usuario SIST1 permisos slo
parainsertaryborrarenlatablatablaEjdeberamoshacer
GRANTINSERT,DELETE
ONtablaEjTOBDD1
Veremosahoraalgunasrevocacionesdepermisos.
PararevocarlelospermisosalusuarioBDD1sobrelatablatablaEj
REVOKESELECTONtablaEjFROMBDD1
A diferencia de cuando asignamos permisos, que usamos la palabra reservada TO, como
diciendo darle este permiso A tal usuario, a la hora de revocar un permiso, usamos la
palabra reservada FROM, para indicar a qu usuario queremos removerle el permiso ya
dado.
Podemosrevocarmuchasvecesunpermiso,sinproblemasaquenosdeerror.
Otro ejemplo que podemos ver, es si quisiramos revocar el permiso que tena sobre los
camposC1yC2dedichatabla
Postgresql MSSqlServer
REVOKESELECT(C1,C2)
ONtablaEjFROMBDD1
REVOKESELECT
ONtablaEj(C1,C2)
FROMBDD1
Pgina815
Colocamos solo dos ejemplos de distintos motores, para que vean que el predicado, o lo
queacompaaalREVOKEpuedeescribirsededistintamanera.
Comoseve,pararevocarpermisos,laestructuraessimilarqueparaasignarlos.
Veremosahoraalgunasdenegacionesdepermisossobreobjetos.
En algunos motores, las instrucciones de DENY o denegacin explcita de permisos, no
existe.Laformadetrabajarqueutilizanesdarpermisosenlugardedenegarlos.
Los motores tomados como ejemplo en los apartados anteriores, no nos sirven para
demostrar este caso. Postgresql no cuenta (hasta su versin 9, la ltima al momento de
escribiresto)conlaprimitivaDENY.AsquereemplazaremosaPostgresqlpororacle.
Oracle MSSqlServer
DENYSELECTONtablaEj
TOBDD1
DENYSELECTONtablaEj
TOBDD1
Insistimos en que esto es una breve muestra conceptual de la aplicacin de permisos sobre
objetos. Lo cual no quiere decir que no existan otras combinaciones para aplicar en los
objetosdebasesdedatos.
Aplicacindepermisosencascada
Si un usuario ha recibido algn tipo de permiso, puede asignarlo a otros usuarios, y as
sucesivamente.Locualhace,quesepuedacrearunasuertederboldepermisos.
Esta estructura o rbol, puede ser manejado por el primer usuario que asign el permiso,
pudiendorevocaralaestructuraquefuedefinidadesdesunivelhaciaabajo.
La forma en que se procesa esto, es mediante una sucesin de GRANT y luego aplicando
REVOKE.
En los casos que el permiso fuera asignado hacia otro usuario, el primer usuario debe usar
la palabra reservada CASCADE para poder revocar el permiso. Revocando a todos los que
forman parte de ese rbol que depende de ese permiso. Si no lo hace, no puede eliminar el
permiso,porquesteasignadohaciaotrousuario.
Veremos ahora, breves ejemplos que nos grafican las diferentes formas de proceder a la
horadetenerestasalternativas.
Pgina915
Pgina1015
11.3.SeguridadMultinivel
Por ahora, hemos visto los diferentes permisos que pueden tener los usuarios respecto a
las consultas que pueden hacer sobre los diferentes objetos. Hablamos de cmo permitir y
restringir columnas (o campos) dentro de las tablas, todas las tablas, esquemas o bases de
datos. Hablaremos ahora de mecanismos para dar seguridad a la informacin que se
encuentradentrodelastablas,paraestosecrealaseguridadMultinivel.
Cuando empezamos a pensar en este tipo de seguridad, tenemos que considerar que cada
valor de los atributos de una instancia relacin debe estar acompaado por un descriptor del
niveldeseguridadenqueseencuentraesedato.
Generalmente, los niveles de seguridad suelen estar asociados a una etiqueta (o Label en
ingls) que definir cuan reservado es un valor de un campo en una tabla en un momento
dado.Estasetiquetassuelenser:
Claramente, estas etiquetas son propuestas tpicas. Cada solucin tiene la posibilidad de
enmarcarsuspropiasetiquetasysupropiodiseodeseguridad.
Si algo est definido en el nivel de confidencialidad de uso interno de la compaa,
todos los usuarios que tengan ese permiso o permisos superiores podrn ver esos datos,
msnopodrnhacerloaquellosquetenganunpermisopblico.
11.3.1.FormatodeRelacin
Las relaciones debern tener para cada uno de sus atributos, una etiqueta que identifique el
acceso al dato en cuestin, tupla a tupla, permitiendo as identificar quien tiene acceso a cual
dato.
Pgina1115
Representacindeunatuplaconetiquetas
Ejemplos
Pgina1215
Como vemos, el conjunto de datos siempre es el mismo, pero segn los permisos del
usuarioobtendrmsomenosinformacin.
La implementacin de estos esquemas depende de cada sistema gestor de bases de datos
(SGBD).
11.4.SQLInjection:Comofuncionaycmoprevenir
El mtodo de ejecucin de cdigo SQL llamado SQL injection, o infiltracin de cdigo SQL
en castellano, refiere a la ejecucin de cdigo no deseado en base a la explotacin de una
vulnerabilidadenunsistemainformtico.
Esto ocurre cuando el contenido de controles, tanto en sistemas escritorio o web, utilizan el
contenido generado por el usuario dentro de un control para realizar consultas a la base de
datos.
Pgina1315
Veamosunejemplo
Como vemos, en el sistema, se tiene un cuadro de texto (o textbox) donde se pide ingresar
un valor numrico. Este valor numrico se incluye en un texto que se ejecutar en la base de
datosparaobtenerresultados.
Si en lugar de ponerse el valor buscado, se utiliza dicho cuadro de texto para cualquier otro
fin,sepuedeincurrirengraveserroresdeseguridad,comoseplanteaenelejemplo.
Haymuchasformasdeevitaresto.Algunasdeellasson
validar todo el contenido de los cuadros de texto o lugares donde el usuario realice un
ingresodetexto,
parametrizarlosingresosdeconsultasensql,
filtradodelingreso,comprobandotiposdedatosyutilizandotransacciones.
Pgina1415
Pgina1515

S-ar putea să vă placă și