Ver Mensaje Individual
  #66 (permalink)  
Antiguo 01/02/2006, 14:42
Avatar de mauriciolangea
mauriciolangea
 
Fecha de Ingreso: enero-2002
Mensajes: 59
Antigüedad: 22 años, 10 meses
Puntos: 0
Interbase

Tema : Interbase / Firebird

Pregunta : ¿Qúe son los Roles?

Respuesta

Los Roles son parte del sistema de seguridad de Firebird/InterBase. Permiten que se manejen de manera más fácil los permisos, ya que podemos crear roles y asignarles los permisos a éstos (y también revocárselos).

Posteriormente se puede asignar un rol a uno o más usuarios.
De esta manera ya no repetimos la asignación de permisos por cada tabla a cada usuario, facilitando la asignación de permisos y creando una especie de "tipos de usuarios".
Esto es muy útil cuando las bases de datos tienen muchas tablas, procedimientos y vistas.

Por ejemplo, supongamos que tenemos un rol SUPER_USUARIO definido con TODOS los privilegios sobre la tabla PRUEBA.

SQL> create table prueba (i1 integer);

SQL> create role SUPER_USUARIO;

SQL> grant all on prueba to SUPER_USUARIO;

SQL> show grant prueba;
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES
ON PRUEBA TO SUPER_USUARIO

A los usuarios USUARIO1 y USUARIO2 le consederemos que asuman los privilegios del rol SUPER_USUARIO.

SQL> grant SUPER_USUARIO to USUARIO1;
SQL> grant SUPER_USUARIO to USUARIO2;

Ahora los usuarios USUARIO1 y USUARIO2 tienen todos los privilegios para la tabla PRUEBA, cuando ellos se conecten asumiendo el rol SUPER_USUARIO. Si los usuarios USUARIO1 y USUARIO2 intentan conectarse sin asumir el rol SUPER_USUARIO, entonces, no tendrán privilegio alguno sobre la tabla PRUEBA.


Ejemplo 1.- Conexión sin asumir el rol SUPER_USUARIO.

SQL> connect basededato.gdb user usuario1 password usuario1;
Database: basededato.gdb, User: usuario1

SQL> select * from prueba;
Statement failed, SQLCODE=-551
no permission for read/select access to table PRUEBA


Ejemplo 2.- Conexión asumiendo el rol SUPER_USUARIO.

SQL> connect basededato.gdb user usuario1 password usuario1 role super_usuario;
Database: basededato.gdb, User: usuario1

SQL> select * from prueba;