Este script crea un usuario y este puede crear otros usuario para que puede usar las tablas según el rol que se les haya dado.
-- Autor: Mynor Choc -- Carne: 1890-09-3697 -- DBMS: Oracle 11g -- Tema: Roles. --creamos un table space. CREATE BIGFILE TABLESPACE table_tarea DATAFILE 'table_tarea.dat' SIZE 100M AUTOEXTEND ON; --creamos un usuario, desbloquemos el usuario y damos permiso de coneccion CREATE USER usuario_tarea PROFILE DEFAULT IDENTIFIED BY usuario_tarea DEFAULT TABLESPACE table_tarea ACCOUNT UNLOCK; GRANT CONNECT TO usuario_tarea; -- permiso para crear tablas, rol, usuario y conneccion GRANT CREATE TABLE TO usuario_tarea; GRANT CREATE ROLE TO usuario_tarea; GRANT CREATE USER TO usuario_tarea; GRANT UNLIMITED TABLESPACE TO usuario_tarea; GRANT CREATE TO usuario_tarea with admin option; -- habilitamos que el usuario que tenga un permiso ilimitado a la tablesspace. ALTER USER usuario_tarea quota unlimited on table_tarea; --conectamos a usuario_tarea CONNECT usuario_tarea/usuario_tarea -- creamos las tablas, llaves primarias, relaciones y los constraints CREATE TABLE clientes ( id INTEGER NOT NULL , nombre VARCHAR2 (100) NOT NULL , nit VARCHAR2 (50) NOT NULL ) ; ALTER TABLE clientes ADD CONSTRAINT clientes_PK PRIMARY KEY ( id ) ; CREATE TABLE compras ( id INTEGER NOT NULL , nombre_producto VARCHAR2(100) NOT NULL , inventario_id INTEGER NOT NULL ) ; ALTER TABLE compras ADD CONSTRAINT compras_PK PRIMARY KEY ( id ) ; CREATE TABLE inventario ( id INTEGER NOT NULL , nombre_inventario VARCHAR2 (100) NOT NULL ) ; ALTER TABLE inventario ADD CONSTRAINT inventario_PK PRIMARY KEY ( id ) ; CREATE TABLE productos ( id INTEGER NOT NULL , nombre VARCHAR2 (100) NOT NULL , descripcion VARCHAR2 (100) , proveedores_id INTEGER NOT NULL , inventario_id INTEGER NOT NULL , ventas_id INTEGER NOT NULL ) ; ALTER TABLE productos ADD CONSTRAINT productos_PK PRIMARY KEY ( id ) ; CREATE TABLE proveedores ( id INTEGER NOT NULL , nombre VARCHAR2 (100) NOT NULL ) ; ALTER TABLE proveedores ADD CONSTRAINT proveedores_PK PRIMARY KEY ( id ) ; CREATE TABLE ventas ( id INTEGER NOT NULL , cantidad VARCHAR2 (100) NOT NULL , clientes_id INTEGER NOT NULL ) ; ALTER TABLE ventas ADD CONSTRAINT ventas_PK PRIMARY KEY ( id ) ; ALTER TABLE compras ADD CONSTRAINT compras_inventario_FK FOREIGN KEY ( inventario_id ) REFERENCES inventario ( id ) ; ALTER TABLE productos ADD CONSTRAINT productos_inventario_FK FOREIGN KEY ( inventario_id ) REFERENCES inventario ( id ) ; ALTER TABLE productos ADD CONSTRAINT productos_proveedores_FK FOREIGN KEY ( proveedores_id ) REFERENCES proveedores ( id ) ; ALTER TABLE productos ADD CONSTRAINT productos_ventas_FK FOREIGN KEY ( ventas_id ) REFERENCES ventas ( id ) ; ALTER TABLE ventas ADD CONSTRAINT ventas_clientes_FK FOREIGN KEY ( clientes_id ) REFERENCES clientes ( id ) ; INSERT INTO USUARIO_TAREA.CLIENTES (ID, NOMBRE, NIT) VALUES ('1', 'Juan gomez', '455555-nk'); INSERT INTO USUARIO_TAREA.VENTAS (ID, CANTIDAD, CLIENTES_ID) VALUES ('1', '4', '1'); INSERT INTO USUARIO_TAREA.PROVEEDORES (ID, NOMBRE) VALUES ('1', 'coka-cola'); INSERT INTO USUARIO_TAREA.INVENTARIO (ID, NOMBRE_INVENTARIO) VALUES ('1', 'Finca el zapote'); INSERT INTO USUARIO_TAREA.PRODUCTOS (ID, NOMBRE, DESCRIPCION, PROVEEDORES_ID, INVENTARIO_ID, VENTAS_ID) VALUES ('1', 'Bebida coka', '12 onza', '1', '1', '1'); INSERT INTO USUARIO_TAREA.COMPRAS (ID, NOMBRE_PRODUCTO, INVENTARIO_ID) VALUES ('1', 'coka-cola', '1'); -- creamos los roles CREATE ROLE cajero; CREATE ROLE supervisor; CREATE ROLE enc_compras; CREATE ROLE jefe_compras; -- permiso para el cajero GRANT SELECT ON productos TO cajero; GRANT SELECT,INSERT ON ventas TO cajero; GRANT UPDATE ON inventario TO cajero; GRANT UPDATE,SELECT,DELETE ON clientes TO cajero; -- permiso para el supervisor GRANT SELECT ON productos TO supervisor; GRANT DELETE,UPDATE,SELECT,INSERT ON ventas TO supervisor; GRANT UPDATE,SELECT,DELETE ON clientes TO supervisor; --Permiso para el enc_compras GRANT SELECT ON proveedores TO enc_compras; GRANT INSERT,DELETE,UPDATE,SELECT ON productos TO enc_compras; GRANT SELECT,INSERT ON compras TO enc_compras; --permiso para el jefe_compras GRANT enc_compras TO jefe_compras; GRANT DELETE,UPDATE ON compras TO jefe_compras; GRANT INSERT,SELECT,DELETE,UPDATE ON proveedores TO jefe_compras; --creamos los usuarios 4 usuarios. --usuario_cajero; --usuario_supervisor; --usuario_enc_compras; --usuario_jefe_compras CREATE USER usuario_cajero PROFILE DEFAULT IDENTIFIED BY usuario_cajero DEFAULT TABLESPACE table_tarea ACCOUNT UNLOCK; GRANT CONNECT TO usuario_cajero; CREATE USER usuario_supervisor PROFILE DEFAULT IDENTIFIED BY usuario_supervisor DEFAULT TABLESPACE table_tarea ACCOUNT UNLOCK; GRANT CONNECT TO usuario_supervisor; CREATE USER usuario_enc_compras PROFILE DEFAULT IDENTIFIED BY usuario_enc_compras DEFAULT TABLESPACE table_tarea ACCOUNT UNLOCK; GRANT CONNECT TO usuario_enc_compras; CREATE USER usuario_jefe_compras PROFILE DEFAULT IDENTIFIED BY usuario_jefe_compras DEFAULT TABLESPACE table_tarea ACCOUNT UNLOCK; GRANT CONNECT TO usuario_jefe_compras; -- damos los permisos a cada usuario utilizaremos cada rol -- ROLE cajero; -- ROLE supervisor; -- ROLE enc_compras; -- ROLE jefe_compras; GRANT cajero TO usuario_cajero; GRANT supervisor TO usuario_supervisor; GRANT enc_compras TO usuario_enc_compras; GRANT jefe_compras TO usuario_jefe_compras; -- esto puede ver que roles tiene un que nos conectemos select * from user_role_privs; -- nos conectamos a usuario. -- Podemos hacer las pruebas para cada usuario y vermos que solo tenemos acceso -- a las tablas por medio del rol. CONNECT usuario_cajero/usuario_cajero; select * from user_role_privs; select * from usuario_tarea.compras; --Esta tabla no existe ya que no tenemos acceso a ella por el rol. -- en esta caso probamos la tabla de producto, y esto solo tiene acceso sobre select ya que asi esta en el rol select * from usuario_tarea.productos; -- el rol cajero puede selecionar esta tabla. DELETE FROM usuario_tarea.productos WHERE id = 1; -- no tenemos privilegios para eliminar. UPDATE usuario_tarea.productos SET nombre = 'hola' WHERE id = 1; -- no tenemos privilegios para actualizar INSERT INTO usuario_tarea.PRODUCTOS(ID, NOMBRE , DESCRIPCION , PROVEEDORES_ID , VENTAS_ID , INVENTARIO_ID) VALUES (1,'hola','otros',1,1,1); -- no tiene privilegios para insertar --tabla ventas INSERT INTO USUARIO_TAREA.VENTAS (ID, CANTIDAD, CLIENTES_ID) VALUES ('2', '5', '1'); -- esta tabla si puede insertar ya que es el unico que esta permitido en rol del cajero. exit; CONNECT usuario_supervisor/usuario_supervisor; select * from user_role_privs; exit; CONNECT usuario_enc_compras/usuario_enc_compras; select * from user_role_privs; exit; CONNECT usuario_jefe_compras/usuario_jefe_compras select * from user_role_privs; exit;