Diferència entre revisions de la pàgina «Pràctiques de Gestió d'Usuaris»

De wikiserver
Dreceres ràpides: navegació, cerca
(Autenticació i creació d'usuaris, permisos, rols i privilegis)
(Autenticació i creació d'usuaris, permisos, rols i privilegis)
 
(Hi ha 15 revisions intermèdies del mateix usuari que no es mostren)
Línia 39: Línia 39:
 
  DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
 
  DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
 
  TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
 
  TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
  CREATED                                   NOT NULL DATE
+
  CREATED     ]                            NOT NULL DATE
 
  PROFILE                                  NOT NULL VARCHAR2(30)
 
  PROFILE                                  NOT NULL VARCHAR2(30)
 
  INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
 
  INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
Línia 143: Línia 143:
  
 
SQL> select * from dba_sys_privs where privilege ='CREATE USER';
 
SQL> select * from dba_sys_privs where privilege ='CREATE USER';
GRANTEE
+
 
PRIVILEGE
 
ADM
 
------------------------------ ---------------------------------------- ---
 
DBA
 
CREATE USER
 
YES
 
ADMINISTRADOR
 
CREATE USER
 
NO
 
IMP_FULL_DATABASE
 
CREATE USER
 
NO
 
 
</pre>
 
</pre>
 +
 
9. Hacer lo mismo para el privilegio “create session”.  
 
9. Hacer lo mismo para el privilegio “create session”.  
 
<pre>
 
<pre>
Línia 163: Línia 152:
 
10. Crear dos "tablespace" llamados NOMINA y ACADEMO, que contendrán datos relativos a las aplicaciones de nomina y datos académicos de los empleados de una empresa, según las siguientes características:  
 
10. Crear dos "tablespace" llamados NOMINA y ACADEMO, que contendrán datos relativos a las aplicaciones de nomina y datos académicos de los empleados de una empresa, según las siguientes características:  
  
[[Imatge:tablespaces-nomina-academo.png |180px|center| Entitats]]
+
[[Imatge:tablespaces-nomina-academo.png |400px|center| descripció tablespaces]]
  
 
<pre>
 
<pre>
 +
SQL> create tablespace academo datafile '/u02/oradata/CURSO01/academo01.dbf'size 1M
 +
2 autoextend on next 200k maxsize 1400K
 +
3 default storage (initial 16k next 16k
 +
4 minextents 1 maxextents 3);
  
 +
Tablespace created.
 +
 +
SQL> create tablespace nomina datafile '/u02/oradata/CURSO01/nomina01.dbf'size 1M
 +
2 autoextend on next 100K maxsize 1500K
 +
3 default storage (initial 16k next 16k
 +
4 minextents 1 maxextents 3);
 +
Tablespace created.
 
</pre>
 
</pre>
  
 
11. Crear dos "tablespace" temporales, manejados de forma local, llamados TEMP_NOMINA y TEMP_ACADEMO con las siguientes características:  
 
11. Crear dos "tablespace" temporales, manejados de forma local, llamados TEMP_NOMINA y TEMP_ACADEMO con las siguientes características:  
 +
[[Imatge:tablespaces-temporals.png |400px|center| tablespaces temporals]]
 +
<pre>
  
<pre>
+
SQL> create temporary tablespace temp_academo
 +
2 tempfile '/u04/oradata/CURSO01/temp_academo01.dbf'
 +
3 size 500k autoextend on next 50k maxsize 600k
 +
4 extent management local uniform size 100k;
 +
 
 +
Tablespace created.
 +
 
 +
SQL> create temporary tablespace temp_nomina
 +
2 tempfile '/u04/oradata/CURSO01/temp_nomina01.dbf'
 +
3 size 600k autoextend on next 50k maxsize 700k
 +
4 extent management local uniform size 100k;
  
 +
Tablespace created.
 
</pre>
 
</pre>
  
Línia 179: Línia 192:
  
 
<pre>
 
<pre>
 
+
SQL> connect administrador
 +
Enter password:
 +
Connected.
 +
SQL> create role administrador;
 +
create role administrador
 +
*
 +
ERROR at line 1:
 +
ORA-01031: insufficient privileges
 
</pre>
 
</pre>
  
Línia 185: Línia 205:
  
 
<pre>
 
<pre>
 
+
SQL> connect system
 +
Enter password:
 +
Connected.
 +
SQL> create role administrador;
 +
create role administrador
 +
*
 +
ERROR at line 1:
 +
ORA-01921: role name 'ADMINISTRADOR' conflicts with another user or role name
 
</pre>
 
</pre>
  
Línia 191: Línia 218:
  
 
<pre>
 
<pre>
 
+
SQL> select * from dba_sys_privs where privilege ='CREATE ROLE';
 
</pre>
 
</pre>
  
Línia 197: Línia 224:
  
 
<pre>
 
<pre>
 +
 +
SQL> create role admin;
 +
Role created.
 +
 +
SQL> grant create session to admin;
 +
Grant succeeded.
 +
 +
SQL> grant create user to admin
 +
 +
SQL> grant create user to admin
 +
 +
SQL> grant create role to admin
 +
 +
SQL> grant admin to administrador;
  
 
</pre>
 
</pre>
Línia 203: Línia 244:
  
 
<pre>
 
<pre>
 +
 +
SQL> select * from dba_sys_privs where grantee ='ADMINISTRADOR'
 +
 +
SQL> revoke create session from administrador;
 +
 +
SQL>revoke create user from administrador
 +
Revoke succeeded.
 +
 +
SQL> grant admin to administrador;
 +
Grant succeeded.
  
 
</pre>
 
</pre>
Línia 209: Línia 260:
  
 
<pre>
 
<pre>
 +
 +
SQL> create user prueba01 identified by prueba01;
  
 
</pre>
 
</pre>
Línia 215: Línia 268:
  
 
<pre>
 
<pre>
 +
 +
SQL> select substr(username,1,15) usuario, DEFAULT_TABLESPACE ,
 +
TEMPORARY_TABLESPACE
 +
2 from dba_users
 +
3 where username in ('SYS','SYSTEM','ADMINISTRADOR','PRUEBA00','PRUEBA01');
 +
 +
SQL> select substr(username,1,15) usuario, tablespace_name, max_bytes from
 +
dba_ts_quotas
 +
where
 +
username
 +
in ('SYS','SYSTEM','ADMINISTRADOR','PRUEBA00','PRUEBA01')
  
 
</pre>
 
</pre>
Línia 221: Línia 285:
  
 
<pre>
 
<pre>
 +
 +
SQL> create user prueba02 identified by prueba02
 +
2 default tablespace nomina
 +
3 temporary tablespace temp_nomina;
  
 
</pre>  
 
</pre>  
Línia 227: Línia 295:
  
 
<pre>
 
<pre>
 +
 +
SQL> alter user prueba01 temporary tablespace temp_academo;
 +
 +
SQL> alter user prueba01 default tablespace academo;
  
 
</pre>
 
</pre>
Línia 233: Línia 305:
  
 
<pre>
 
<pre>
 +
 +
SQL> select * from dba_ts_quotas where username in ('PRUEBA01','PRUEBA02');
  
 
</pre>
 
</pre>
Línia 239: Línia 313:
  
 
<pre>
 
<pre>
 +
 +
SQL> create role conexion;
 +
 +
SQL> grant create session to conexion;
  
 
</pre>
 
</pre>
Línia 245: Línia 323:
  
 
<pre>
 
<pre>
 +
 +
SQL> grant conexion to prueba00, prueba01, prueba02;
  
 
</pre>
 
</pre>
Línia 251: Línia 331:
  
 
<pre>
 
<pre>
 +
 +
SQL> select * from dba_role_privs where grantee in ('PRUEBA00','PRUEBA01','PRUEBA02');
  
 
</pre>
 
</pre>
Línia 266: Línia 348:
  
 
¿Es posible hacerlo?, ¿falta algún permiso?.  
 
¿Es posible hacerlo?, ¿falta algún permiso?.  
 +
 +
<pre>
 +
 +
SQL> connect prueba01
 +
 +
SQL> CREATE TABLE CODIGOS
 +
2 (CODIGO varchar2(3),
 +
3 DESCRIPCION varchar2(20))
 +
4 TABLESPACE ACADEMO
 +
5 STORAGE (INITIAL 64K
 +
6 NEXT 64K
 +
7 MINEXTENTS 5
 +
8* MAXEXTENTS 10)
 +
 +
CREATE TABLE CODIGOS
 +
*
 +
ERROR at line 1:
 +
ORA-01031: insufficient privileges
 +
 +
</pre>
  
 
26. Crear un rol llamado “DESARROLLO” y asignarle los permisos "CREATE SEQUENCE", "CREATE SESSION", "CREATE SYNONYM", "CREATE TABLE" y "CREATE VIEW". Asignar el rol “DESARROLLO” a los usuarios “prueba00”, “prueba01” y “prueba02”.  
 
26. Crear un rol llamado “DESARROLLO” y asignarle los permisos "CREATE SEQUENCE", "CREATE SESSION", "CREATE SYNONYM", "CREATE TABLE" y "CREATE VIEW". Asignar el rol “DESARROLLO” a los usuarios “prueba00”, “prueba01” y “prueba02”.  
  
 
<pre>
 
<pre>
 +
 +
SQL> connect system
 +
 +
SQL> create role desarrollo;
 +
Role created.
 +
 +
SQL> grant create sequence, create session, create synonym, create table, create view to desarrollo;
 +
Grant succeeded.
 +
 +
SQL> grant desarrollo to prueba00, prueba01, prueba02;
 +
Grant succeeded.
  
 
</pre>
 
</pre>
Línia 277: Línia 390:
 
<pre>
 
<pre>
  
 +
SQL> connect prueba01
 +
 +
Introduzca su clave:
 +
Connected.
 +
 +
SQL> CREATE TABLE CODIGOS
 +
2 (CODIGO varchar2(3),
 +
3 DESCRIPCION varchar2(20))
 +
4 TABLESPACE ACADEMO
 +
5 STORAGE (INITIAL 64K
 +
6 NEXT 64K
 +
7 MINEXTENTS 5
 +
8 MAXEXTENTS 10)
 +
 +
CREATE TABLE CODIGOS
 +
*
 +
ERROR at line 1:
 +
ORA-01950: no privileges on tablespace 'ACADEMO'
 
</pre>
 
</pre>
  
 
28. Asignar cuota ilimitada al usuario “prueba01” en el "tablespace" ACADEMO. Volver a repetir el ejercicio 26.  
 
28. Asignar cuota ilimitada al usuario “prueba01” en el "tablespace" ACADEMO. Volver a repetir el ejercicio 26.  
 +
 +
<pre>
 +
 +
SQL> connect system
 +
Enter password:
 +
Connected.
 +
 +
SQL> alter user prueba01 quota unlimited on academo;
 +
 +
SQL> connect prueba01
 +
Enter password:
 +
Connected.
 +
 +
SQL> CREATE TABLE CODIGOS
 +
(CODIGO varchar2(3),
 +
DESCRIPCION varchar2(20))
 +
TABLESPACE ACADEMO
 +
STORAGE (INITIAL 64K
 +
NEXT 64K
 +
MINEXTENTS 5
 +
MAXEXTENTS 10);
 +
</pre>
  
 
29. Asignar cuota ilimitada al usuario “prueba02” en el "tablespace" NOMINA.  
 
29. Asignar cuota ilimitada al usuario “prueba02” en el "tablespace" NOMINA.  
 +
<pre>
 +
 +
SQL> connect system
 +
Introduzca su clave:
 +
Connected.
 +
 +
SQL> alter user prueba02 quota unlimited on academo;
 +
User altered.
 +
</pre>
  
 
30. Obtener información sobre roles, privilegios de sistema, "tablespace" y cuotas para los usuarios “prueba00”, “prueba01” y “prueba02”.  
 
30. Obtener información sobre roles, privilegios de sistema, "tablespace" y cuotas para los usuarios “prueba00”, “prueba01” y “prueba02”.  
 +
 +
<pre>
 +
SQL> select * from dba_role_privs where grantee in ('PRUEBA00','PRUEBA01','PRUEBA02');
 +
SQL> select * from dba_sys_privs where grantee in ('PRUEBA00','PRUEBA01','PRUEBA02');
 +
SQL> select USERNAME , TABLESPACE_NAME , BYTES from dba_ts_quotas where
 +
username in ('PRUEBA00','PRUEBA01','PRUEBA02');
 +
</pre>
  
 
31. Asignar cuota cero en el "tablespace" por defecto para el usuario “prueba01”, ¿siguen estando sus objetos?, ¿es posible crear algún otro? (probad a crear un tabla).  
 
31. Asignar cuota cero en el "tablespace" por defecto para el usuario “prueba01”, ¿siguen estando sus objetos?, ¿es posible crear algún otro? (probad a crear un tabla).  
 +
 +
<pre>
 +
 +
SQL> alter user prueba01 quota 0k on academo;
 +
User altered.
 +
 +
SQL> select owner, table_name from dba_tables where owner='PRUEBA01';
 +
 +
</pre>
 +
  
 
32. Conectarse como usuario “prueba01” e intentar modificar su cuota en el "tablespace" ACADEMO, ¿es posible?.  
 
32. Conectarse como usuario “prueba01” e intentar modificar su cuota en el "tablespace" ACADEMO, ¿es posible?.  
  
33. Conectarse como usuario “prueba01” y modificar su clave, ¿es posible?.  
+
<pre>
 +
 
 +
SQL> connect prueba01
 +
Introduzca su clave:
 +
Connected.
 +
 
 +
SQL> alter user prueba01 quota unlimited on academo;
 +
alter user prueba01 quota unlimited on academo
 +
*
 +
ERROR at line 1:
 +
ORA-01031: insufficient privileges
 +
 
 +
</pre>
 +
 
 +
33. Conectarse como usuario “prueba01” y modificar su clave, ¿es posible?.
 +
 
 +
<pre>
 +
 
 +
SQL> alter user prueba01 identified by probando01;
 +
User altered.
 +
 
 +
</pre>
 +
 +
34. Averiguar que usuarios o roles de base de datos tienen asignado el privilegio ALTER USER.
 +
 
 +
<pre>
  
34. Averiguar que usuarios o roles de base de datos tienen asignado el privilegio ALTER USER.
+
SQL> connect system
 +
Introduzca su clave:
 +
Conectado.
 +
SQL> select * from dba_sys_privs where privilege='ALTER USER';
 +
 
 +
</pre>
  
 
35. Abrir una sesión con el usuario “administrador” y otra con el usuario “prueba02”. Siendo el usuario “administrador”, intentar borrar el usuario “prueba02”.  
 
35. Abrir una sesión con el usuario “administrador” y otra con el usuario “prueba02”. Siendo el usuario “administrador”, intentar borrar el usuario “prueba02”.  
  
36. .Asignar el permiso DROP USER al rol ADMIN.  
+
<pre>
 +
 
 +
SQL> show user
 +
USER es "SYSTEM"
 +
 
 +
SQL> drop user prueba02;
 +
drop user prueba02
 +
*
 +
ERROR en línea 1:
 +
ORA-01940: no se puede borrar un usuario conectado actualmente
 +
 
 +
</pre>
 +
 
 +
36.Asignar el permiso DROP USER al rol ADMIN.  
 +
<pre>
 +
 
 +
SQL> grant drop user to admin;
 +
 
 +
</pre>
  
 
37. Averiguar que usuarios o roles de base de datos tienen asignado el privilegio DROP USER.  
 
37. Averiguar que usuarios o roles de base de datos tienen asignado el privilegio DROP USER.  
 +
<pre>
 +
 +
SQL> select * from dba_sys_privs where privilege='DROP USER';
 +
 +
</pre>
  
 
38. Conectado como usuario "administrador", crear el usuario “prueba03” autentificado por base de datos y asignando cuotas en el "tablespace" ACADEMO (500K) y NOMINA (200K). Su "tablespace" temporal será TEMP.  
 
38. Conectado como usuario "administrador", crear el usuario “prueba03” autentificado por base de datos y asignando cuotas en el "tablespace" ACADEMO (500K) y NOMINA (200K). Su "tablespace" temporal será TEMP.  
 +
<pre>
 +
 +
SQL> connect administrador
 +
Enter password:
 +
Connected.
 +
SQL> create user prueba03 identified by prueba03
 +
default tablespace academo
 +
temporary tablespace temp
 +
quota 500k on academo
 +
quota 200k on nomina
 +
 +
</pre>
  
 
39. Comprobar en el fichero de inicialización si está activado el modo de limitación de recursos.  
 
39. Comprobar en el fichero de inicialización si está activado el modo de limitación de recursos.  
 +
<pre>
 +
 +
Editar el fichero de inicializacion.
 +
 +
</pre>
  
 
40. Averiguar que usuarios de base de datos o que roles tienen asignado el privilegio “CREATE PROFILE”.  
 
40. Averiguar que usuarios de base de datos o que roles tienen asignado el privilegio “CREATE PROFILE”.  
 +
<pre>
 +
 +
SQL> connect system
 +
Enter password:
 +
Connected.
 +
 +
SQL> select * from dba_sys_privs where privilege='CREATE PROFILE';
 +
 +
</pre>
  
 
41. Asignar el permiso “CREATE PROFILE” al rol ADMIN.  
 
41. Asignar el permiso “CREATE PROFILE” al rol ADMIN.  
 +
<pre>
 +
 +
SQL> grant create profile to admin;
 +
Grant succeeded.
 +
 +
</pre>
  
 
42. Averiguar que perfiles están definidos en la base de datos y que límites de recursos fija cada uno de ellos.  
 
42. Averiguar que perfiles están definidos en la base de datos y que límites de recursos fija cada uno de ellos.  
 +
<pre>
 +
 +
SQL> select substr(profile,1,12) perfil, substr(resource_name,1,25) recurso,
 +
resource_type, substr(limit,1,10) limite from dba_profiles order by profile,
 +
resource_name;
 +
 +
</pre>
  
 
43. Consultar que perfiles tiene asignados cada usuario de la base de datos.  
 
43. Consultar que perfiles tiene asignados cada usuario de la base de datos.  
 +
 +
<pre>
 +
 +
SQL> select username, profile from dba_users order by username;
 +
 +
</pre>
  
 
44. Crear un perfil llamado “DESARROLLO” con las siguientes especificaciones:  
 
44. Crear un perfil llamado “DESARROLLO” con las siguientes especificaciones:  
 +
 +
[[Imatge:perfil-desarrollo.png |250px|center| perfil desarrollo]]
 +
 +
<pre>
 +
 +
SQL> create profile desarrollo limit sessions_per_user 2 cpu_per_session unlimited
 +
cpu_per_call 6000 connect_time 480 idle_time 2 failed_login_attempts 2
 +
password_life_time 120;
 +
 +
</pre>
  
 
45. Asignar el perfil anterior a los usuarios “prueba00”, “prueba01”, “prueba02” y “prueba03”.  
 
45. Asignar el perfil anterior a los usuarios “prueba00”, “prueba01”, “prueba02” y “prueba03”.  
 +
<pre>
 +
SQL> alter user prueba00 profile desarrollo
 +
SQL> alter user prueba01 profile desarrollo
 +
SQL> alter user prueba02 profile desarrollo
 +
SQL> alter user prueba03 profile desarrollo
 +
 +
</pre>
  
 
46. Intentar la conexión dos veces como usuario “prueba01” fallando la contraseña, ¿qué sucede?. Comprobar si la cuenta ha sido bloqueada en la vista de base de datos correspondiente .
 
46. Intentar la conexión dos veces como usuario “prueba01” fallando la contraseña, ¿qué sucede?. Comprobar si la cuenta ha sido bloqueada en la vista de base de datos correspondiente .
 +
<pre>
 +
 +
SQL> connect prueba01
 +
Enter password:
 +
ERROR:
 +
ORA-01017: invalid username/password; logon denied
 +
Warning: You are no longer connected to ORACLE.
 +
...
 +
 +
SQL> connect prueba01
 +
Enter password:
 +
ERROR:
 +
ORA-28000: the account is locked
 +
SQL> select username, lock_date from dba_users where username like 'PRUEBA%';
 +
 +
</pre>
  
 
47. Crear un usuario “prueba04” con el parámetro “password expire”, sus "tablespace" por defecto y temporal serán USERS (cuota 0k) y TEMP. Asignar los roles CONEXIÓN y DESARROLLO. Conectarse como usuario “prueba04”, ¿qué sucede?.  
 
47. Crear un usuario “prueba04” con el parámetro “password expire”, sus "tablespace" por defecto y temporal serán USERS (cuota 0k) y TEMP. Asignar los roles CONEXIÓN y DESARROLLO. Conectarse como usuario “prueba04”, ¿qué sucede?.  
 +
<pre>
 +
 +
SQL> create user prueba04 identified by prueba04
 +
2 default tablespace users
 +
3 temporary tablespace temp
 +
4 quota 0k on users
 +
5 password expire
 +
 +
User created.
 +
 +
SQL> grant conexion, desarrollo to prueba04;
 +
 +
SQL> connect prueba04
 +
Enter password:
 +
ERROR:
 +
ORA-28001: the password has expired
 +
Changing password for prueba04
 +
New password:
 +
Retype new password:
 +
Password changed
 +
Connected.
 +
 +
</pre>
  
 
48. Bloquear la cuenta del usuario “prueba04”, ¿qué sucede al conectarse de nuevo?.  
 
48. Bloquear la cuenta del usuario “prueba04”, ¿qué sucede al conectarse de nuevo?.  
 +
<pre>
 +
SQL> connect system
 +
Enter password:
 +
Connected.
 +
SQL> alter user prueba04 account lock;
 +
User altered.
 +
SQL> connect prueba04
 +
Enter password:
 +
ERROR:
 +
ORA-28000: the account is locked
 +
Warning: You are no longer connected to ORACLE.
  
49. .Modificar el "tablespace" por defecto y el temporal del usuario “prueba01” de forma que sean NOMINA y TEMP_NOMINA.  
+
</pre>
 +
 
 +
49.Modificar el "tablespace" por defecto y el temporal del usuario “prueba01” de forma que sean NOMINA y TEMP_NOMINA.  
 +
<pre>
 +
 
 +
SQL> connect system
 +
Enter password:
 +
Connected.
 +
SQL> alter user prueba04 default tablespace nomina;
 +
User altered.
 +
SQL> alter user prueba04 temporary tablespace temp_nomina;
 +
User altered.
 +
 
 +
</pre>
  
 
50. Comprobar cual es el valor del parámetro OS_AUTHENT_PREFIX en la base de datos. (en init<SID>.ora)
 
50. Comprobar cual es el valor del parámetro OS_AUTHENT_PREFIX en la base de datos. (en init<SID>.ora)
  
 +
<pre>
 +
Editar con vi o ejecutar la sentencia pg sobre el fichero de parametros de
 +
inicializacion (init<SID>.ora).
 +
</pre>
 
51. Cambia la identificación del usuario “prueba01” de forma que sea identificado por el sistema operativo.  
 
51. Cambia la identificación del usuario “prueba01” de forma que sea identificado por el sistema operativo.  
 
+
<pre>
 +
SQL> alter user prueba01 identified externally;
 +
User altered.
 +
SQL> set head off
 +
SQL> select * from dba_users where username='PRUEBA01'
 +
</pre>
 
52. Modificar el parámetro OS_AUTHENT_PREFIX de forma que, en adelante, la cadena que identifique a un usuario externo sea “” (cadena vacía). (en el  fichero de parámetros de inicializacion (init<SID>.ora). Indicar: os_authent_prefix = ""  
 
52. Modificar el parámetro OS_AUTHENT_PREFIX de forma que, en adelante, la cadena que identifique a un usuario externo sea “” (cadena vacía). (en el  fichero de parámetros de inicializacion (init<SID>.ora). Indicar: os_authent_prefix = ""  
 
+
<pre>
 +
Editar con vi o ejecutar la sentencia pg sobre el fichero de parametros de
 +
inicializacion (init<SID>.ora). Indicar:
 +
os_authent_prefix = ""
 +
</pre>
 
53. Desbloquear la cuenta del usuario “prueba04”.  
 
53. Desbloquear la cuenta del usuario “prueba04”.  
 
+
<pre>
 +
SQL> alter user prueba03 account unlock;
 +
</pre>
 
54. Modificar los valores del perfil DEFAULT según se indica en la siguiente tabla:  
 
54. Modificar los valores del perfil DEFAULT según se indica en la siguiente tabla:  
 
+
[[Imatge:perfil-default.png |250px|center| perfil default]]
 +
<pre>
 +
SQL> alter profile default
 +
2 limit
 +
3 sessions_per_user 5
 +
4 cpu_per_session unlimited
 +
5 cpu_per_call 6000
 +
6 connect_time 480
 +
7 idle_time 60
 +
8 failed_login_attempts 3
 +
9 password_life_time 180;
 +
</pre>
  
 
55. Averiguar que usuarios o roles tienen asignado el privilegio “ALTER PROFILE”.  
 
55. Averiguar que usuarios o roles tienen asignado el privilegio “ALTER PROFILE”.  
 +
<pre>
 +
SQL> select * from dba_sys_privs where privilege='ALTER PROFILE';
 +
</pre>
  
 
56. Asignar el privilegio anterior al rol ADMIN.  
 
56. Asignar el privilegio anterior al rol ADMIN.  
 +
<pre>
 +
SQL> grant alter profile to admin;
 +
</pre>
  
 
57. Comprobar los valores asignados al perfil “DESARROLLO”. Modificar el perfil “DESARROLLO”, desde el usuario “administrador”, según la siguiente tabla:  
 
57. Comprobar los valores asignados al perfil “DESARROLLO”. Modificar el perfil “DESARROLLO”, desde el usuario “administrador”, según la siguiente tabla:  
  
 +
[[Imatge:perfil-fddfdfdefault.png |250px|center| perfil default]]
  
 
¿Qué ha sucedido con el resto de los parámetros?. ¿Coincide el valor de “Connect_time” en este perfil con el que tiene en el perfil DEFAULT?.  
 
¿Qué ha sucedido con el resto de los parámetros?. ¿Coincide el valor de “Connect_time” en este perfil con el que tiene en el perfil DEFAULT?.  
 +
<pre>
 +
SQL>
 +
select
 +
profile,
 +
substr(resource_name,1,25)
 +
nombre_recurso,
 +
substr(limit,1,20) limite from dba_profiles where profile = 'DESARROLLO';
 +
 +
SQL> alter profile desarrollo
 +
2 limit SESSIONS_PER_USER 5
 +
3 connect_time
 +
 +
</pre>
  
 
58. Averiguar los privilegios de sistema y sobre objetos, así como los roles, que tiene asignados los roles por defecto “CONNECT”, “RESOURCE”, “DBA”, “EXP_FULL_DATABASE” e “IMP_FULL_DATABASE”. ¿Consideras una buena política de seguridad asignar el rol “CONNECT” a todos los usuarios que precisan conectarse a la base de datos?.  
 
58. Averiguar los privilegios de sistema y sobre objetos, así como los roles, que tiene asignados los roles por defecto “CONNECT”, “RESOURCE”, “DBA”, “EXP_FULL_DATABASE” e “IMP_FULL_DATABASE”. ¿Consideras una buena política de seguridad asignar el rol “CONNECT” a todos los usuarios que precisan conectarse a la base de datos?.  
 +
<pre>
 +
SQL> select * from dba_role_privs where grantee
 +
in ('CONNECT','RESOURCE','DBA','EXP_FULL_DATABASE','IMP_FULL_DATABASE')
 +
order by grantee, granted_role
 +
 +
SQL> select * from dba_sys_privs
 +
where grantee in ('CONNECT','RESOURCE','DBA','EXP_FULL_DATABASE','IMP_FULL_DATABASE') order by grantee,privilege;
 +
 +
SQL> select grantee, table_name, privilege from dba_tab_privs where grantee
 +
in ('CONNECT','RESOURCE','DBA','EXP_FULL_DATABASE','IMP_FULL_DATABASE') order
 +
by grantee, table_name, privilege
 +
 +
</pre>
  
 
59. ¿Puede asignarse el perfil “DESARROLLO” al rol “CONNECT”?. ¿Y el perfil “DEFAULT” al perfil “DESARROLLO”?  
 
59. ¿Puede asignarse el perfil “DESARROLLO” al rol “CONNECT”?. ¿Y el perfil “DEFAULT” al perfil “DESARROLLO”?  
 
+
<pre>
 +
No.
 +
</pre>
 
60. Averiguar que usuarios o roles de la base de datos tienen asignado el privilegio “DROP PROFILE”.  
 
60. Averiguar que usuarios o roles de la base de datos tienen asignado el privilegio “DROP PROFILE”.  
 
+
<pre>
 +
SQL> select * from dba_sys_privs where privilege='DROP PROFILE';
 +
</pre>
 
61. Asignar el privilegio “DROP PROFILE” al rol “ADMIN.”.  
 
61. Asignar el privilegio “DROP PROFILE” al rol “ADMIN.”.  
 
+
<pre>
 +
SQL> grant drop profile to admin;
 +
</pre>
 
62. Conectarse como usuario “administrador” e intentar eliminar el perfil “DEFAULT”, ¿qué ocurre?.  
 
62. Conectarse como usuario “administrador” e intentar eliminar el perfil “DEFAULT”, ¿qué ocurre?.  
 
+
<pre>
 +
SQL> connect administrador
 +
Enter password:
 +
Connected.
 +
SQL> drop profile default;
 +
drop profile default
 +
*
 +
ERROR at line 1:
 +
ORA-00931: missing identifier
 +
SQL> drop profile default cascade;
 +
drop profile default cascade
 +
*
 +
ERROR at line 1:
 +
ORA-00931: missing identifier
 +
</pre>
 
63. Como usuario “administrador” crear el rol “SECRETO” identificado por la contraseña “total” y asignarlo al usuario “prueba04”.
 
63. Como usuario “administrador” crear el rol “SECRETO” identificado por la contraseña “total” y asignarlo al usuario “prueba04”.
   
+
  <pre>
 +
SQL> connect administrador
 +
Enter password:
 +
Connected.
 +
SQL> create role secreto identified by total;
 +
Role created.
 +
SQL> grant secreto to prueba04;
 +
Grant succeeded.
 +
</pre>
 
64. Averiguar que usuarios poseen el privilegio “ALTER ANY ROLE” (de forma directa o a través de roles).  
 
64. Averiguar que usuarios poseen el privilegio “ALTER ANY ROLE” (de forma directa o a través de roles).  
 
+
<pre>
 +
SQL> select * from dba_sys_privs where privilege='ALTER ANY ROLE';
 +
</pre>
 
65. ¿Qué valor tiene en la base de datos el parámetro MAX_ENABLED_ROLES?. Modificar su valor para que, en adelante, valga 40. Comprobar esta modificación.  
 
65. ¿Qué valor tiene en la base de datos el parámetro MAX_ENABLED_ROLES?. Modificar su valor para que, en adelante, valga 40. Comprobar esta modificación.  
 
+
<pre>
 +
SQL> show parameters max_enabled_roles
 +
</pre>
 
66. Averiguar que usuarios poseen el privilegio “GRANT ANY ROLE” (de forma directa o a través de roles).  
 
66. Averiguar que usuarios poseen el privilegio “GRANT ANY ROLE” (de forma directa o a través de roles).  
 
+
<pre>
 +
SQL> select * from dba_sys_privs where privilege='GRANT ANY ROLE';
 +
</pre>
 
67. Como usuario “administrador”, deasignar el rol “SECRETO” al usuario “prueba04”.  
 
67. Como usuario “administrador”, deasignar el rol “SECRETO” al usuario “prueba04”.  
 
+
<pre>
 +
SQL> revoke secreto from prueba04;
 +
</pre>
 
68. Asignar el privilegio “GRANT ANY ROLE” al rol “ADMIN.”.  
 
68. Asignar el privilegio “GRANT ANY ROLE” al rol “ADMIN.”.  
 
+
<pre>
 +
SQL> connect system
 +
Enter password:
 +
Connected.
 +
SQL> grant grant any role to admin;
 +
Grant succeeded.
 +
</pre>
 
69. Averiguar de nuevo que usuarios poseen el privilegio “GRANT ANY ROLE” (de forma directa o a través de roles).  
 
69. Averiguar de nuevo que usuarios poseen el privilegio “GRANT ANY ROLE” (de forma directa o a través de roles).  
 
+
<pre>
 +
SQL> select * from dba_sys_privs where privilege='GRANT ANY ROLE';
 +
</pre>
 
70. Averiguar que usuarios poseen el privilegio “DROP ANY ROLE” (de forma directa o a través de roles).  
 
70. Averiguar que usuarios poseen el privilegio “DROP ANY ROLE” (de forma directa o a través de roles).  
 
+
<pre>
 +
SQL> select * from dba_sys_privs where privilege='DROP ANY ROLE';
 +
</pre>
 
71. Asignar permiso de conexión al usuario "prueba03", asignar el rol “SECRETO” al mismo usuario. Conectarse como este usuario e intentar borrar el rol.  
 
71. Asignar permiso de conexión al usuario "prueba03", asignar el rol “SECRETO” al mismo usuario. Conectarse como este usuario e intentar borrar el rol.  
 
+
<pre>
 +
SQL> connect system
 +
Enter password:
 +
Connected.
 +
SQL> grant conexion to prueba03;
 +
Grant succeeded.
 +
SQL> grant secreto to prueba03;
 +
Grant succeeded.
 +
SQL> connect prueba03
 +
Enter password:
 +
Connected.
 +
SQL> drop role secreto;
 +
drop role secreto
 +
*
 +
ERROR at line 1:
 +
ORA-01031: insufficient privileges
 +
</pre>
 
72. En caso de que no lo tenga asignado, asignar el rol “CONEXION” y el rol “DESARROLLO” al usuario “prueba04”. Hacer que solo el rol “CONEXIÓN” este activo cuando se conecte.  
 
72. En caso de que no lo tenga asignado, asignar el rol “CONEXION” y el rol “DESARROLLO” al usuario “prueba04”. Hacer que solo el rol “CONEXIÓN” este activo cuando se conecte.  
 +
<pre>
 +
SQL> select * from dba_role_privs where grantee='PRUEBA04';
  
 +
SQL> alter user prueba04 default role conexion;
 +
User altered
 +
</pre>
 
73. Comprobar en la vista apropiada del diccionario de datos los roles activos en la sesión.  
 
73. Comprobar en la vista apropiada del diccionario de datos los roles activos en la sesión.  
 
+
<pre>
 +
SQL> select * from dba_role_privs where grantee='PRUEBA04';
 +
</pre>
 
74. Conectado como usuario “prueba04”, activar el rol “DESARROLLO” y comprobar de nuevo en la vista apropiada del diccionario de datos los roles activos en la sesión.  
 
74. Conectado como usuario “prueba04”, activar el rol “DESARROLLO” y comprobar de nuevo en la vista apropiada del diccionario de datos los roles activos en la sesión.  
 
+
<pre>
 +
SQL> connect prueba04
 +
Enter password:
 +
Connected.
 +
SQL> select * from session_roles;
 +
ROLE
 +
------------------------------
 +
CONEXION
 +
SQL> set role all;
 +
Role set.
 +
SQL> select * from session_roles;
 +
</pre>
 
75. Asignar el rol "CONNECT" al usuario "ADMIN". ¿Es preciso asignarle los permisos "CREATE PROCEDURE", "CREATE PUBLIC SYNONYM", "CREATE ROLE", "CREATE TRIGGER"?, ¿Los tiene ya asignados?.  
 
75. Asignar el rol "CONNECT" al usuario "ADMIN". ¿Es preciso asignarle los permisos "CREATE PROCEDURE", "CREATE PUBLIC SYNONYM", "CREATE ROLE", "CREATE TRIGGER"?, ¿Los tiene ya asignados?.  
 
+
<pre>
 +
SQL> grant connect to admin;
 +
Grant succeeded.
 +
SQL> select * from dba_sys_privs where grantee='CONNECT';
 +
</pre>
 
76. Conectarse como usuario SYSTEM y otorgar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos (pertenece al usuario "prueba01"). ¿Qué sucede?, ¿por qué?.  
 
76. Conectarse como usuario SYSTEM y otorgar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos (pertenece al usuario "prueba01"). ¿Qué sucede?, ¿por qué?.  
 
+
<pre>
 +
SQL> show user
 +
USER es "SYSTEM"
 +
SQL> grant select on prueba01.codigos to prueba02;
 +
grant select on prueba01.codigos to prueba02
 +
*
 +
ERROR en línea 1:
 +
</pre>
 
77. Conectarse como usuario "prueba01" y otorgar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos; hacerlo de forma que "prueba02" también pueda otorgar el permiso a otros usuarios (opción ADMIN).  
 
77. Conectarse como usuario "prueba01" y otorgar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos; hacerlo de forma que "prueba02" también pueda otorgar el permiso a otros usuarios (opción ADMIN).  
 
+
<pre>
 +
SQL> connect prueba01
 +
Introduzca su clave:
 +
Connected.
 +
SQL> grant select on prueba01.codigos to prueba02 with grant option;
 +
Grant succeeded.
 +
</pre>
 
78. Conectarse como usuario "prueba02" y otorgar al usuario "prueba03" el permiso para seleccionar datos de la tabla códigos.  
 
78. Conectarse como usuario "prueba02" y otorgar al usuario "prueba03" el permiso para seleccionar datos de la tabla códigos.  
 
+
<pre>
 +
SQL> connect prueba02
 +
Enter password:
 +
Connected.
 +
SQL> grant select on prueba01.codigos to prueba03 ;
 +
Grant succeeded.
 +
SQL> connect prueba03
 +
Enter password:
 +
Connected.
 +
SQL> select * from prueba01.codigos;
 +
no rows selected
 +
</pre>
 
79. Conectarse como usuario "prueba01" y revocar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos.  
 
79. Conectarse como usuario "prueba01" y revocar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos.  
 
+
<pre>
 +
SQL> connect prueba01
 +
Enter password:
 +
Connected.
 +
</pre>
 
80. Conectarse como usuario "prueba03" e intentar consultar la tabla códigos. ¿Qué ocurre?, ¿por qué?.
 
80. Conectarse como usuario "prueba03" e intentar consultar la tabla códigos. ¿Qué ocurre?, ¿por qué?.
 +
<pre>
 +
SQL> connect prueba03
 +
Enter password:
 +
Connected.
 +
SQL> select * from prueba01.codigos;
 +
select * from prueba01.codigos
 +
*
 +
ERROR at line 1:
 +
ORA-00942: table or view does not exist
 +
</pre>

Revisió de 17:48, 11 oct 2014

Autenticació i creació d'usuaris, permisos, rols i privilegis

1. Buscar en el diccionario de datos qué información continenen las vistas siguientes:

(antes de hacer select * sobre estas vistas consultar con un DESCRIBE o DESC las columnas que nos interesan)

  • dba_profiles
  • dba_roles
  • dba_users
  • dba_role_privs
  • dba_tab_privs
  • dba_sys_privs

SQL> desc dba_profiles
 Nombre                                    ¿Nulo?   Tipo
 ----------------------------------------- -------- ----------------------------
 PROFILE                                   NOT NULL VARCHAR2(30)
 RESOURCE_NAME                             NOT NULL VARCHAR2(32)
 RESOURCE_TYPE                                      VARCHAR2(8)
 LIMIT                                              VARCHAR2(40)

SQL> desc dba_roles
 Nombre                                    ¿Nulo?   Tipo
 ----------------------------------------- -------- ----------------------------
 ROLE                                      NOT NULL VARCHAR2(30)
 PASSWORD_REQUIRED                                  VARCHAR2(8)

SQL> desc dba_users
 Nombre                                    ¿Nulo?   Tipo
 ----------------------------------------- -------- ----------------------------
 USERNAME                                  NOT NULL VARCHAR2(30)
 USER_ID                                   NOT NULL NUMBER
 PASSWORD                                           VARCHAR2(30)
 ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)
 LOCK_DATE                                          DATE
 EXPIRY_DATE                                        DATE
 DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
 CREATED     ]                             NOT NULL DATE
 PROFILE                                   NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
 EXTERNAL_NAME                                      VARCHAR2(4000)

SQL> desc dba_role_privs
 Nombre                                    ¿Nulo?   Tipo
 ----------------------------------------- -------- ----------------------------
 GRANTEE                                            VARCHAR2(30)
 GRANTED_ROLE                              NOT NULL VARCHAR2(30)
 ADMIN_OPTION                                       VARCHAR2(3)
 DEFAULT_ROLE                                       VARCHAR2(3)

SQL> desc dba_tab_privs
 Nombre                                    ¿Nulo?   Tipo
 ----------------------------------------- -------- ----------------------------
 GRANTEE                                   NOT NULL VARCHAR2(30)
 OWNER                                     NOT NULL VARCHAR2(30)
 TABLE_NAME                                NOT NULL VARCHAR2(30)
 GRANTOR                                   NOT NULL VARCHAR2(30)
 PRIVILEGE                                 NOT NULL VARCHAR2(40)
 GRANTABLE                                          VARCHAR2(3)
 HIERARCHY                                          VARCHAR2(3)

SQL> desc dba_sys_privs
 Nombre                                    ¿Nulo?   Tipo
 ----------------------------------------- -------- ----------------------------
 GRANTEE                                   NOT NULL VARCHAR2(30)
 PRIVILEGE                                 NOT NULL VARCHAR2(40)
 ADMIN_OPTION                                       VARCHAR2(3)


2. Conectarse como usuario SYSTEM a la base y crear un usuario llamado “administrador” autentificado por la base de datos. Indicar como "tablespace" por defecto USERS y como "tablespace" temporal TEMP; asignar una cuota de 500K en el "tablespace" USERS. Consulta si los tablespaces USERS i TEMP estan creados, en caso contrario créalos primero.

SQL> CREATE USER ADMINISTRADOR IDENTIFIED BY ADMIN
2 DEFAULT TABLESPACE USERS
3 TEMPORARY TABLESPACE TEMP
4 QUOTA 500K ON USERS;

SQL> SELECT USERNAME FROM DBA_USERS WHERE USERNAME='ADMINISTRADOR';

3. Abrir una sesión sqlplus e intenta conectarte como usuario “administrador”, ¿qué sucede?, ¿por qué?.

Enter user-name: administrador
Enter password:
ERROR:
ORA-01045: user ADMINISTRADOR lacks CREATE SESSION privilege; logon denied

4. Averiguar qué privilegios de sistema, roles y privilegios sobre objetos tiene concedidos el usuario “administrador”.

SQL> select * from dba_role_privs where grantee='ADMINISTRADOR';
no rows selected
SQL> select * from dba_tab_privs where grantee='ADMINISTRADOR';
no rows selected
SQL> select * from dba_sys_privs where grantee='ADMINISTRADOR';
no rows selected

5. Otorgar el privilegio “CREATE SESSION” al usuario “administrador” e intentar de nuevo la conexión sqlplus.

SQL> grant create session to administrador;
Grant succeeded.
SQL> connect administrador
Enter password:
Connected.

6. Conectarse como usuario “administrador” y crear un usuario llamado “prueba00” que tenga como "tablespace" por defecto USERS y como "tablespace" temporal TEMP; asignar una cuota de 0K en el "tablespace" USERS. ¿Es posible hacerlo?.

SQL> show user
USER is "ADMINISTRADOR"
SQL> create user prueba00 identified by prueba00
2 default tablespace users
3 temporary tablespace temp
4* quota 0k on users
create user prueba00 identified by prueba00
*
ERROR at line 1:
ORA-01031: insufficient privileges

7. Conectado como usuario SYSTEM, otorgar el privilegio “create user” al usuario “administrador” y repetir el ejercicio anterior.

connect as sysdba
SQL> grant create user to administrador;
connect as administrador
SQL>create user prueba00 identified by prueba00
2 default tablespace users
3 temporary tablespace temp
4 quota 0k on users

8. Averiguar que usuarios de la base de datos tienen asignado el privilegio “create user” de forma directa, ¿qué vista debe ser consultada?.

SQL> desc dba_sys_privs
Nombre
¿Nulo? Tipo
----------------------------------------- -------- -----------------------
GRANTEE
NOT NULL VARCHAR2(30)
PRIVILEGE
NOT NULL VARCHAR2(40)
ADMIN_OPTION
VARCHAR2(3)

SQL> select * from dba_sys_privs where privilege ='CREATE USER';

9. Hacer lo mismo para el privilegio “create session”.

SQL> select * from dba_sys_privs where privilege ='CREATE SESSION';

10. Crear dos "tablespace" llamados NOMINA y ACADEMO, que contendrán datos relativos a las aplicaciones de nomina y datos académicos de los empleados de una empresa, según las siguientes características:

descripció tablespaces
SQL> create tablespace academo datafile '/u02/oradata/CURSO01/academo01.dbf'size 1M
2 autoextend on next 200k maxsize 1400K
3 default storage (initial 16k next 16k
4 minextents 1 maxextents 3);

Tablespace created.

SQL> create tablespace nomina datafile '/u02/oradata/CURSO01/nomina01.dbf'size 1M
2 autoextend on next 100K maxsize 1500K
3 default storage (initial 16k next 16k
4 minextents 1 maxextents 3);
Tablespace created.

11. Crear dos "tablespace" temporales, manejados de forma local, llamados TEMP_NOMINA y TEMP_ACADEMO con las siguientes características:

tablespaces temporals

SQL> create temporary tablespace temp_academo
2 tempfile '/u04/oradata/CURSO01/temp_academo01.dbf'
3 size 500k autoextend on next 50k maxsize 600k
4 extent management local uniform size 100k;

Tablespace created.

SQL> create temporary tablespace temp_nomina
2 tempfile '/u04/oradata/CURSO01/temp_nomina01.dbf'
3 size 600k autoextend on next 50k maxsize 700k
4 extent management local uniform size 100k;

Tablespace created.


12. Estando conectado como usuario “administrador” probar a crear un rol llamado “administrador”, ¿qué ocurre?.

SQL> connect administrador
Enter password:
Connected.
SQL> create role administrador;
create role administrador
*
ERROR at line 1:
ORA-01031: insufficient privileges

13. Idem estando conectado como usuario SYSTEM, ¿qué sucede?, ¿por qué?.

SQL> connect system
Enter password:
Connected.
SQL> create role administrador;
create role administrador
*
ERROR at line 1:
ORA-01921: role name 'ADMINISTRADOR' conflicts with another user or role name

14. Comprobar en el diccionario de datos los usuarios o roles que poseen el privilegio “CREATE ROLE”.

SQL> select * from dba_sys_privs where privilege ='CREATE ROLE';

15. Crear un rol llamado “ADMIN”, asignarle los privilegios “create session”, “cr eate user” y “CREATE ROLE”. Asignarlo al usuario administrador.


SQL> create role admin;
Role created.

SQL> grant create session to admin;
Grant succeeded.

SQL> grant create user to admin

SQL> grant create user to admin

SQL> grant create role to admin

SQL> grant admin to administrador;

16. Consultar los privilegios de sistema que tiene asignados de forma directa el usuario “administrador”, revocarlos y asignarle el rol “admin.”.


SQL> select * from dba_sys_privs where grantee ='ADMINISTRADOR'

SQL> revoke create session from administrador;

SQL>revoke create user from administrador
Revoke succeeded.

SQL> grant admin to administrador;
Grant succeeded.

17. Crear, conectado como SYSTEM, un usuario llamado “prueba01” autenticado por base de datos al que no se le asigne "tablespace" por defecto ni temporal.


SQL> create user prueba01 identified by prueba01;

18. Consultar en las vistas correspondientes los "tablespaces" y la quota en cada uno de ellos que tiene los usuarios SYS, SYSTEM, “administrador”, “prueba00” y “prueba01”. ¿Qué ha ocurrido con el usuario “prueba01”?.


SQL> select substr(username,1,15) usuario, DEFAULT_TABLESPACE ,
TEMPORARY_TABLESPACE
2 from dba_users
3 where username in ('SYS','SYSTEM','ADMINISTRADOR','PRUEBA00','PRUEBA01');

SQL> select substr(username,1,15) usuario, tablespace_name, max_bytes from
dba_ts_quotas
where
username
in ('SYS','SYSTEM','ADMINISTRADOR','PRUEBA00','PRUEBA01')

19. Crear un usuario llamado “prueba02” autenticado por base de datos, asignando como "tablespace" por defecto NOMINA y como "tablespace" temporal TEMP_NOMINA (no se le asignara cuota en NOMINA).


SQL> create user prueba02 identified by prueba02
2 default tablespace nomina
3 temporary tablespace temp_nomina;

20. Asignar al usuario “prueba01” los "tablespace" ACADEMO y TEMP_ACADEMO como "tablespace" de trabajo y temporal respectivamente (sin especificar cuota).


SQL> alter user prueba01 temporary tablespace temp_academo;

SQL> alter user prueba01 default tablespace academo;

21. Consultar en las vistas correspondientes los "tablespace" y la cuota en cada uno de ellos que tiene los usuarios “prueba01” y “prueba02”.


SQL> select * from dba_ts_quotas where username in ('PRUEBA01','PRUEBA02');

22. Crear un rol llamado “CONEXIÓN” y asignarle el permiso “CREATE SESSION”.


SQL> create role conexion;

SQL> grant create session to conexion;

23. Asignar el rol “CONEXIÓN” a los usuarios “prueba00”, “prueba01” y “prueba02”


SQL> grant conexion to prueba00, prueba01, prueba02;

24. Comprobar en la vista correspondiente cuales son los roles asignados a los usuarios “prueba00”, “prueba01” y “prueba02”.


SQL> select * from dba_role_privs where grantee in ('PRUEBA00','PRUEBA01','PRUEBA02');

25. Conectarse como usuario “prueba01” y crear la tabla siguiente en el "tablespace" ACADEMO:

CREATE TABLE CODIGOS (CODIGO varchar2(3), DESCRIPCION varchar2(20)) TABLESPACE ACADEMO STORAGE (INITIAL 64K NEXT 64K MINEXTENTS 5 MAXEXTENTS 10);

¿Es posible hacerlo?, ¿falta algún permiso?.


SQL> connect prueba01

SQL> CREATE TABLE CODIGOS
2 (CODIGO varchar2(3),
3 DESCRIPCION varchar2(20))
4 TABLESPACE ACADEMO
5 STORAGE (INITIAL 64K
6 NEXT 64K
7 MINEXTENTS 5
8* MAXEXTENTS 10)

CREATE TABLE CODIGOS
*
ERROR at line 1:
ORA-01031: insufficient privileges

26. Crear un rol llamado “DESARROLLO” y asignarle los permisos "CREATE SEQUENCE", "CREATE SESSION", "CREATE SYNONYM", "CREATE TABLE" y "CREATE VIEW". Asignar el rol “DESARROLLO” a los usuarios “prueba00”, “prueba01” y “prueba02”.


SQL> connect system

SQL> create role desarrollo;
Role created.

SQL> grant create sequence, create session, create synonym, create table, create view to desarrollo;
Grant succeeded.

SQL> grant desarrollo to prueba00, prueba01, prueba02;
Grant succeeded.

27. Volver a conectarse como usuario “prueba01” y crear la tabla anterior en el "tablespace" ACADEMO.


SQL> connect prueba01

Introduzca su clave:
Connected.

SQL> CREATE TABLE CODIGOS
2 (CODIGO varchar2(3),
3 DESCRIPCION varchar2(20))
4 TABLESPACE ACADEMO
5 STORAGE (INITIAL 64K
6 NEXT 64K
7 MINEXTENTS 5
8 MAXEXTENTS 10)

CREATE TABLE CODIGOS
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'ACADEMO'

28. Asignar cuota ilimitada al usuario “prueba01” en el "tablespace" ACADEMO. Volver a repetir el ejercicio 26.


SQL> connect system
Enter password:
Connected.

SQL> alter user prueba01 quota unlimited on academo;

SQL> connect prueba01
Enter password:
Connected.

SQL> CREATE TABLE CODIGOS
(CODIGO varchar2(3),
DESCRIPCION varchar2(20))
TABLESPACE ACADEMO
STORAGE (INITIAL 64K
NEXT 64K
MINEXTENTS 5
MAXEXTENTS 10);

29. Asignar cuota ilimitada al usuario “prueba02” en el "tablespace" NOMINA.


SQL> connect system
Introduzca su clave:
Connected.

SQL> alter user prueba02 quota unlimited on academo;
User altered.

30. Obtener información sobre roles, privilegios de sistema, "tablespace" y cuotas para los usuarios “prueba00”, “prueba01” y “prueba02”.

SQL> select * from dba_role_privs where grantee in ('PRUEBA00','PRUEBA01','PRUEBA02');
SQL> select * from dba_sys_privs where grantee in ('PRUEBA00','PRUEBA01','PRUEBA02');
SQL> select USERNAME , TABLESPACE_NAME , BYTES from dba_ts_quotas where
username in ('PRUEBA00','PRUEBA01','PRUEBA02');

31. Asignar cuota cero en el "tablespace" por defecto para el usuario “prueba01”, ¿siguen estando sus objetos?, ¿es posible crear algún otro? (probad a crear un tabla).


SQL> alter user prueba01 quota 0k on academo;
User altered.

SQL> select owner, table_name from dba_tables where owner='PRUEBA01';


32. Conectarse como usuario “prueba01” e intentar modificar su cuota en el "tablespace" ACADEMO, ¿es posible?.


SQL> connect prueba01
Introduzca su clave:
Connected.

SQL> alter user prueba01 quota unlimited on academo;
alter user prueba01 quota unlimited on academo
*
ERROR at line 1:
ORA-01031: insufficient privileges

33. Conectarse como usuario “prueba01” y modificar su clave, ¿es posible?.


SQL> alter user prueba01 identified by probando01;
User altered.

34. Averiguar que usuarios o roles de base de datos tienen asignado el privilegio ALTER USER.


SQL> connect system
Introduzca su clave:
Conectado.
SQL> select * from dba_sys_privs where privilege='ALTER USER';

35. Abrir una sesión con el usuario “administrador” y otra con el usuario “prueba02”. Siendo el usuario “administrador”, intentar borrar el usuario “prueba02”.


SQL> show user
USER es "SYSTEM"

SQL> drop user prueba02;
drop user prueba02
*
ERROR en línea 1:
ORA-01940: no se puede borrar un usuario conectado actualmente

36.Asignar el permiso DROP USER al rol ADMIN.


SQL> grant drop user to admin;

37. Averiguar que usuarios o roles de base de datos tienen asignado el privilegio DROP USER.


SQL> select * from dba_sys_privs where privilege='DROP USER';

38. Conectado como usuario "administrador", crear el usuario “prueba03” autentificado por base de datos y asignando cuotas en el "tablespace" ACADEMO (500K) y NOMINA (200K). Su "tablespace" temporal será TEMP.


SQL> connect administrador
Enter password:
Connected.
SQL> create user prueba03 identified by prueba03
default tablespace academo
temporary tablespace temp
quota 500k on academo
quota 200k on nomina

39. Comprobar en el fichero de inicialización si está activado el modo de limitación de recursos.


Editar el fichero de inicializacion.

40. Averiguar que usuarios de base de datos o que roles tienen asignado el privilegio “CREATE PROFILE”.


SQL> connect system
Enter password:
Connected.

SQL> select * from dba_sys_privs where privilege='CREATE PROFILE';

41. Asignar el permiso “CREATE PROFILE” al rol ADMIN.


SQL> grant create profile to admin;
Grant succeeded.

42. Averiguar que perfiles están definidos en la base de datos y que límites de recursos fija cada uno de ellos.


SQL> select substr(profile,1,12) perfil, substr(resource_name,1,25) recurso,
resource_type, substr(limit,1,10) limite from dba_profiles order by profile,
resource_name;

43. Consultar que perfiles tiene asignados cada usuario de la base de datos.


SQL> select username, profile from dba_users order by username;

44. Crear un perfil llamado “DESARROLLO” con las siguientes especificaciones:

perfil desarrollo

SQL> create profile desarrollo limit sessions_per_user 2 cpu_per_session unlimited
cpu_per_call 6000 connect_time 480 idle_time 2 failed_login_attempts 2
password_life_time 120;

45. Asignar el perfil anterior a los usuarios “prueba00”, “prueba01”, “prueba02” y “prueba03”.

SQL> alter user prueba00 profile desarrollo
SQL> alter user prueba01 profile desarrollo
SQL> alter user prueba02 profile desarrollo
SQL> alter user prueba03 profile desarrollo

46. Intentar la conexión dos veces como usuario “prueba01” fallando la contraseña, ¿qué sucede?. Comprobar si la cuenta ha sido bloqueada en la vista de base de datos correspondiente .


SQL> connect prueba01
Enter password:
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
...

SQL> connect prueba01
Enter password:
ERROR:
ORA-28000: the account is locked
SQL> select username, lock_date from dba_users where username like 'PRUEBA%';

47. Crear un usuario “prueba04” con el parámetro “password expire”, sus "tablespace" por defecto y temporal serán USERS (cuota 0k) y TEMP. Asignar los roles CONEXIÓN y DESARROLLO. Conectarse como usuario “prueba04”, ¿qué sucede?.


SQL> create user prueba04 identified by prueba04
2 default tablespace users
3 temporary tablespace temp
4 quota 0k on users
5 password expire

User created.

SQL> grant conexion, desarrollo to prueba04;

SQL> connect prueba04
Enter password:
ERROR:
ORA-28001: the password has expired
Changing password for prueba04
New password:
Retype new password:
Password changed
Connected.

48. Bloquear la cuenta del usuario “prueba04”, ¿qué sucede al conectarse de nuevo?.

SQL> connect system
Enter password:
Connected.
SQL> alter user prueba04 account lock;
User altered.
SQL> connect prueba04
Enter password:
ERROR:
ORA-28000: the account is locked
Warning: You are no longer connected to ORACLE.

49.Modificar el "tablespace" por defecto y el temporal del usuario “prueba01” de forma que sean NOMINA y TEMP_NOMINA.


SQL> connect system
Enter password:
Connected.
SQL> alter user prueba04 default tablespace nomina;
User altered.
SQL> alter user prueba04 temporary tablespace temp_nomina;
User altered.

50. Comprobar cual es el valor del parámetro OS_AUTHENT_PREFIX en la base de datos. (en init<SID>.ora)

Editar con vi o ejecutar la sentencia pg sobre el fichero de parametros de
inicializacion (init<SID>.ora).

51. Cambia la identificación del usuario “prueba01” de forma que sea identificado por el sistema operativo.

SQL> alter user prueba01 identified externally;
User altered.
SQL> set head off
SQL> select * from dba_users where username='PRUEBA01'

52. Modificar el parámetro OS_AUTHENT_PREFIX de forma que, en adelante, la cadena que identifique a un usuario externo sea “” (cadena vacía). (en el fichero de parámetros de inicializacion (init<SID>.ora). Indicar: os_authent_prefix = ""

Editar con vi o ejecutar la sentencia pg sobre el fichero de parametros de
inicializacion (init<SID>.ora). Indicar:
os_authent_prefix = ""

53. Desbloquear la cuenta del usuario “prueba04”.

SQL> alter user prueba03 account unlock;

54. Modificar los valores del perfil DEFAULT según se indica en la siguiente tabla:

perfil default
SQL> alter profile default
2 limit
3 sessions_per_user 5
4 cpu_per_session unlimited
5 cpu_per_call 6000
6 connect_time 480
7 idle_time 60
8 failed_login_attempts 3
9 password_life_time 180;

55. Averiguar que usuarios o roles tienen asignado el privilegio “ALTER PROFILE”.

SQL> select * from dba_sys_privs where privilege='ALTER PROFILE';

56. Asignar el privilegio anterior al rol ADMIN.

SQL> grant alter profile to admin;

57. Comprobar los valores asignados al perfil “DESARROLLO”. Modificar el perfil “DESARROLLO”, desde el usuario “administrador”, según la siguiente tabla:

perfil default

¿Qué ha sucedido con el resto de los parámetros?. ¿Coincide el valor de “Connect_time” en este perfil con el que tiene en el perfil DEFAULT?.

SQL>
select
profile,
substr(resource_name,1,25)
nombre_recurso,
substr(limit,1,20) limite from dba_profiles where profile = 'DESARROLLO';

SQL> alter profile desarrollo
2 limit SESSIONS_PER_USER 5
3 connect_time

58. Averiguar los privilegios de sistema y sobre objetos, así como los roles, que tiene asignados los roles por defecto “CONNECT”, “RESOURCE”, “DBA”, “EXP_FULL_DATABASE” e “IMP_FULL_DATABASE”. ¿Consideras una buena política de seguridad asignar el rol “CONNECT” a todos los usuarios que precisan conectarse a la base de datos?.

SQL> select * from dba_role_privs where grantee
in ('CONNECT','RESOURCE','DBA','EXP_FULL_DATABASE','IMP_FULL_DATABASE')
order by grantee, granted_role

SQL> select * from dba_sys_privs
where grantee in ('CONNECT','RESOURCE','DBA','EXP_FULL_DATABASE','IMP_FULL_DATABASE') order by grantee,privilege;

SQL> select grantee, table_name, privilege from dba_tab_privs where grantee
in ('CONNECT','RESOURCE','DBA','EXP_FULL_DATABASE','IMP_FULL_DATABASE') order
by grantee, table_name, privilege

59. ¿Puede asignarse el perfil “DESARROLLO” al rol “CONNECT”?. ¿Y el perfil “DEFAULT” al perfil “DESARROLLO”?

No.

60. Averiguar que usuarios o roles de la base de datos tienen asignado el privilegio “DROP PROFILE”.

SQL> select * from dba_sys_privs where privilege='DROP PROFILE';

61. Asignar el privilegio “DROP PROFILE” al rol “ADMIN.”.

SQL> grant drop profile to admin;

62. Conectarse como usuario “administrador” e intentar eliminar el perfil “DEFAULT”, ¿qué ocurre?.

SQL> connect administrador
Enter password:
Connected.
SQL> drop profile default;
drop profile default
*
ERROR at line 1:
ORA-00931: missing identifier
SQL> drop profile default cascade;
drop profile default cascade
*
ERROR at line 1:
ORA-00931: missing identifier

63. Como usuario “administrador” crear el rol “SECRETO” identificado por la contraseña “total” y asignarlo al usuario “prueba04”.

SQL> connect administrador
Enter password:
Connected.
SQL> create role secreto identified by total;
Role created.
SQL> grant secreto to prueba04;
Grant succeeded.

64. Averiguar que usuarios poseen el privilegio “ALTER ANY ROLE” (de forma directa o a través de roles).

SQL> select * from dba_sys_privs where privilege='ALTER ANY ROLE';

65. ¿Qué valor tiene en la base de datos el parámetro MAX_ENABLED_ROLES?. Modificar su valor para que, en adelante, valga 40. Comprobar esta modificación.

SQL> show parameters max_enabled_roles

66. Averiguar que usuarios poseen el privilegio “GRANT ANY ROLE” (de forma directa o a través de roles).

SQL> select * from dba_sys_privs where privilege='GRANT ANY ROLE';

67. Como usuario “administrador”, deasignar el rol “SECRETO” al usuario “prueba04”.

SQL> revoke secreto from prueba04;

68. Asignar el privilegio “GRANT ANY ROLE” al rol “ADMIN.”.

SQL> connect system
Enter password:
Connected.
SQL> grant grant any role to admin;
Grant succeeded.

69. Averiguar de nuevo que usuarios poseen el privilegio “GRANT ANY ROLE” (de forma directa o a través de roles).

SQL> select * from dba_sys_privs where privilege='GRANT ANY ROLE';

70. Averiguar que usuarios poseen el privilegio “DROP ANY ROLE” (de forma directa o a través de roles).

SQL> select * from dba_sys_privs where privilege='DROP ANY ROLE';

71. Asignar permiso de conexión al usuario "prueba03", asignar el rol “SECRETO” al mismo usuario. Conectarse como este usuario e intentar borrar el rol.

SQL> connect system
Enter password:
Connected.
SQL> grant conexion to prueba03;
Grant succeeded.
SQL> grant secreto to prueba03;
Grant succeeded.
SQL> connect prueba03
Enter password:
Connected.
SQL> drop role secreto;
drop role secreto
*
ERROR at line 1:
ORA-01031: insufficient privileges

72. En caso de que no lo tenga asignado, asignar el rol “CONEXION” y el rol “DESARROLLO” al usuario “prueba04”. Hacer que solo el rol “CONEXIÓN” este activo cuando se conecte.

SQL> select * from dba_role_privs where grantee='PRUEBA04';

SQL> alter user prueba04 default role conexion;
User altered

73. Comprobar en la vista apropiada del diccionario de datos los roles activos en la sesión.

SQL> select * from dba_role_privs where grantee='PRUEBA04';

74. Conectado como usuario “prueba04”, activar el rol “DESARROLLO” y comprobar de nuevo en la vista apropiada del diccionario de datos los roles activos en la sesión.

SQL> connect prueba04
Enter password:
Connected.
SQL> select * from session_roles;
ROLE
------------------------------
CONEXION
SQL> set role all;
Role set.
SQL> select * from session_roles;

75. Asignar el rol "CONNECT" al usuario "ADMIN". ¿Es preciso asignarle los permisos "CREATE PROCEDURE", "CREATE PUBLIC SYNONYM", "CREATE ROLE", "CREATE TRIGGER"?, ¿Los tiene ya asignados?.

SQL> grant connect to admin;
Grant succeeded.
SQL> select * from dba_sys_privs where grantee='CONNECT';

76. Conectarse como usuario SYSTEM y otorgar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos (pertenece al usuario "prueba01"). ¿Qué sucede?, ¿por qué?.

SQL> show user
USER es "SYSTEM"
SQL> grant select on prueba01.codigos to prueba02;
grant select on prueba01.codigos to prueba02
*
ERROR en línea 1:

77. Conectarse como usuario "prueba01" y otorgar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos; hacerlo de forma que "prueba02" también pueda otorgar el permiso a otros usuarios (opción ADMIN).

SQL> connect prueba01
Introduzca su clave:
Connected.
SQL> grant select on prueba01.codigos to prueba02 with grant option;
Grant succeeded.

78. Conectarse como usuario "prueba02" y otorgar al usuario "prueba03" el permiso para seleccionar datos de la tabla códigos.

SQL> connect prueba02
Enter password:
Connected.
SQL> grant select on prueba01.codigos to prueba03 ;
Grant succeeded.
SQL> connect prueba03
Enter password:
Connected.
SQL> select * from prueba01.codigos;
no rows selected

79. Conectarse como usuario "prueba01" y revocar al usuario "prueba02" el permiso para seleccionar datos de la tabla códigos.

SQL> connect prueba01
Enter password:
Connected.

80. Conectarse como usuario "prueba03" e intentar consultar la tabla códigos. ¿Qué ocurre?, ¿por qué?.

SQL> connect prueba03
Enter password:
Connected.
SQL> select * from prueba01.codigos;
select * from prueba01.codigos
*
ERROR at line 1:
ORA-00942: table or view does not exist