M2 - Bases de dades / Continguts UF3: Administració bàsica i seguretat

De wikiserver
La revisió el 21:28, 4 feb 2018 per Rsort (Discussió | contribucions) (Creación de usuarios)
Dreceres ràpides: navegació, cerca

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. Així mateix, l'usuari també té altres funcions:

  • Ser el propietari de certs objectes.
  • Definició del //tablespace //per defecte per als objectes d'un usuari.
  • Còpies de seguretat.
  • Quotes d'emmagatzematge.

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.

Creació d'usuaris

La creació d'usuaris es fa a través de la sentència SQL CREATE USER La seva sintaxi bàsica és:

CREATE USER nomeni_usuari IDENTIFIED [ BY clau | EXTERNALLY ] { DEFAULT TABLESPACE tablespace_per_defecte } { TEMPORARY TABLESPACE tablespace_temporal } { DEFAULT ROLE [ rols, ALL [EXCEPT rols], NONE ] };

La clàusula IDENTIFIED BY permet indicar el tipus d'autorització que s'utilitzarà: · Interna d'Oracle: una clau per a cada usuari de base de dades. · Interna del SOTA: utilitzant la seguretat del SOTA.

La clàusula DEFAULT TABLESPACE serà el //tablespace //per defecte en la creació d'objectes de l'usuari que estem creant. Si s'omet s'utilitzarà el //tablespace// SYSTEM.

La clàusula TEMPORARY TABLESPACE indica el //tablespace //que s'utilitzarà per a la creació d'objectes temporals en l'operacions internes d'Oracle. Si s'omet s'utilitzarà el //tablespace //SYSTEM.

La clàusula DEFAULT ROLE permet assignar rols de permisos durant la creació de l'usuari.

Exemples:

CREATE USER ADMINISTRADOR IDENTIFIED BY MANAGER DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMPORARY_DATA DEFAULT ROLE DBA;

CREATE USER PEPOTE IDENTIFIED BY TORO;

CREATE USER JUANCITO IDENTIFIED BY PEREZ DEFAULT TABLESPACE DADES_COMPTABILITAT TEMPORARY TABLESPACE TEMPORARY_DATA;

Creación de roles

La creación de roles permite asignar un grupo de permisos a un usuario, y poder modificar este grupo de permisos sin tener que ir modificando todos los usuarios. Si asignamos un rol con 10 permisos a 300 usuarios, y posteriormente añadimos un permiso nuevo al rol, no será necesario ir añadiendo este nuevo permiso a los 300 usuarios, ya que el rol se encarga automáticamente de propagarlo. La sintaxis básica es:

CREATE ROLE nombre_rol { [NOT IDENTIFIED | IDENTIFIED [BY clave | EXTERNALLY };

Una vez que el rol ha sido creado será necesario añadirle permisos a través de instrucción GRANT.

Inicialmente Oracle tiene predefinidos los siguiente roles (entre otros):

Rol predefinido Descripción
CONNECT Todos los permisos necesarios para iniciar una sesión en Oracle
RESOURCE Todos los permisos necesarios para tener recursos para la creación de objetos
DBA Todos los permisos para un administrador de base de datos (DBA)
EXP_FULL_DATABASE Permisos para poder exportar toda la base de datos.
IMP_FULL_DATABASE Permisos para poder importar toda la base de datos.

Podemos decir que un usuarios normal, debe tener al menos los permisos de CONNECT (para conectarse) y de RESOURCE (para poder crear objetos).

Ejemplos:

CREATE ROL CONTROL_TOTAL; CREATE ROL BASICO; CREATE ROL ACCESO_CONTABILIDAD;

Privilegios de sistema

Ya hemos dicho que los privilegios de sistema son permisos para realizar ciertas operaciones en la base de datos. El modo de asignar un privilegio es a través de la instrucción GRANT y el modo de cancelar un privilegio es a través de la instrucción REVOKE. La sintaxis básica de ambas instrucciones es:

Instrucción GRANT

GRANT [privilegios_de_sistema | roles] TO [usuarios | roles |PUBLIC] { WITH ADMIN OPTION };

Es posible dar más de un privilegio de sistema o rol, separándolos por comas. También es posible asignarle uno (o varios) privilegios a varios usuarios, separándolos por comas. Si se le asigna el privilegio a un rol, se asignará a todos los usuarios que tengan ese rol. Si se asigna el privilegio a PUBLIC, se asignará a todos los usuarios actuales y futuros de la base de datos. La cláusula WITH ADMIN OPTION permite que el privilegio/rol que hemos concedido, pueda ser concedido a otros usuarios por el usuario al que estamos asignando. La lista de los privilegios de sistema existentes se puede encontrar en el //Oracle8 SQL Reference// en la sección GRANT (System privileges and roles).

Ejemplos:

GRANT DBA TO ADMINISTRADOR;

GRANT CREATE USER TO PEPOTE WITH ADMIN OPTION;

GRANT DROP USER TO JUANCITO;

GRANT CONNECT, RESOURCE TO PEPOTE, JUANCITO;

GRANT CONNECT, RESOURCE, DBA, EXP_FULL_DATABASE, IMP_FULL_DATABASE TO CONTROL_TOTAL;

GRANT CONTROL_TOTAL TO ADMINISTRADOR;

Instrucción REVOKE

REVOKE [privilegios_de_sistema | roles] FROM [usuarios | roles |PUBLIC];

Es posible eliminar más de un privilegio de sistema o rol, separándolos por comas. También es posible eliminar uno (o varios) privilegios a varios usuarios, separándolos por comas. Si se le elimina el privilegio de un rol, se eliminará de todos los usuarios que tengan ese rol. Si se elimina el privilegio de PUBLIC, se eliminará de todos los usuarios actuales y futuros de la base de datos. La lista de los privilegios de sistema existentes se puede encontrar en el //Oracle8 SQL Reference// en la sección GRANT (System privileges and roles). Como es lógico, sólo se podrá eliminar un privilegio/rol, si previamente ha sido concedido a través de la instrucción GRANT.

Ejemplos:

REVOKE DBA FROM ADMINISTRADOR;

REVOKE CREATE USER FROM PEPOTE;

REVOKE DROP USER FROM JUANCITO;

RECOKE CONNECT, RESOURCE FROM PEPOTE, JUANCITO;

REVOKE CONNECT, RESOURCE, DBA, EXP_FULL_DATABASE, IMP_FULL_DATABASE FROM CONTROL_TOTAL;

REVOKE CONTROL_TOTAL FROM ADMINISTRADOR;

Privilegios sobre objetos

Los privilegios sobre objetos permiten que cierto objeto (creado por un usuario) pueda ser accedido por otros usuarios. El nivel de acceso depende del permiso que le demos: podemos darle permiso de SELECT, de UPDATE, de DELETE, de INSERT o de todos ellos. La sintaxis básica es:

GRANT [ALL {PRIVILEGES} | SELECT | INSERT | UPDATE | DELETE] ON objeto TO [usuario | rol | PUBLIC] {WITH ADMIN OPTION};

Al igual que con los permisos de sistema, es posible asignar un permiso de objeto sobre uno o varios (separados por comas) usuario y/o roles. Si se asigna a PUBLIC será accesible en toda la base de datos.

Si se incluye la cláusula WITH ADMIN OPTION, este permiso podrá ser concedido por el usuario al que se le ha asignado.

Ejemplos:

GRANT ALL ON FACTURA TO CONTROL_TOTAL;

GRANT SELECT, UPDATE ON ALUMNO TO PEPOTE, JUANCITO WITH ADMIN OPTION;

GRANT SELECT ON PROFESOR TO PUBLIC;

GRANT SELECT ON APUNTE TO ACCESO_CONTABILIDAD;

El modo de eliminar permisos de objeto es con la instrucción REVOKE:

REVOKE [ALL {PRIVILEGES} | SELECT | INSERT | UPDATE | DELETE] ON objeto FROM [usuario | rol | PUBLIC] {WITH ADMIN OPTION};

Al igual que con los permisos de sistema, es posible asignar un permiso de objeto sobre uno o varios (separados por comas) usuario y/o roles. Si se asigna a PUBLIC será accesible en toda la base de datos.

Si se incluye la cláusula WITH ADMIN OPTION, este permiso podrá ser concedido por el usuario al que se le ha asignado.

Ejemplos:

GRANT ALL ON FACTURA TO CONTROL_TOTAL;

GRANT SELECT, UPDATE ON ALUMNO TO PEPOTE, JUANCITO

WITH ADMIN OPTION;

GRANT SELECT ON PROFESOR TO PUBLIC;

GRANT SELECT ON APUNTE TO ACCESO_CONTABILIDAD;

Eliminación de usuarios

La eliminación de usuarios se hace a través de la instrucción DROP USER. Su sintaxis es:

DROP USER usuario {CASCADE};

La cláusula CASCADE permite borrar el usuario y todos los objetos que posea.