Você está na página 1de 16

Lenguaje SQL

SEGURIDAD EN SGBDR Introduccin a la seguridad en los SGBDR.


Hay dos trminos que se encuentran ntimamente ligados al concepto de seguridad en los sistemas de gestin de bases de datos: Confidencialidad: impedir que usuarios no autorizados accedan a informacin para la que no tienen permiso. Disponibilidad: garantizar que la informacin est accesible para los usuarios autorizados.

Los S !"# definen un esquema de seguridad en el que podemos encontrar b$sicamente tres elementos: usuarios, objetos de la base de datos y privilegios . Seg%n este esquema un usuario tiene determinados pri&ilegios o derec'os de acceso a los objetos de la base de

datos. La mayora de los fabricantes implementa este modelo aunque pueden e(istir algunas &ariaciones en los formatos para la gestin de usuarios y en algunas caractersticas a&anzadas )perfiles* grupos y roles+. ,n este tema utilizaremos los formatos y ejemplos basados en el S !" -racle &. . y / que son aplicables en su mayor parte a los dem$s los productos comerciales. ,n todo caso se 'ar$n las obser&aciones oportunas con el fin de facilitar la compatibilidad con otros productos.

Usuarios: creacin.
0n usuario es una entidad conocida por la base de datos que tiene ciertos privilegios sobre algunos objetos de la misma y permisos para realizar determinadas acciones. 1ara que un usuario sea conocido por la base de datos tiene que 'aber sido creado. 2ormalmente es el administrador de la base de datos quien se encarga de esta labor. ,l comando para crear usuarios es:
CREATE USER idusuario IDENTIFIED BY palabradepaso;

Lenguaje SQL

"onde: 3 idusuario es el identificador de usuario o nombre de usuario. "eber$ ser un identificador SQL &$lido )comenzar por un car$cter alfabtico* etctera+ . 3 palabradepaso es una contrase4a* cla&e o pass5ord asociada al identificador. 1or ejemplo* si queremos crear el usuario 6L078 lo 'aremos:
SQL> CREATE USER alu01 IDENTIFIED BY curso; Usuario creado.

"e esta forma 'emos creado el usuario alu78. 6'ora* el siguiente paso es concederle pri&ilegios para poder trabajar en la base de datos.

Privilegios
1odemos distinguir dos tipos de pri&ilegios: Privilegios del sistema: Son permisos para realizar determinadas acciones sobre algn tipo genrico de objetos. 1or ejemplo* para poder crear usuarios se necesita tener el pri&ilegio CRE !E "SER y para poder eliminar usuarios se requiere el pri&ilegio DR#$ "SER. -tros pri&ilegios del sistema son: 3 3 3 3 3 3 3 %!ER "SER para poder modificar caractersticas de otros usuarios. CRE !E ! &%E para poder crear tablas. CRE !E SESS'#( para poder crear una sesin )conectar+ con la base de datos. CRE !E $"&%'C S)(#()* para crear sinnimos p%blicos. DR#$ $"&%'C S)(#()* para borrar sinnimos p%blicos. +R (! () $R','%E+E para poder conceder pri&ilegios del sistema. ,tctera.

Lenguaje SQL

1ara asignar pri&ilegios del sistema a un usuario se utiliza el comando el siguiente formato:
GRANT listadeprovilegiosdelsistema TO listadeusuarios;

#629 con

"onde: 3 listadeprivilegiosdelsistema especifica algunos de los pri&ilegios del sistema establecidos. 3 listadeusuarios especifica los identificati&os de los usuarios a los que se concede el pri&ilegio. ,l siguiente comando concede al usuario alu01 los pri&ilegios del sistema necesarios para conectarse a la base de datos ):#,69, S,SS;-2+ y para crear tablas ):#,69, 96!L,+:
SQL> GRANT CREATE SESSION, CREATE TABLE TO alu01; Concesin terminada con xito.

Privilegios sobre objetos: Son permisos para realizar acciones concretas sobre objetos concretos. 1or ejemplo: permiso para consultar la tabla clientes* para insertar en la tabla de pedidos* para modificar la tabla de productos* etctera. La mayora de los gestores de bases de datos admiten los siguientes pri&ilegios de objeto para tablas y vistas: S,L,:9 ;2S,#9 01"69, ",L,9,

,l formato genrico para la asignacin de estos pri&ilegios es:


GRANT listadeprivilegiosdeobjeto listadeusuarios; ON nombredeobjeto TO

1ara conceder al usuario alu01 el pri&ilegio de consultar e insertar en la tabla departamentos escribiremos:

Lenguaje SQL

SQL > GRANT SELECT, INSERT ON DEPARTAMENTOS TO ALU01; Concesin terminada con xito.

,l formato anterior se puede ampliar para el privilegio "$D !E especificando -opcionalmente. las columnas sobre las que se concede tal pri&ilegio. ,l siguiente ejemplo concede al usuario alu01 el pri&ilegio de actualizar las columnas dnombre y localidad de la tabla departamentos.
SQL > GRANT UPDATE (dnombre, localidad) ON DEPARTAMENTOS TO ALU01;

9ambin se pueden asignar todos los permisos posibles sobre un objeto utilizando la opci/n %% $R','%E+ES en lugar de la lista de pri&ilegios.
SQL > GRANT ALL PRIVILEGES ON DEPARTAMENTOS TO ALU01;

(ota0 $rivilegios sobre tablas usuario. :uando un usuario crea una tabla ese objeto pasa a ser de su propiedad )se dice que el objeto pertenece al usuario+ y dispone de todos los pri&ilegios de acceso a la tabla. 9ambin podr$ conceder pri&ilegios sobre la tabla a otros usuarios.

Retirada de privilegios
$ara retirar los privilegios de 1ue dispone un usuario se utiliza sentencia RE,#2E cuyo formato es similar al de la sentencia #629 . 9ambin en este caso 'ay dos formatos dependiendo de si se trata de pri&ilegios del sistema o de pri&ilegios sobre objetos. Retirada de privilegios del sistema. 1ara retirar a un usuario privilegios del sistema se utilizar$ el siguiente formato:
REVOKE listadeprovilegiosdelsistema FROM listadeusuarios;

Lenguaje SQL

1ara retirar el pri&ilegio :#,69, 96!L, a el usuario alu78 escribiremos:


SQL> REVOKE CREATE TABLE FROM alu01; Denegacin terminada con xito.

Retirada de privilegios de objeto. 1ara retirar privilegios de objeto utilizaremos el siguiente formato:
REVOKE listadeprivilegiosdeobjeto listadeusuarios; ON nombredeobjeto FROM

,l siguiente ejemplo retira al usuario alu01 el pri&ilegio de insercin sobre la tabla departamentos.
SQL > REVOKE INSERT ON DEPARTAMENTOS FROM ALU01; Denegacin terminada con xito.

9ambin se puede utilizar la opci/n %% $R','%E+ES para retirar los todos los privilegios 1ue pueda tener un usuario sobre un determinado objeto .
SQL > REVOKE ALL PRIVILEGES ON EMPLEADOS FROM ALU01;

2ota: la instruccin RE,#2E no admite la especificaci/n de columnas )a diferencia de lo que ocurre con #629+. La retirada del pri&ilegio deber$ afectar a toda la tabla.
SQL> REVOKE UPDATE (dnombre, localidad) ON DEPARTAMENTOS FROM ALU01; REVOKE UPDATE (dnombre, localidad) ERROR en lnea 1: ORA-01750: UPDATE/REFERENCES slo se pueden denegar de toda la tabla, no por columna

Si quitamos la especificacin de columnas la instruccin se 'ar$ efecti&a.

Lenguaje SQL

SQL> REVOKE UPDATE ON DEPARTAMENTOS FROM ALU01; Denegacin terminada con xito.

Roles.
La gestin de usuarios y pri&ilegios tal como se 'a estudiado en el apartado anterior puede resultar muy laboriosa ya que consistira en conceder a cada uno de los usuarios los pri&ilegios del sistema y de objeto necesarios. 1or esta razn se utilizan los roles. Simplificando* podemos definir un rol como un conjunto de privilegios. :on un rol se pueden 'acer las siguientes operaciones: :rear el rol: para poder utilizar un rol primero deberemos crearlo utilizando el siguiente formato:
CREATE ROLE nombrederol;

"onde nombrederol es cualquier identificador &$lido. 0na &ez creado podemos asignar al rol los pri&ilegios necesarios utilizando el mismo formato que para asignar pri&ilegios a un usuario:
GRANT listadeprovilegiosdelsistema TO listaderoles;

- bien:
GRANT listadeprivilegiosdeobjeto ON nombredeobjeto TO listaderoles;

,l rol se le puede asignar a un usuario o incluso a otro rol con lo que este %ltimo acumulara los pri&ilegios correspondientes:
GRANT listaderoles TO listadeusuarios; GRANT listaderoles TO listaderoles2;

9ambin se pueden retirar pri&ilegios de uno o &arios roles de manera idntica a como se 'acia con los usuarios::
REVOKE listaderoles; listadeprovilegiosdelsistema FROM

- tambin:
REVOKE listadeprivilegiosdeobjeto FROM listaderoles; ON nombredeobjeto

Lenguaje SQL

1ara elinimar un rol utilizaremos el siguiente formato:


DROP ROLE listaderoles;

,jemplos: < :reamos el #-L emp.


SQL> CREATE ROLE emp; Rol creado.

SQL> GRANT CREATE SESSION, ALTER SESSION, CREATE TABLE, del sistema indicados. CREATE VIEW TO emp; Concesin xito. terminada con

< 6signamos al rol emp los pri&ilegios

SQL> GRANT emp TO ALU01; Concesin terminada xito.

< 6signamos el rol emp a alu78. 6'ora alu78 tiene todos los pri&ilegios con asociados al rol emp )mas los que pudiera tener pre&iamente+. < ,liminamos uno de los pri&ilegios del rol emp. 9ambin le quitar$ a todos los usuarios que lo tu&iesen concedido a tra&s de ese rol.

SQL> REVOKE CREATE VIEW FROM emp; Denegacin xito. terminada con

SQL> CREATE ROLE jef; Rol creado.

< :reamos un nue&o rol llamado jef.

SQL> GRANT prog, CREATE TABLE, SELECT ANY TABLE TO )con todos sus adem$s jef; Concesin xito. terminada con

< 6signamos al nue&o rol el rol prog pri&ilegios+ de otros pri&ilegios adicionales.

SQL> GRANT ALU03;

jef

TO

ALU02,

< 6signamos el nue&o rol a los usuarios

Roles predefinidos

Lenguaje SQL

-racle &iene con una serie de roles predefinidos que facilitan la gestin de usuarios y recursos. 1odemos destacar:

#ol
C#((EC!

Se suele para:

utilizar

;ncluye los siguientes pri&ilegios:

6L9,# S,SS;-2* :#,69, 9odos los usuarios de :L0S9,#* :#,69, "696!6S, la base de datos que L;2=* :#,69, S,Q0,2:,* pertenecen a la :#,69, S,SS;-2* :#,69, compa4a o entidad. S>2-2>?* :#,69, 96!L,* :#,69, @;,A :#,69, :L0S9,#* :#,69, de 1#-:,"0#,* :#,69, S,Q0,2:,* :#,69, 96!L,* :#,69, 9#; ,# todos los pri&ilegios del sistema 6dministradores de la A;9H 6"?;2 -19;-2. base de datos "esarrolladores aplicaciones.

RES#"RCE

D&

E3$45"%%4D ! & S S,L,:9 62> 96!L,* !6:=01 -peradores de copias 62> 96!L,. E de seguridad.

,stos roles permiten: asignar pri&ilegios a usuarios. asignar pri&ilegios a otros roles incluir nue&os pri&ilegios en los roles predefinidos. retirar aquellos pri&ilegios que puedan considerarse inoportunos. < 6signa el rol :-22,:9 con todos sus pri&ilegios al usuario alu01.

,jemplos: SQL> GRANT CONNECT TO alu01; Concesin terminada con xito.

SQL> GRANT RESOURCE TO jef; Concesin terminada con xito. SQL> GRANT CREATE PROCEDURE TO CONNECT; Concesin terminada con xito.

< 6signa el rol #,S-0#:, con todos sus pri&ilegios al #-L jef, que suponemos creado.

< 64ade el pri&ilegio :#,69, 1#-:,"0#, al rol :-22,:9 )y a todos los usuarios que tengan dic'o rol+

Lenguaje SQL

< #etira los pri&ilegios :#,69, SQL> REVOKE CREATE 1#-:,"0#, y :#,69, @;,A del PROCEDURE,CREATE VIEW FROM rol :-22,:9 )y de todos los usuarios CONNECT; que tu&iesen los pri&ilegios a tra&s de dic'o rol. Denegacin terminada con < @uel&e a dar el pri&ilegio xito. :#,69, @;,A al rol :-22,:9. SQL> GRANT CREATE VIEW TO CONNECT; Concesin terminada con xito.

2ota: aunque puede 'acerse* no suele ser una buena idea asignar o retirar pri&ilegios a los roles predefinidos por el sistema. ,s preferible crear otros roles y trabajar con ellos.

Privilegios con opcin de administracin

Privilegios del sistema con opcin de administracin :omo ya 'emos mencionado* normalmente es el administrador de la base de datos quien se encarga de crear usuarios y asignar pri&ilegios. ,l usuario receptor del pri&ilegio puede utilizarlo l mismo pero no puede* en principio* conceder ese pri&ilegio a otros usuarios. $ara 1ue un usuario pueda administrar un del sistema deber$: 3 !ener el privilegio del sistema +R (! () $R','%E+E .

1ara asignar este pri&ilegio a un usuario se proceder$ como si se tratase de cualquier otro pri&ilegio del sistema: SQL> GRANT GRANT ANY PRIVILEGE TO alu01; ,sto permite al usuario conceder cualquier pri&ilegio del sistema a otros usuarios incluso a el propio usuario en el caso de que no tu&iese alguno de los pri&ilegios cuya administracin se le concede* tal como se puede obser&ar en la secuencia siguiente.

Lenguaje SQL

SQL> GRANT GRANT ANY PRIVILEGE TO alu01; Concesin terminada con xito. SQL> CONNECT ALU01; Introduzca su clave: ***** Conectado. SQL> CREATE ROLE PRUEBAS; CREATE ROLE PRUEBAS * ERROR en lnea 1: ORA-01031: privilegios insuficientes SQL> GRANT CREATE ROLE TO ALU01; Concesin terminada con xito. SQL> CREATE ROLE PRUEBAS; Rol creado.

-> El administrador concede al usuario alu01 el privilegio el sistema GRANT ANY PRIVILEGE. - > Se conecta el usuario alu01. (El administrador ya no est conectado) -> El usuario intenta crear un objeto denominado rol. -> El sistema le devuelve un error indicando que no tiene privilegios para crear tal objeto. -> El usuario se concede a s mismo el privilegio requerido. ->Ahora el sistema le permite crear el rol.

Normalmente la opcin anterior solamente se concede a administradores de la base de datos. 3 !ener un determinado privilegio del sistema con la opci/n de administraci/n 67'!7 D*'( #$!'#(.

1ara conceder un pri&ilegio del sistema con la opcin de administracin se a4adir$ dic'a opcin al comando #629 como en el ejemplo siguiente: SQL> GRANT CREATE PUBLIC SYNONYM TO ALU01 WITH ADMIN OPTION; ,n el ejemplo anterior se asigna al usuario alu01 el pri&ilegio de crear sinnimos p%blicos con la posibilidad de que* a su &ez* pueda asignar este pri&ilegio a otros usuarios. 1ara retirar la opcin de administracin de todos los pri&ilegios del sistema Las opciones anteriores son &$lidas para pri&ilegios del sistemaB pero e(iste una opcin similar para los privilegios de objeto. Privilegios de objeto con opcin de administracin. Los objetos son propiedad de los usuarios que los crean* que poseen todos los pri&ilegios sobre dic'os objetos* as como la posibilidad de conceder pri&ilegios sobre los mismos a otros usuarios.

Lenguaje SQL

,stos otros usuarios no pueden conceder a terceros los pri&ilegios recibidos sobre el objeto )en principio+. 1ara 'abilitar esta posibilidad* la concesin del pri&ilegio deber$ realizarse con la opcin A;9H #629 -19;-2. ,jemplo: Supongamos que el usuario cursosql es el propietario de la tabla departamentos y quiere conceder los pri&ilegios S,L,:9 e ;2S,#9 al usuario alu01 con la posibilidad de que este* a su &ez* pueda conceder tales derec'os a otros usuarios. ,l usuario cursosql deber$ proceder: SQL> GRANT SELECT, INSERT ON DEPARTAMENTOS TO ALU01 WITH GRANT OPTION; 6'ora el usuario alu78 podr$ conceder los pri&ilegios recibidos a otros usuarios. 9ambin se puede conceder la opcin de administracin de todos los permisos sobre un objeto a un usuario como se muestra a continuacin: SQL> GRANT ALL PRIVILEGES ON DEPARTAMENTOS TO ALU01 WITH GRANT OPTION; Retirada de la opcin de administracin de privilegios. ,(isten las siguientes posibilidades: #etirar la opcin de administracin de todos los pri&ilegios del sistema

SQL> REVOKE GRANT ANY PRIVILEGE FROM alu01;

#etirada de la opcin de administracin de todos los pri&ilegios que un usuario pueda tener sobre un objeto: Se utilizar$ la opcin 6LL 1#;@;L, ,S ya que con ella tambin se retiran los derec'os de administracin.

SQL> REVOKE ALL PRIVILEGES ON departamentos FROM alu01;

Lenguaje SQL

#etirar uno o &arios pri&ilegios junto con la opcin de administracin: Solamente 'abr$ que retirar el pri&ilegio ya que se retira tambin la opcin de administracin como en el ejemplo siguiente:

SQL> REVOKE CREATE PUBLIC SYNONYM FROM alu01; 2ota.3 2o se puede retirar solamente la opcin de administracin para un pri&ilegio del sistema )o para un rol+ * pero podemos conseguir esto retirando el pri&ilegio del sistema y &ol&indolo a asignar sin la opcin de administracin. 6 continuacin se muestra cmo eliminarla opcin de administracin del pri&ilegio :#,69, 10!L;: S>2-2>?. SQL> REVOKE CREATE PUBLIC SYNONYM FROM alu01; Denegacin terminada con xito. SQL> GRANT CREATE PUBLIC SYNONYM TO alu01 Concesin terminada con xito.

CC materialesDD 1odemos comprobar los pri&ilegios del sistema que posee un usuario consultado la &ista "!6ES>SE1#;@S SQL> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ALU01'; GRANTEE PRIVILEGE ADM --------------------------------------------------------------------CREATE PUBLIC SYNONYM CREATE ROLE CREATE SESSION CREATE TABLE

--- ALU01 YES ALU01 NO ALU01 NO ALU01 NO

Utilizacin de sinnimos pblicos y privados. 0n sinnimo es un nombre que significa lo mismo que otro. ,n una base de datos se suelen crear sinnimos con los siguientes propsitos: 6islar a los usuarios y a las aplicaciones de los posibles cambios de nombre de los objetos. Facilitar el acceso a objetos con nombres largos o difciles.

Lenguaje SQL

Facilitar el acceso a objetos situados en diferentes esquemas.

Los sinnimos pueden permitirnos: 3 3 3 3 que los usuarios de una multinacional &ean la tabla de clientes nombr$ndola cada uno en su propio idioma ):0S9-?,#S* :L;,29,S* ...+. acceder a la tabla ;?1E";:GGE!:-E@H8#,@ como ?-#-S-S. acceder a la tabla S>S9,?.:L;,29,S como :L;,29,S. etctera.

0n sinnimo se crea utilizando la orden :#,69, S>2-2>? seg%n el siguiente formato: CREATE SYNONYM nombredelsinonimo FOR objeto; 1or ejemplo* podemos crear un sinnimo que nos permita referirnos a las tablas empleados y departamentos como emp y dep: SQL> CREATE SYNONYM EMP FOR EMPLEADOS; Sinnimo creado. SQL> CREATE SYNONYM DEP FOR DEPARTAMENTOS; Sinnimo creado. 6'ora podemos utilizar indistintamente el nombre o el sinnimo para referirnos a cualquiera de las dos tablas para recuperar informacin* insertar* borrar o modificar filas* etctera: SQL> SELECT * FROM DEP; DEP_NO ---------10 20 30 40 DNOMBRE -------------CONTABILIDAD INVESTIGACION VENTAS PRODUCCION LOCALIDAD ---------BARCELONA VALENCIA MADRID SEVILLA

Los sinnimos pueden facilitarnos el acceso a las tablas que se encuentran en otros esquemas )que son de otros usuarios+. 1or ejemplo* el usuario alu01 puede crearse un sinnimo para acceder a la tabla empleados del usuario cursosql* ya que de otra forma tendra que referirse a ella como cursosql.empleados. SQL> CONNECT ALU01 Introduzca su clave: *****

Lenguaje SQL

Conectado. SQL> CREATE SYNONYM EMPLEADOS FOR CURSOSQL.EMPLEADOS; Sinnimo creado. 1or supuesto* el 'ec'o de tener un sinnimo creado sobre un objeto no sustituye a los permisos necesarios para acceder a tal objeto. "e manera que si el usuario alu01 no tu&iese permiso para acceder a la tabla empleados del usuario cursosql el sistema le dejar$ crear el sinnimo )si dispone de tal pri&ilegio+ pero no acceder$ a la informacin. Sinnimos pblicos. Los sinnimos creados como 'emos &isto en el apartado anterior son operati&os solamente para el usuario que lo crea. Cuando 1ueremos 1ue el sin/nimo sea visible y operativo para todos los usuarios de la base de datos crearemos un sin/nimo pblico utilizando la sentencia CRE !E $"&%'C S)(#()* segn el siguiente formato: CREATE PUBLIC SYNONYM nombredelsinonimo FOR objeto; 1or ejemplo* el usuario cursosql puede crear un sinnimo p%blico para la tabla empleados de su propiedad: SQL> CREATE PUBLIC SYNONYM EMPLEADOS FOR CURSOSQL.EMPLEADOS; Sinnimo creado. 0na &ez creado el sinnimo p%blico* cualquier usuario de la base de datos podr$ referirse al objeto utilizando el sinnimo. 1ara poder crear un sinnimo p%blico 'ace falta tener el pri&ilegio :#,69, 10!L;: S>2-2>?.

Eliminacin de sinnimos. 1ara eliminar un sinnimo utilizaremos el comando "#-1 S>2-2>? seg%n se especifica en el siguiente formato: DROP SYNONYM nombredelsinonimo; - bien* si se trata de un sinnimo p%blico: DROP PUBLIC SYNONYM nombredelsinonimo;

Lenguaje SQL

,jemplo: SQL> DROP PUBLIC SYNONYM EMPLEADOS; Sinnimo borrado. 2ota: :on este comando se borra el sinnimo pero no el objeto al que 'ace referencia.

Você também pode gostar