121 - Privilegios del sistema (conceder)


Primer problema:

Una escuela necesita crear 3 usuarios diferentes en su base de datos. Uno denominado "director", otro "profesor" y otro "estudiante". Luego se les concederán diferentes permisos para retringir el acceso a los diferentes objetos. Conéctese como administrador (por ejemplo "system").

1- Cree un usuario denominado "director", con contraseña "escuela", asignándole 100M de espacio en "system" (100M). Antes elimínelo por si existe:

2- Intente iniciar una sesión como "director".
No es posible, no hemos concedido el permiso correspondiente. Aparece un mensaje indicando que el usuario "director" no tiene permiso "create session" por lo tanto no puede conectarse.

3- Vea los permisos de "director"
No tiene ningún permiso.

4- Conceda a "director" permiso para iniciar sesion y para crear tablas

5- Vea los permisos de "director"
Tiene permiso "create session" y para crear tablas.

6- Inicie una sesión como "director".

7- Como "administrador", elimine los usuarios "profesor" y "alumno", por si existen

8- Cree un usuario denominado "profesor", con contraseña "maestro", asigne espacio en "system" (100M)

9- Cree un usuario denominado "estudiante", con contraseña "alumno" y tablespace "system" (no asigne "quota")

10- Consulte el diccionario de datos correspondiente para ver si existen los 3 usuarios creados

11- Conceda a "profesor" y a "estudiante" permiso para conectarse

12- Conceda a "estudiante" permiso para crear tablas

13- Consulte el diccionario de datos "sys_privs" para ver los permisos de los 3 usuarios creados
"director" y "estudiante" tienen permisos para conectarse y para crear tablas, "profesor" tiene permiso para conectarse.

14- Retome su sesión como "director" y cree una tabla:

 create table prueba(
  nombre varchar2(30),
  apellido varchar2(30)
 );

Podemos hacerlo poque "director" tiene el permiso necesario y espacio en "system".

15- Inicie una sesión como "profesor" e intente crear una tabla:

 create table prueba(
  nombre varchar2(30),
  apellido varchar2(30)
 );

Mensaje de error "privilegios insuficientes". Esto sucede porque "profesor" NO tiene permiso para crear tablas.

16- Consulte los permisos de "profesor"
No tiene permiso para crear tablas, únicamente para crear sesión.

17- Cambie a la conexión de administrador y conceda a "profesor" permiso para crear tablas

18- Cambie a la sesión de "profesor" y cree una tabla
Ahora si podemos hacerlo, "profesor" tiene permiso "create table".

19- Consulte nuevamente los permisos de "profesor"
Tiene permiso para crear tablas y para crear sesión.

20- Inicie una sesión como "estudiante" e intente crear una tabla:

 create table prueba(
  nombre varchar2(30),
  apellido varchar2(30)
 );

Mensaje de error "no existen privilegios en tablespace SYSTEM". Esto sucede porque "estudiante", si bien tiene permiso para crear tablas, no tiene asignado espacio (recuerde que al crearlo no especificamos "quota", por lo tanto, por defecto es cero).

21- Vuelva a la conexión de "administrador" y consulte todas las tablas denominadas "PRUEBA"
Note que hay una tabla propiedad de "director" y otra que pertenece a "profesor".

Ver solución

 drop user director cascade;

 create user director identified by escuela
 default tablespace system
 quota 100M on system;

 select *from dba_sys_privs where grantee='DIRECTOR';

 grant create session, create table
  to director;

 select *from dba_sys_privs where grantee='DIRECTOR';

 drop user profesor cascade;
 drop user alumno cascade;

 create user profesor identified by maestro
 default tablespace system
 quota 100M on system;

 create user estudiante identified by alumno
 default tablespace system;

 select username, password, default_tablespace, created from dba_users;

 grant create session
  to profesor, estudiante;

 grant create table
  to estudiante;

 select *from dba_sys_privs where grantee='DIRECTOR'
 or grantee='PROFESOR'
 or grantee='ESTUDIANTE';

 create table prueba(
  nombre varchar2(30),
  apellido varchar2(30)
 );

 create table prueba(
  nombre varchar2(30),
  apellido varchar2(30)
 );

 select *from user_sys_privs;

 grant create table
  to profesor;

 create table prueba(
  nombre varchar2(30),
  apellido varchar2(30)
 );

 select *from user_sys_privs;

 create table prueba(
  nombre varchar2(30),
  apellido varchar2(30)
 );

 select *from dba_objects where object_name='PRUEBA';

 


Retornar