M2 - Bases de dades / Continguts UF3: Privilegis i usuaris

De wikiserver
La revisió el 19:44, 4 feb 2018 per Rsort (Discussió | contribucions) (Modificar comptes d'Usuaris)
Dreceres ràpides: navegació, cerca

Crear Usuaris y assignar privilegis

El següent és un resum d'algunes consideracions al moment de crear un usuari o compte en Oracle, i els privilegis i rols que li podem assignar.

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 suporta altres mètodes (com biometric, 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).

Per exemple, connectat com l'usuari SYS, vam crear un usuari i la seva clau així:

SQL> CREATE USER ahernandez IDENTIFIED BY ahz DEFAULT TABLESPACE users;

Si no s'indica un Tablespace per defecte, l'usuari pren el que està definit en la BD (generalment el SYSTEM). Per modificar el Tablespace default d'un usuari es fa de la següent manera:

SQL> ALTER USER jperez DEFAULT TABLESPACE datos;

També podem assignar als usuaris un Tablespace temporal on s'emmagatzemen operacions d'ordenament. Aquestes inclouen les clàusules ORDER BY, GROUP BY, SELECT DISTINCT, MERGE JOIN, o CREATE INDEX (també és utilitzat quan es creen Taules temporals).

SQL> CREATE USER jperez IDENTIFIED BY jpz DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

Addicionalment, a cada usuari es pot assignar a un profile o perfil, que té dos propòsits principalment:

  • Limita l'ús de recursos, la qual cosa és recomanable, per exemple en ambients de Desenvolupament.
  • Garanteix i reforça regles de Seguretat a nivell de comptes.


Exemples, quan es crea l'usuari o assignar un perfil existent:

SQL> CREATE USER jperez IDENTIFIED BY jpz DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp PROFILE resource_profile;

SQL> ALTER USER jperez PROFILE perfil_desa;

Modificar comptes d'Usuari

Per modificar un usuari creat, per exemple canviar la seva clau, tenim la sintaxis:

SQL> ALTER USER NOMBRE_USUARIO IDENTIFIED BY CLAVE_ACCESO [DEFAULT TABLESPACE ESPACIO_TABLA] [TEMPORARY TABLESPACE ESPACIO_TABLA] [QUOTA {ENTERO {K | M } | UNLIMITED } ON ESPACIO_TABLA [PROFILE PERFIL];

Privilegios de Sistema y de Objetos

En Oracle existen dos tipos de privilegios de usuario.

  • System. Que permite al usuario hacer ciertas tareas sobre la BD, como por ejemplo crear un Tablespace. Estos permisos son otorgados por el administrador o por alguien que haya recibido el permiso para administrar ese tipo de privilegio. Existen como 100 tipos distintos de privilegios de este tipo.

En general los permisos de sistema, permiten ejecutar comandos del tipo DDL (Data definition Language), como CREATE, ALTER y DROP o del tipo DML (Data Manipulation Language). Oracle 10g tiene mas de 170 privilegios de sistema los cuales pueden ser vistos consultando la vista: SYSTEM_PRIVILEGE_MAP

Entre todos los privilegios de sistema que existen, hay dos que son los importantes: SYSDBA y SYSOPER. Estos son dados a otros usuarios que serán administradores de base de datos.

Para otorgar varios permisos a la vez, se hace de la siguiente manera:

SQL> GRANT CREATE USER, ALTER USER, DROP USER TO ahernandez;

  • Object. Este tipo de permiso le permite al usuario realizar ciertas acciones en objetos de la BD, como una Tabla, Vista, un Procedure o Función, etc. Si a un usuario no se le dan estos permisos sólo puede acceder a sus propios objetos (véase USER_OBJECTS). Este tipo de permisos los da el owner o dueño del objeto, el administrador o alguien que haya recibido este permiso explícitamente (con Grant Option).

Por ejemplo, para otorgar permisos a una tabla Ventas para un usuario particular:

SQL> GRANT SELECT,INSERT,UPDATE, ON analista.venta TO jperez;

Adicionalmente, podemos restringir los DML a una columna de la tabla mencionada. Si quisieramos que este usuario pueda dar permisos sobre la tabla Factura a otros usuarios, utilizamos la cláusula WITH GRANT OPTION. Ejemplo:

SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON venta TO mgarcia WITH GRANT OPTION;

Asignar cuotas a Usuarios

Por defecto ningun usuario tiene cuota en los Tablespaces y se tienen tres opciones para poder proveer a un usuario de una quota:

  • Sin limite, que permite al usuario usar todo el espacio disponible de un Tablespace.
  • Por medio de un valor, que puede ser en kilobytes o megabytes que el usuario puede usar. Este valor puede ser mayor o nenor que el tamaño del Tablespace asignado a él.
  • Por medio del privilegio UNLIMITED TABLESPACE, se tiene prioridad sobre cualquier cuota dada en un Tablespace por lo que tienen disponibilidad de todo el espacio incluyendo en SYSTEM y SYSAUX.

No se recomienda dar cuotas a los usuarios en los Tablespaces SYSTEM y SYSAUX, pues tipicamente sólo los usuarios SYS y SYSTEM pueden crear objetos en éstos. Tampoco dar cuotas en los Tablespaces Temporal o del tipo Undo.

Roles

Finalmente los Roles, que son simplemente un conjunto de privilegios que se pueden otorgar a un usuario o a otro Rol. De esa forma se simplifica el trabajo del DBA en esta tarea.

Por default cuando creamos un usuario desde el Enterprise Manager se le asigna el permiso de connect, lo que permite al usuario conectarse a la BD y crear sus propios objetos en su propio esquema. De otra manera, debemos asignarlos en forma manual.

Para crear un Rol y asignarlo a un usuario se hace de la siguiente manera:

SQL> CREATE ROLE appl_dba;

Opcionalmente, se puede asignar una clave al Rol:

SQL> SET ROLE appl_dba IDENTIFIED BY app_pwd;

Para asignar este Rol a un usuario:

SQL> GRANT appl_dba TO jperez;

Otro uso común de los roles es asignarles privilegios a nivel de Objetos, por ejemplo en una Tabla de Facturas en donde sólo queremos que se puedan hacer Querys e Inserts:

SQL> CREATE ROLE consulta;

SQL> GRANT SELECT,INSERT on analista.factura TO consulta;

Y finalmente asignamos ese rol con este “perfil” a distintos usuarios finales:

SQL> GRANT consulta TO ahernandez;

Nota: Existen algunos roles predefinidos, tales como: CONNECT, CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE SEQUENCE, CREATE DATABASE LINK, CREATE CLUSTER, ALTER SESSION, RESOURCE, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TRIGGER, CREATE TYPE, CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR SCHEDULER, CREATE ANY JOB, CREATE JOB, EXECUTE ANY CLASS, EXECUTE ANY PROGRAM, MANAGE SCHEDULER, etc.

  • DBA: Tiene la mayoría de los privilegios, no es recomendable asignarlo a usuarios que no son administradores.
  • SELECT_CATALOG_ROLE: No tiene privilegios de sistema, pero tiene cerca de 1600 privilegios de objeto.

Para consultar los roles definidos y los privilegios otorgados a través de ellos, utilize las vistas:

SQL> select * from DBA_ROLES; SQL> select * from DBA_ROLE_PRIVS order by GRANTEE;