M2 - Bases de dades / Continguts RA2: Administració bàsica i seguretat
Contingut
Concepte d'usuari, privilegi i rol
A l'hora d'establir una connexió amb un servidor Oracle, és necessari que utilitzem una manera d'accés, el qual descrigui de quins permisos disposarem durant la nostra connexió. Aquests permisos es defineixen sobre un nom d'usuari. Un usuari no és més que un conjunt de permisos que s'apliquen a una connexió de base de dades.
Un privilegi no és més que un permís donat a un usuari perquè realitzi certa operació. Aquestes operacions poden ser de dos tipus:
- Operació de sistema: necessita el permís de sistema corresponent.
- Operació sobre objecte: necessita el permís sobre l'objecte en qüestió.
I finalment un rol de base de dades no és més que una agrupació de permisos de sistema i d'objecte.
Comptes i permisos administratius
Comptes administratives
En la instal·lació d'ORACLE es creen dues comptes administratives i dos més amb permisos especials per tasques d'optimització i monitorització de la base de dades.
- SYS: Inicialment té la contrasenya CHANGE_ON_INSTALL que. SYS pren rol de DBA i és al seu esquema on es crea el diccionari de dades; per la qual cosa no convé de cap manera crear un altre tipus d'elements en el seu esquema.
- SYSTEM: Posseeix també el rol DBA i es crea durant la instal·lació. Al seu esquema se solen crear taules i vistes administratives (però no s'haurien de crear un altre tipus de taules).
- SYSMAN Usat per realitzar tasques administratives amb l'aplicació Database Control d'Enterprise Manager.
- DBSMNP Usuari que té permisos per monitoritzar Enterprise Manager.
Privilegis administratius
- SYSDBA: Amb capacitat de parar i iniciar (instruccions SHUTDOWN i STARTUP) la instància de base de dades; modificar la base de dades (ALTER DATABASE), crear i esborrar bases de dades (CREATE i DROP DATABASE), crear el fitxer de paràmetres (CREATE SPFILE), canviar el mode d'arxivat de la base de dades, recuperar la base de dades i a més inclou el privilegi de sistema RESTRICTED SESSION. A la pràctica, les seves capacitats són les associades a l'usuari SYS.
- SYSOPER: Permet el mateix que l'anterior excepte: crear i esborrar la base de dades i recuperar en totes les formes la base de dades (hi ha modes de recuperació que requereixen el privilegi anterior).
La vista V$PWFILE_USERS ens permet examinar els usuaris administratius.
Propietats dels usuaris
La configuració d'un usuari es refereix a establir:
- El nom d'usuari no ha de superar 30 caràcters, no ha de tenir caràcters especials i ha d'iniciar amb una lletra.
- Un mètode d'autenticació. El mes comú és una clau o password, però Oracle 10g i posteriors suporten altres mètodes (com biomètric, certificat i autenticació per mitjà de token).
- Un Tablespace default, el qual és on l'usuari va a poder crear els seus objectes per defecte, no obstant això, això no significa que pugui crear objectes, o que tingui una quota d'espai. Aquests permisos s'assignen de forma separada, excepte si utilitza el privilegi RESOURCE el que assigna una quota unlimited, fins i tot en el Tablespace SYSTEM! No obstant això si això ocorre, un. pot posteriorment moure els objectes creats en el SYSTEM a un altre Tablespace.
- Un Tablespace temporal, on l'usuari crea els seus objectes temporals i fa els sort o ordenaments.
- Un perfil o profile d'usuari, que són les restriccions que pot tenir el seu compte (opcional).
- Privilegis i rols: Permeten especificar els permisos que té l'usuari.
- Estat del compte d'usuari:
- -Oberta. L'usuari pot connectar i fer les seves accions habituals
- -Bloquejada. L'usuari no podrà connectar mentre segueixi en estat bloquejat. El bloqueig el realitza el DBA:
- ALTER USER usuari ACCOUNT LOCK
- -Expirada. El compte va esgotar el temps màxim assignat a aquest. Per sortir d'aquest estat, l'usuari/ària ha de resetejar la contrasenya d'usuari.
- -Expirada i bloquejada.
- -Expirada en període de gràcia. Està en els darrers moments d'ús abans de passar a estat d'expirada.
Autenticació
L'autenticació defineix la manera com l'usuari verifica qui és. Hi ha mètodes d'autenticació més segurs que altres. Assegurar l'autenticació implicaria assegurar el mitjà la comunicació entre usuari i base de dades amb protocols de xifratge. D'altra banda, cal protegir especialment els usuaris administradors.
- autenticació pel sistema operatiu. Només per usuaris amb privilegis administratius.
- autenticació per arxiu de contrasenyes
- autenticació per contrasenya al diccionari de dades. El més habitual dels usuaris normals..
- autenticació externa: mitjançant serveis externs com Kerberos o RADIUS.
- autenticació global: mitjançant un servei LDAP.
Control d'usuaris
Creació d'usuaris
La sentencia SQL per la creació d'usuaris és:
CREATE USER nombre IDENTIFIED BY contraseña [opciones]
Format complert:
CREATE USER nombre {IDENTIFIED BY contraseña | EXTERNALLY | GLOBALLY AS nombreGlobal} [DEFAULT TABLESPACE tableSpacePorDefecto] [TEMPORARY TABLESPACE tableSpacetTemporal] [QUOTA {cantidad [K|M] | UNLIMITED} ON tablespace [QUOTA {cantidad [K|M] | UNLIMITED} ON tablespace […]] ] [PASSWORD EXPIRE] [ACCOUNT {UNLOCK|LOCK}]; [PROFILE {perfil | DEFAULT}]
- Exemples:
CREATE USER ADMINISTRADOR IDENTIFIED BY MANAGER DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMPORARY_DATA PROFILE DBA; CREATE USER PEPOTE IDENTIFIED BY TORO; CREATE USER JUANCITO IDENTIFIED BY PEREZ DEFAULT TABLESPACE DADES_COMPTABILITAT TEMPORARY TABLESPACE TEMPORARY_DATA;
Modificar usuaris
Per modificar els usuaris s'empra la instrucció ALTER USER.
- Exemple:
ALTER USER jpou QUOTA UNLIMITED ON usuaris;
Eliminar usuaris
DROP USER usuario [CASCADE];
L'opció CASCADE elimina els objectes de l'esquema de l'usuari abans d'eliminar el mateix usuari. És obligatori si l'esquema conté objectes.
Consultar usuaris
La vista administrativa DBA_USERS mostra la llista i la configuració de tots els usuaris del sistema. Per observar l'estructura de la vista, sempre és convenient fer servir DESCRIU DBA_USERS per tal de consultar les columnes que ens interessin més.
https://jorgesanchez.net/manuales/abd/control-usuarios-oracle.html
Privilegis de Sistema i d'Objectes
En Oracle existeixen dos tipus de privilegis d'usuari.
Privilegis de sistema
- - Permeten a l'usuari fer certes tasques sobre la BD, com per exemple crear un Tablespace.
- - Atorgats per l'administrador o per algú que hagi rebut el permís per administrar aquest tipus de privilegi.
Exemples:
Privilegi | Descripció |
---|---|
CREATE SESSION | Permet connectar-se a la base de dades |
ALTER DATABASE | Permet modificar l'estructura de la base de dades |
ALTER SYSTEM | Permet modificar els paràmetres i variables del sistema |
CREATE TABLE | Permet crear taules |
CREATE USER | Permet crear usuaris i especificar contrasenyes |
CREATE ROLE | Permet crear rols |
GRANT ANY OBJECT PRIVILEGE | Permet concedir privilegis sobre objectes que no són de l'usuari |
SELECT ANY TABLE | Permet seleccionar dades en taules d'altres usuaris |
- Oracle 11g té 208 privilegis de sistema els quals poden ser vists consultant la vista: SYSTEM_PRIVILEGE_MAP
- Els privilegis de sistema: SYSDBA i SYSOPER. permeten que altres usuaris tinguin privilegis d'administradors de base de dades.
Atorgar privilegis
Es fa mitjançant la instrucció GRANT:
GRANT privilegi1 [,privilegi2[,…]] TO usuari [WITH ADMIN OPTION];
L'opció WITH ADMIN OPTION permet que l'usuari a qui es concedeix el privilegi pot concedir aquest privilegi a altres usuaris. És, per tant, una opció a utilitzar amb cautela.
- Exemple:
SQL> GRANT REATE SESSION, ALTER SESSION, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE SEQUENCE, CREATE TRIGGER, CREATE PROCEDURE, CREATE TYPE TO jpou;
Llevant privilegis
Per retirar privilegis concedits a un usuari, s'utilitza la instrucció REVOKE que funciona així:
REVOKE privilegio1 [,privilegio2 [,…]] FROM usuario;
Privilegis d'objecte
- - Permeten a l'usuari realitzar certes accions en objectes de la BD, com una Taula, Vista, un Procedure o Funció, etc.
- - Per defecte un usuari només pot accedir als seus propis objectes (USER_OBJECTS).
- - Atorgats pel propietari de l'objecte, l'administrador o algú que hagi rebut aquest privilegi explícitament (amb GRANT OPTION).
Sintaxis:
GRANT {privilegio [(listaColumnas)] [,privilegio [(listaColumnas)] [,…]] | ALL [PRIVILEGES]} ON [esquema.]objeto TO {usuario | rol | PUBLIC} [,{usuario | rol | PUBLIC} [,…]] [WITH GRANT OPTION]
L'opció ALL concedeix tots els possibles privilegis sobre l'objecte. Es poden assignar diversos privilegis alhora i també diversos possibles usuaris. L'opció WITH GRANT OPTION permet a l'usuari a qui se li concedeixen els privilegis, que pugui, alhora, concedir aquests mateixos privilegis a un altre usuari. Addicionalment, també podem restringir els DML a una columna de la taula.
Per exemple, per atorgar permisos a una taula Vendes per a un usuari particular:
SQL> GRANT SELECT,INSERT,UPDATE ON analista.venta TO jperez;
Per atorgar el permís de concedir el privilegi:
SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON venta TO mgarcia WITH GRANT OPTION;
LLevant privilegis d'objecte
Sintaxis:
REVOKE {privilegio1 [,privilegi2] [,…]] | ALL [PRIVILEGES]} ON [esquema.]objecte FROM {usuari | rol | PUBLIC} [,{usuari | rol | PUBLIC} [,…]] [CASCADE CONSTRAINTS]
CASCADE CONSTRAINTS elimina qualsevol restricció que impedeixi l'esborrament del privilegi.
Només podeu revocar els privilegis d'objecte concedits, l'usuari que va concedir aquests privilegis.
Informació sobre privilegis
Les vistes que permeten mostrar informació sobre privilegis són:
Vista | Descripció |
---|---|
DBA_SYS_PRIVS | Privilegis del sistema assignats a usuaris i rols |
DBA_TAB_PRIVS | Llista de tots els privilegis de tots els objectes de la base de dades |
DBA_COL_PRIVS | Llista de tots els privilegis aplicats a columnes de la base de dades |
SESSION_PRIVS | Privilegis en actiu per a l'usuari i sessió actuals |
USER_SYS_PRIVS | Privilegis del sistema assignats a l'usuari |
USER_TAB_PRIVS_MADE | Privilegis d'objecte assignats als objectes actuals |
USER_TAB_PRIVS_RECD | Privilegis d'objecte (d'altres usuaris) concedits a l'usuari actual |
USER_COL_PRIVS_MADE | Privilegis d'objecte assignats a columnes d'objectes de l'usuari actual |
USER_COL_PRIVS_RECD | Privilegis assignats a columnes d'objectes (d'altres usuaris) i concedits a l'usuari actual |
Administració de rols
Els rols constitueixen un grup de privilegis agrupats amb un nom. Això facilita la assignació i administració de privilegis als usuaris, donat que, assignant el rol a un o varis usuaris li(els) assignem tots els privilegis del rol. A més a més, la modificació del rol modifica els privilegis de tots els usuaris que el tinguin assignat.
Crear rols
Sintaxi bàsica és:
CREATE ROLE rol [NOT IDENTIFIED | IDENTIFIED {BY password | EXTERNALLY | GLOBALLY | USING package}];
L'opció IDENTIFIED fa que el rol només es pugui fer servir si l'usuari s'identifica amb el mètode que indiquem en aquesta instrucció. Les maneres d'identificar-se són les mateixes formes que s'utilitzen en identificar un usuari (vistes anteriorment), llevat que ara en disposem d'una de nova: l'opció PACKAGE que fa que el rol només es pugui utilitzar si fem servir el paquet d'aplicacions indicat.
Per defecte, un rol no requereix identificació.
Modificar rols
Disposem de la instrucció ALTER ROLE permet modificar la configuració del rol. Té les mateixes opcions que CREATE ROLE i només es fa servir si volem establir un nou mètode per autenticar-nos.
Assignar i llevar rols
Es realitza amb la instrucció GRANT i es fa servir igual que quan establim permisos als usuaris, s'indicaria un nom de rol en lloc d'un nom d'usuari. Per exemple, si volem assignar els privilegis CREATE SESSION i CREATE TABLE a un rol anomenat rol1. Es faria:
GRANT CREATE TABLE, CONNECT TO rol1;
I per llevar els privilegis assignats a un rol:
REVOKE CREATE TABLE FROM rol1;
Assignar rols a usuaris
Sintaxis:
GRANT rol1 [,rol2 [,…]] TO {usuario|rol|PUBLIC [,{usuario|rol|PUBLIC} [,…] } [WITH ADMIN OPTION]
PUBLIC assigna el rol a tots els usuaris i WITH ADMIN OPTION permet a l'usuari al qual se li concedeix el rol, concedir aquest rol a altres usuaris.
Rols per defecte
Els usuaris tenen una sèrie de rols per defecte, aquests són aquells rols que van units a lusuari, de manera que quan un usuari llança una sessió, els privilegis que contenen els seus rols per defecte, comencen a funcionar.
Quan assignem un rol mitjançant l'ordre GRANT, aquest passa a ser un rol per defecte.
Rols predefinits
Inicialment Oracle té predefinits mes de cinquanta rols que poden assignar-se als usuaris, entre ells:
Rol predefinit | Descripció |
---|---|
CONNECT | Tots els permisos necessaris per iniciar una sessió en Oracle |
RESOURCE | Tots els permisos necessaris per tenir recursos per a la creació d'objectes |
DBA | Tots els permisos per a un administrador de base de dades (DBA) |
EXP_FULL_DATABASE | Permisos per poder exportar tota la base de dades. |
IMP_FULL_DATABASE | Permisos per poder importar tota la base de dades. |
Podem dir que un usuaris normal, ha de tenir almenys els permisos de CONNECT (per connectar-se) i de RESOURCE (per poder crear objectes).
Activar i desactivar rols
No tots els rols apareixen activats. Per saber els rols que estan activats en una sessió d'usuari, només caldrà consultar el contingut de la vista SESSION_ROLES.
En iniciar sessió cada usuari tindrà activats els privilegis que se li van assignar explícitament i els rols per defecte.
L'activació (i també la desactivació) d'un rol es fa mitjançant SET ROLE (només podem activar i desactivar rols que l'usuari tingui assignats mitjançant la instrucció GRANT). La seva sintaxi és:
SET ROLE { rol1 [IDENTIFIED BY contraseña] [,rol2 [IDENTIFIED BY contraseña] [,…]] | ALL [EXCEPT rol1 [,rol2 [,…]]] | NONE };
Les possibilitats són:
- Indiqueu una llista de rols que seran els que s'activin (s'usa quan s'havien desactivat)
- Indiqueu ALL per activar tots els rols, excepte aquells que s'indiquin a la clàusula EXCEPT que quedaran sense activar.
- NONE desactiva tots els rols (inclòs el rol per defecte). Només quedaran activats els privilegis individuals marcats explícitament.
L'activació i la desactivació només serveix per a la sessió actual, a la sessió següent tornaran a estar activats només els rols per defecte.
Assignar a un usuari un rol per defecte
Quan creeu un usuari mitjançant CREATE USER, no disposem de la possibilitat d'assignar un rol per defecte. De fet, se li assigna automàticament l'opció ALL que fa que tots els rols que se li assignin en el futur (mitjançant GRANT) passaran a ser rols per defecte.
La instrucció per administrar els rols per defecte és ALTER USER:
ALTER USER usuario DEFAULT ROLE {rol1 [,rol2 [,…]| ALL [EXCEPT rol1 [,rol2[,…]] |NONE ]};
L'opció ALL col·loca tots els rols com a rols per defecte, EXCEPT especifica una llista de rols que no seran col·locats com a rols per defecte. NONE fa que no hi hagi cap rol per defecte. Finalment podem simplement especificar la llista de rols que quedaran com a rols per defecte.
Eliminar rols
Per eliminar rols s'utilitza la instrucció DROP ROLE, seguida del rol a esborrar. Des d'aquell moment als usuaris als quals s'havien assignat el rol se'ls revoca.
Informació sobre rols
Les vistes que permeten mostrar informació sobre els rols són:
Vista | Descripció |
---|---|
DBA_ROLES | Mostra tots els rols de la base de dades |
DBA_ROLES_PRIVS | Rols assignats als usuaris |
ROLE_ROLE_PRIVS | Rols assignats a altres rols |
DBA_SYS_PRIVS | Privilegis del sistema assignats a usuaris i rols |
ROLE_SYS_PRIVS | Privilegis de sistema assignats a rols |
ROLE_TAB_PRIVS | Privilegis d'objecte concedits a rols |
SESSION_ROLES | Rols en actiu per a l'usuari actual |