Esquemas

Oracle define esquema como la colección de objetos o estructuras lógicas que corresponden directamente a los datos almacenados, y crea un nuevo esquema por cada usuario que crea objetos en la base de datos.

El conjunto de objetos que le pertenecen a un usuario, por ejemplo, teniendo al usuario HR todos los objetos que este crea (tablas, indices, vistas, procedimientos almacenados) le pertenecen a el y unicamente a el, esto es le pertenecen al schema HR, cualquier otro usuario puede tener acceso a estos objetos siempre y cuando el usuario HR se los otorgue.

Para crear esquemas necesitamos empezar creando un tablespace Creación de un tablespace para datos y otro para índices. Estos tablespaces son la ubicación donde se almacenarán los objetos del esquema de Oracle que vamos a crear. Tablespace para datos, con tamaño inicial de 1024 Mb, y auto extensible

CREATE TABLESPACE "APPDAT" LOGGING DATAFILE 'RUTA.dbf' SIZE 1024M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

Tablespace para índices, con tamaño inicial de 512 Mb, y auto extensible

CREATE TABLESPACE "APPIDX" LOGGING DATAFILE 'RUTA.dbf' SIZE 512M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

La creación de estos tablespaces no es obligatoria, pero sí recomendable, así cada usuario de la BD tendrá su propio espacio de datos. Creación del usuario que va a trabajar sobre estos tablespaces, y que será el propietario de los objetos que se se creen en ellos

CREATE USER "APP" PROFILE "DEFAULT" IDENTIFIED BY "APPPWD" DEFAULT TABLESPACE "APPDAT" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;

Si no se especifica un tablespace, la BD le asignará el tablespace USERS, que es el tablespace que se utiliza por defecto para los nuevos usuarios.

Se asigna los permisos necesarios para trabajar. Si se le asignan los roles 'Connect' y 'Resource' ya tiene los permisos mínimos, podrá conectarse a la base de datos y realizar las operaciones más habituales de consulta, modificación y creación de objetos en su propio esquema.

GRANT "CONNECT" TO "APP"; GRANT "RESOURCE" TO "APP";

Completamos la asignación de permisos con privilegios específicos sobre objetos del esquema Oracle para asegurarnos de que el usuario pueda realizar todas las operaciones que creamos necesarias

GRANT ALTER ANY INDEX TO "APP";

GRANT ALTER ANY SEQUENCE TO "APP";

GRANT ALTER ANY TABLE TO "APP";

GRANT ALTER ANY TRIGGER TO "APP";

GRANT CREATE ANY INDEX TO "APP";

GRANT CREATE ANY SEQUENCE TO "APP";

GRANT CREATE ANY SYNONYM TO "APP";

GRANT CREATE ANY TABLE TO "APP";

GRANT CREATE ANY TRIGGER TO "APP";

GRANT CREATE ANY VIEW TO "APP";

GRANT CREATE PROCEDURE TO "APP";

GRANT CREATE PUBLIC SYNONYM TO "APP";

GRANT CREATE TRIGGER TO "APP";

GRANT CREATE VIEW TO "APP";

GRANT DELETE ANY TABLE TO "APP";

GRANT DROP ANY INDEX TO "APP";

GRANT DROP ANY SEQUENCE TO "APP";

GRANT DROP ANY TABLE TO "APP";

GRANT DROP ANY TRIGGER TO "APP";

GRANT DROP ANY VIEW TO "APP";

GRANT INSERT ANY TABLE TO "APP";

GRANT QUERY REWRITE TO "APP";

GRANT SELECT ANY TABLE TO "APP";

GRANT UNLIMITED TABLESPACE TO "APP";

Para crear un esquema podemos seguir estos pasos

Use hr; go create schema mi_esquema Authorization guest create table mitabla (id int , nombre varchar) grant select to guest;

y para mirar el esquema

select * from information_schema.schemata where schema_name = 'mi_esquema';