miércoles, 13 de junio de 2012

Oracle - Privilegios


  • Los privilegios son permisos para ejecutar sentencias SQL en particular o acceso a los distintos objetos que posea otros usuarios. 
  • Los privilegios dan acceso a los usuarios a los datos que no poseen. Los roles con grupos de privilegios que facilitan la administración de los privilegios. Pero los privilegios se pueden manejar de manera explícita en algunas circunstancias. 
  • Al crear un usuario, solo puede acceder a los objetos que el mismo a creado. 
  • Las sentencias para conceder o revocar privilegios son grant (conceder) y revoke (revocar) 

Los privilegios que pueden otorgarse sobre objetos son los siguientes:

Privilegio
Capacidades Otorgadas
select
Puede consultar a un objeto.
insert
Puede insertar filas en una tabla o vista. Puede especificarse las columnas donde se permite insertar dentro de la tabla o vista.
update
Puede actualizar filas en una tabla o vista. Puede especificarse las columnas donde se permite actualizar dentro de la tabla o vista.
delete
Puede borrar filas dentro de la tabla o vista.
alter
Puede alterar la tabla.
index
Puede crear índices de una tabla.
references
Puede crear claves ajenas que referencie a esta tabla.
execute
Puede ejecutar un procedimieto, paquete o función.
connect
Puede realizar la conexión a la base de datos
resource
Puede hacer lectura de recursos

La información de los privilegios otorgados se almacena en el diccionario de datos. Estos datos son accesibles a través de las siguientes vistas del diccionario de datos:

Vista
Contenidos
DBA_ROLES
Nombres de los roles y su estado del password.
DBA_ROLES_PRIVS
Usuarios a los que han sido otorgados roles.
DBA_SYS_PRIVS
Usuarios a los que han sido otorgados privilegios del sistema.
DBA_TAB_PRIVS
Usuarios a los que han sido otorgados privilegios sobre objetos.
DBA_COL_PRIVS
Usuarios a los que han sido otorgados privilegios sobre columnas de tablas.
ROLE_ROLE_PRIVS
Roles que han sido otorgados a otros roles.
ROLE_SYS_PRIVS
Privilegios de sistema que han sido otorgados a roles.
ROLE_TAB_PRIVS
Privilegios de tabla que han sido otorgados a roles.

Ejemplos de privilegios

Sintaxis
Acción
grant connect to 'nicolas':
Permite que el usuario nicolas conectarse a la base de datos.
grant resource to 'nicolas':
Perte al usuario nicolas hacer lectura de los recursos.
grant select on otratabla to nicolas;
Permite al usuario nicolas realizar un select en la tabla otratabla.
grant insert on otratabla to nicolas;
Permite al usuario nicolas realizar un insert en la tabla otratabla.
grant update on otratabla to nicolas;
Permite al usuario nicolas realizar un update en la tabla otratabla.
grant delete on otratabla to nicolas;
Permite al usuario nicolas realizar un delete en la tabla otratabla.
grant execute on mifuncion to nicolas;
Permite al usuario nicolas ejecutar la función mifuncion.
select *
from dba_tab_privs
where grantee = 'nicolas';
Lista los privilegios que el usuario nicolas tiene en el sistema.

Puede ser que en algún momento nos arroje algún error o excepción, de ser así podríamos intentar con <otro-usuario>.<tabla>, por ejemplo:
grant select on pedro.usuarios to nicolas;
Lo que permite al usuario nicolas hacer un select de la tabla usuarios perteneciente al usuario pedro.

Es importante tener en cuenta que normalmente no se ocupan los privilegios a un usuario específico, si no que a roles, producto que por ejemplo tenemos 10 usuarios, perteneciente al rol vendedor, y nosotros aplicamos el privilegio al rol vendedor. Ejemplo:
create role ROLE_VENDEDOR;
grant insert on ventas to ROLE_VENDEDOR;

0 comentarios:

Publicar un comentario