Pràctica ASI-C6-ASGBD: Seguretat a Oracle I
Objectius
En aquesta pràctica executarem el script admin_seguretat1.sql, que ilustra els conceptes bàsics de seguretat a Oracle, creació d'usuaris, permisos i rols que vam estar veient a la teoria. Es treballa amb dos usuaris. Un que té permisos de DBA (per ex, MARIA), i un altre que té permisos limitats (per ex, PERE).
Teoria
Desenvolupament
Creem l'usuari MARIA (usuari DBA):
SQL> CREATE USER "MARIA" IDENTIFIED BY maria DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; SQL> GRANT CONNECT,DBA TO "MARIA";
Primer de tot fem un SPOOL per a registrar en un fitxer tot allò que va succeïnt en el script
SPOOL c:\log.txt SET echo on
Ens connectem amb l'usuari MARIA, que ja existeix i és DBA (té els permisos suficients per crear usuaris,...), i creem la taula de proves jtemp amb tres files per a fer proves. És important crear els usuaris amb majúscules. En la versió 8 dóna problemes a posteriori si hem creat els usuaris amb majúcules. (Comprovar si això també s'aplica a versions posteriors).
prompt ens connectem amb l'usuari MARIA... pause connect MARIA/BBDD@BBDD
i creem la taula JTEMP amb tres files per a fer proves
drop table jtemp;
create table jtemp(camp1 varchar2(10));
insert into jtemp values('fila1');
insert into jtemp values('fila2');
insert into jtemp values('fila3');
select * from jtemp;
Abans de crear l'usuari PERE l'esborrem, i també esborrem tots els objectes del seu esquema (CASCADE). Creem l'usuari sense cap mena de permís.
REM l'opcio CASCADE es per esborrar les taules de 'PERE' si es que n'hi ha drop user "PERE" CASCADE; prompt creem l'usuari PERE. create user "PERE" identified by "PERE" default tablespace users temporary tablespace temp quota 1M on users profile default;
Comprovem que l'usuari s'ha creat mirant la vista all_users del diccionari. Tanmateix, no ens podem connectar, no tenim permisos. Per donar permisos ens hem de tornar a connectar com a MARIA i donar els permisos mínims. Ara sí que podrem connectar-nos i crear una taula en l'esquema de PERE.
select * from all_users where username='PERE';
connect PERE/PERE@BBDD
prompt ens tornem a connectar amb 'MARIA'
pause
connect MARIA/BBDD@BBDD
prompt donem a l'usuari PERE el rol de CONNECT i RESOURCE, que entre d'altres inclou els privilegis de CREATE SESSION, CREATE TABLE i CREATE VIEW
pause
grant "CONNECT","RESOURCE" to "PERE";
connect PERE/PERE@BBDD
create table ptemp(camp1 varchar2(10));
insert into ptemp values('fila1');
select * from ptemp;
pause
Si PERE vol accedir a la taula jtemp de l'esquema MARIA, encara no té permisos per fer-ho. L'usuari MARIA li haurà de donar privilegis sobre aquest objecte per fer, per exemple, selects i inserts.
prompt volem accedir a la taula MARIA.jtemp prompt evidentment, encara no tenim privilegis per fer-ho prompt select * from MARIA.jtemp; pause select * from MARIA.jtemp; prompt encara que diu que la tabla no existeix, en realitat si que existeix pero no hi ha privilegis pause prompt S'ha de donar el privilegi de SELECT ON TEMP to PERE (ho ha de fer l'usuari MARIA, que es DBA i te permisos per poder-ho fer). prompt per tant tornem a connectar-nos com a MARIA per donar aquests privilegis prompt grant select, insert on MARIA.jtemp to PERE; pause connect MARIA/BBDD@BBDD grant select, insert on MARIA.jtemp to PERE; pause
comprovem que ara sí que tenim privilegis suficients per a select i insert, però no per a update.
prompt tornem a connectar-nos com a PERE
connect PERE/PERE@BBDD
prompt i ara si que podem fer la select que voliem
prompt select * from MARIA.jtemp;
pause
select * from MARIA.jtemp;
prompt i també tenim permisos per fer inserts
insert into MARIA.jtemp values('fila4');
select * from MARIA.jtemp;
pause
prompt pero no tenim permisos per a fer updates
update MARIA.jtemp set camp1='canvifila4' where camp1='fila4';
select * from MARIA.jtemp;
pause
Ara MARIA dóna permís per a update a PERE sobre l'objecte jtemp. Després dóno permisos totals (GRANT ALL)
connect MARIA/BBDD@BBDD grant update on MARIA.jtemp to PERE; pause connect PERE/PERE@BBDD update MARIA.jtemp set camp1='canvifila4' where camp1='fila4'; select * from MARIA.jtemp; pause prompt finalment, concedeixo tots els permisos sobre aquesta taula: promp grant all on MARIA.jtemp to PERE connect MARIA/BBDD@BBDD grant all on MARIA.jtemp to PERE pause prompt i ara puc fer coses mes radicals com prompt alter table MARIA.jtemp modify camp1 varchar2(12); prompt alter table MARIA.jtemp add camp2 varchar2(10); alter table MARIA.jtemp modify camp1 varchar2(12); alter table MARIA.jtemp add camp2 varchar2(10); describe MARIA.jtemp spool off
A realitzar
Estudia bé el contingut del script. Executa'l. Realitza modificacions del script que afectin a privilegis de sistema i privilegis d'objecte. En comptes d'usar l'usuari MARIA per fer proves, utilitza el teu usuari ASI2AXX.
Per tal de què els alumnes no entrin en conflicte entre sí, hauràs de treballar:
- en comptes de MARIA -> ASI2AXX
- en comptes de PERE -> PEREXX
Fica els noms d'usuari en majúscules. Encara que sembli un aspecte sense importància, s'ha vist que és vital per al funcionament de la pràctica.
Entrega
Entregaràs el script (i el log) resultant al Moodle.
Recursos
script admin_seguretat1.sql:
SPOOL c:\log.txt
SET echo on
prompt ens connectem amb l'usuari MARIA...
pause
connect MARIA/BBDD@BBDD
prompt i creem la taula JTEMP amb tres files per a fer proves
pause
drop table jtemp;
create table jtemp(camp1 varchar2(10));
insert into jtemp values('fila1');
insert into jtemp values('fila2');
insert into jtemp values('fila3');
select * from jtemp;
REM l'opcio CASCADE es per esborrar les taules de 'PERE' si es que n'hi han
drop user "PERE" CASCADE;
prompt creem l'usuari PERE.
create user "PERE" identified by "PERE"
default tablespace users
temporary tablespace temp
quota 1M on users
profile default;
select * from all_users where username='PERE';
connect PERE/PERE@BBDD
prompt ens tornem a connectar amb 'MARIA'
pause
connect MARIA/BBDD@BBDD
prompt donem a l'usuari PERE el rol de CONNECT i RESOURCE, que entre d'altres inclou els privilegis de CREATE SESSION, CREATE TABLE i CREATE VIEW
pause
grant "CONNECT","RESOURCE" to "PERE";
connect PERE/PERE@BBDD
create table ptemp(camp1 varchar2(10));
insert into ptemp values('fila1');
select * from ptemp;
pause
prompt volem accedir a la taula MARIA.jtemp
prompt evidentment, encara no tenim privilegis per fer-ho
prompt select * from MARIA.jtemp;
pause
select * from MARIA.jtemp;
prompt encara que diu que la tabla no existeix, en realitat si que existeix pero no hi ha privilegis
pause
prompt S'ha de donar el privilegi de SELECT ON TEMP to PERE (ho ha de fer l'usuari MARIA, que es DBA i te permisos per poder-ho fer).
prompt per tant tornem a connectar-nos com a MARIA per donar aquests privilegis
prompt grant select, insert on MARIA.jtemp to PERE;
pause
connect MARIA/BBDD@BBDD
grant select, insert on MARIA.jtemp to PERE;
pause
prompt tornem a connectar-nos com a PERE
connect PERE/PERE@BBDD
prompt i ara si que podem fer la select que voliem
prompt select * from MARIA.jtemp;
pause
select * from MARIA.jtemp;
prompt i també tenim permisos per fer inserts
insert into MARIA.jtemp values('fila4');
select * from MARIA.jtemp;
pause
prompt pero no tenim permisos per a fer updates
update MARIA.jtemp set camp1='canvifila4' where camp1='fila4';
select * from MARIA.jtemp;
pause
connect MARIA/BBDD@BBDD
grant update on MARIA.jtemp to PERE;
pause
connect PERE/PERE@BBDD
update MARIA.jtemp set camp1='canvifila4' where camp1='fila4';
select * from MARIA.jtemp;
pause
prompt finalment, concedeixo tots els permisos sobre aquesta taula:
promp grant all on MARIA.jtemp to PERE
connect MARIA/BBDD@BBDD
grant all on MARIA.jtemp to PERE
pause
prompt i ara puc fer coses mes radicals com
prompt alter table MARIA.jtemp modify camp1 varchar2(12);
prompt alter table MARIA.jtemp add camp2 varchar2(10);
alter table MARIA.jtemp modify camp1 varchar2(12);
alter table MARIA.jtemp add camp2 varchar2(10);
describe MARIA.jtemp
spool off
Durarda
2 hores
creat per Joan Quintana Compte, gener 2010