UD3 ASI-C6-ASGBD. Seguretat a Oracle

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

La seguretat té molt a veure amb la gestió d'usuaris i la concessió i supressió de privilegis als usuaris. El DBA és el responsable de permetre o denegar l'accés als usuaris a determinats objectes o recursos de la BD. Podem classificar la seguretat en dues categories: seguretat del sistema i seguretat de les dades.

Usuaris

Associat a cada usuari de la base de dades hi ha un esquema amb el mateix nom. Un esquema és una col.lecció lògica d'objectes (taules, vistes, seqüències, sinònims, index, clusters, procedures, funcions, paquests, database links). Per defecte, cada usuari té accés a tots els objectes del seu esquema, i pot accedir als objectes d'un altre usuari sempre i quan aquest li hagi concedit el privilegi de fer-ho. Quan s'instal.la el sistema, per defecte existeixen els següents usuaris:

'Nota. Fins la versió Oracle 8, el SYS tenia password change_on_install i el SYSTEM tenia password manager. Evidentment, era recomanable canviar aquests passwords després de la instal.lació. A partir de la versió Oracle 9, en el procés d'instal.lació es demana quin serà el password per a aquests dos usuaris.

El diccionari de dades està format per un conjunt de taules i vistes en el tablespace SYSTEM. Els usuaris tenen accés de només-lectura a les vistes del diccionari, que es crea al mateix temps que la BD i el propietari és SYS. Conté: objectes de la BD, noms d'usuari, drets i autoritzacions, restriccions, informació sobre l'espai lliure/ocupat.

SQL> DESC DICTIONARY;
SQL> SELECT TABLE_NAME FROM DICTIONARY;

El prefix d'una vista del diccionari indica el nivell d'accés a ell: Vistes amb prefix USER i ALL (accessibles a tots els usuaris); vistes DBA (només l'administrador pot utilitzar aquestes vistes).

Sentència per crear un usuari:

CREATE USER nom_usuari
IDENTIFIED BY clau_acces
[DEFAULT TABLESPACE espai_taula]
[TEMPORARY TABLESPACE espai_taula]
[QUOTA {entero | {K|M} | UNLIMITED} ON espai_taula]
[PROFILE perfil]

Per ex,

SQL> CREATE USER pep IDENTIFIED BY pep;
Usuari creat
SQL> CONNECT pep/pep

La connexió de l'usuari pep falla perquè, encara que l'usuari s'ha creat amb èxit, no té privilegis per iniciar una sessió.

Vistes interessants:

SQL> DESC ALL_USERS
SQL> select * from ALL_USERS;
SQL> DESC DBA_USERS
SQL> SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS;
SQL> DESC USER_USERS -> informació sobre l'usuari actual.

L'opció CASCADE suprimeix tots els objectes de l'usuari abans d'esborrar l'usuari.

Privilegis

Un privilegi és la capacitat d'un usuari dins de la base de dades de realitzar determinades operacions o accedir a determinats objectes d'altres usuaris. Mitjançant l'assignació de privilegis es permet o es restringeix l'accés a les dades o la realització de canvis en les dades, la possibilitat de realitzar funcions del sistema,etc.

Quan es crea un usuari, es necessari donar-li privilegis perquè pugui començar a fer alguna cosa. Per exemple, si donem el Rol de CONNECT estarem assignant els següents privilegis: ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SESSION, CREATE SYNONIM, CREATE TABLE, CREATE VIEW.

Privilegis sobre els objectes

Ens permeten accedir i realitzar canvis en les dades d'altres usuaris. Per exemple, el privilegi de consultar una taula d'un altre usuari és un privilegi sobre objectes. Es disposa dels següents privilegis sobre objectes taules, vistes, seqüències i procediments:

ALTER, DELETE, EXECUTE, INDEX, INSERT, REFERENCES, SELECT, UPDATE

Les sentències SQL que permet cada privilegi són:

GRANT {priv_objecte [,priv_objecte]... | ALL [PRIVILEGES]}
	[(columna [,columna]...)]
ON [usuari.]objecte
TO {usuari|rol|PUBLIC} [,{usuari|rol|PUBLIC}...]
[WITH GRAN OPTION];

Privilegis del sistema

Els privilegis de sistema són els que donen dret a executar un tipus de comanda SQL o a realitzar alguna acció sobre objectes d'un tipus especificat. Per exemple, el privilegi per crear tablespaces és un privilegi del sistema. Alguns dels privilegis són:

Per exemple,

SQL> GRANT CREATE SESSION TO PERE
SQL> CONNECT PERE/PERE@BBDD

Per retirar els privilegis s'utilitza REVOKE, per ex:

SQL> REVOKE SELECT, UPDATE ON TAULA1 FROM PERE;
Denegación terminada con éxito

Vistes amb informació dels privilegis:

SESSION_PRIVS: privilegis de l'usuari actiu
USER_SYS_PRIVS: privilegis de sistema assignats a l'usuari
DBA_SYS_PRIVS: privilegis de sistema assignats als usuaris o als rols
USER_TAB_PRIVS: concessions sobre objectes que són propietats de l'usuari, concedits o rebuts per aquest.
USER_TAB_PRIVS_MADE: concessions sobre objectes que són propietats de l'usuari
USER_TAB_PRIVS_RECD: concessions sobre objectes que rep l'usuari
USER_TAB_GRANTS
USER_TAB_GRANTS_MADE
USER_TAB_GRANTS_RECD
ALL_TAB_GRANTS, ALL_TAB_GRANTS_MADE, ALL_TAB_GRANTS_RECD
USER_COL_GRANTS
USER_COL_GRANTS_MADE, USER_COL_GRANTS_RECD
ALL_COL_GRANTS, ALL_COL_GRANTS_MADE, ALL_COL_GRANTS_RECD
USER_COL_GRANTS
USER_COL_GRANTS_MADE, USER_COL_GRANTS_RECD
ALL_COL_GRANTS, ALL_COL_GRANTS_MADE, ALL_COL_GRANTS_RECD
USER_COL_PRIVS
USER_COL_PRIVS_MADE, USER_COL_PRIVS_RECD

Rols

Un conjunt de privilegis es pot agrupar en un rol. Per exemple, en un departament d'una empresa, al conjunt d'usuaris del departament els assignem el mateix rol, i d'aquesta manera tots tenen els mateixos privilegis. UN rol o funció és un conjunt de privilegis, que li assignem un nom, per facilitar la tasca d'assignació dels privilegis als usuaris o a altres rols. Els privilegis d'un rol poden ser de sistema o a nivell d'objecte.

SQL> CREATE ROLE ACCES;
SQL> GRANT SELECT, INSERT ON EMPLE TO ACCES;
SQL> GRANT INSERT ON DEPART TO ACCES;
SQL> GRANT CREATE SESSION TO ACCES;

SQL> CREATE USER MIQUEL IDENTIFIED BY MIQUEL DEFAULT TABLESPACE USERS QUOTA 100K ON USERS;
SQL> GRANT ACCES TO MIQUEL;

SQL> REVOKE INSERT ON EMPLE FROM ACCES;

SQL> DROP ROLE ACCESS

Quan eliminen el rol ACCES, automàticament retirem el rol ACCESS a l'usuari MIQUEL (en l'exemple). Per poder eliminar un rol és necessari ser administrador o tenir el privilegi DROP ANY ROLE.

Informació sobre rols en el diccionari de dades:

USER_TAB_PRIVS: concessions sobre objectes que són propietat de l'usuari, concedits o rebuts per aquest.
ROLE_SYS_PRIVS: privilegis del sistema assignats a rols
ROLE_TAB_PRIVS: privilegis sobre taules aplicats a rols
ROLE_ROLE_PRIVS: rols assignats a altres rols
SESSION_ROLES: rols actius per a l'usuari
USER_ROLE_PRIVS: rols assignats a l'usuari
DBA_SYS_PRIVS: privilegis del sistema assignats als usuaris o rols
DBA_ROLE_PRIVS: privilegis assignats a tots els usuaris i rols
DBA_ROLES: tots els rols.

Perfils

Un perfil és un conjunt de límits als recursos de la base de dades. A Oracle podem utilitzar els perfils per limitar els recursos de la base de dades per part dels usuaris. Per exemple, podem crear un perfil que limiti el temps de connexió. Per defecte, als usuaris se'ls assigna el perfile DEFAULT quan se'ls dóna d'alta, que dóna recursos il.limitats (UNLIMITED).

Els recursos que podem controlar amb els perfils són:

SQL> CREATE PROFILE perfil1 LIMIT SESSIONS_PER_USER 1 CONNECT_TIME 2;
SQL> CREATE USER CESC IDENTIFIED BY CESC
 DEFAULT TABLESPACES USERS
 QUOTA 100K ON USERS
 PROFILE perfil1;

SQL> DROP PROFILE perfil1;
error, perque hi ha usuaris assignats a aquest perfil
SQL> DROP PROFILE perfil1 CASCADE;
ara sí!!

Nota: no he pogut constatar com es limita el CONNECT_TIME i el SESSIONS_PER_USER

Compendi: Quins privilegis Oracle s'ha de donar als alumnes?

Tradicionalment als comptes d'usuari dels alumnes (ASI2AXX, DAI2AXX) s'ha donat permisos (rol) de CONNECT i DBA. Evidentment, ser DBA només queda justificat perquè estem en un entorm educatiu i la instància Oracle no és de producció (davant d'una desgràcia, es restaura o es reinstal.la i no roda cap cap).

Ara bé, quins serien els privilegis mínims que s'han d'assignar als alumnes per tal que puguin treballar amb normalitat?

Partim de la base de què els alumnes no haurien de ser DBA, i que els alumnes no poden tenir privilegis sobre els objectes dels altres companys. Evidenment, CONNECT és el rol necessari per poder iniciar una sessió (privilegi CREATE SESSION). Però amb el rol CONNECT no podem crear una taula en el nostre esquema. El rol que ens dóna la possibilitat de crear objectes en el nostre esquema és el de RESOURCE (és un rol que permet crear segments de la base de dades).

Per tant, podríem fer

SQL> grant connect, resource to ASI2AXX;
Grant succeeded.

i l'alumne podria treballar amb normalitat.

select privilege from dba_sys_privs
where grantee = 'CONNECT';

PRIVILEGE
----------------
CREATE SESSION


select privilege from dba_sys_privs
where grantee = 'RESOURCE';

PRIVILEGE
-----------------
CREATE TRIGGER
CREATE SEQUENCE
CREATE TYPE
CREATE PROCEDURE
CREATE CLUSTER
CREATE OPERATOR
CREATE INDEXTYPE
CREATE TABLE

NOTA. El rol de CONNECT ha canviat amb les versions d'Oracle. En aquesta versió (9,10,11) només té el privilegi de CREATE SESSION, però en versions anteriors (8) incloïa el privilegi de CREATE TABLE.

Fixem-nos que no es pot fer ALTER TABLE, DROP TABLE, que per als alumnes és bàsic (amb finalitats educatives).

Per tant, la solució passaria per crear un rol ALUMNE, que inclogués: rol CONNECT, rol RESOURCE, + tots els altres privilegis que s'hagin d'utilitzar (com ALTER TABLE, DROP TABLE,...).

Ara bé, llegeixo:

Oracle provides several roles that are built into the database. Some of them are DBA, RESOURCE, and CONNECT. Most DBAs use them to make their tasks easier and simpler, but each of them is a security nightmare.

Let's examine RESOURCE. This is generally given to schema owners. Did you know that it has UNLIMITED TABLESPACE system privilege, making it able to create any table anywhere in the database including the SYSTEM tablespace? Obviously, this is not what you want. You would want to restrict the tablespaces to specific users only.

Therefore, it is not prudent to use built-in roles. Rather, identify the privileges users will need, put them in the appropriate roles which you have created, and use them to control authorization.

If possible, try not to use the Oracle built-in roles like RESOURCE and CONNECT. Create your own roles.

Només amb el rol RESOURCE puc crear taules

SQL> connect system

SQL> CREATE USER "MARIA"
IDENTIFIED BY maria
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

SQL> connect maria
ERROR:
ORA-01045: user MARIA lacks CREATE SESSION privilege; logon denied

SQL> connect system

SQL> GRANT CONNECT TO "MARIA";
Grant succeeded.

SQL> connect maria

SQL> CREATE TABLE TEMP(
ID NUMBER(2),
NOM VARCHAR2(10)
);

ERROR at line 1:
ORA-01031: insufficient privileges

SQL> connect system

SQL> GRANT RESOURCE TO "MARIA";
Grant succeeded.

SQL> CREATE TABLE TEMP(
ID NUMBER(2),
NOM VARCHAR2(10)
);

Table created.

creat per Joan Quintana Compte, gener 2010

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines