Creación de Roles, permiso, crear usario en Oracle 11g

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;
Esta entrada fue publicada en Uncategorized. Guarda el enlace permanente.