Está en la página 1de 6

Base de Datos II

Laboratorio N 2

FACULTAD DE INGENIERIA.
Profesor Adjunto: Lic. Gabriel Ingravallo.
Jefe Trabajos Prcticos: Lic. Cristian Parise.
Alumno: Mura, Gastn.

1 - Creamos la Tabla Audit.


create table audit
(
tabla character(50) not null,
tipoOperacion character(50) not null,
usuario character(50) not null,
fecha timestamp not null,
constraint "pk_audit" primary key(tabla,fecha)
);
-- Creamos el dominio para el tipo de operacin ("INSERT","DELETE","UPDATE","SELECT").
create domain "tipoOperaciones" as varchar(10) constraint "chk_operacion" check( value in
('INSERT','DELETE','UPDATE','SELECT'));
-- Cambiamos el tipo del campo "tipoOperacion" para que utilice el dominio recin creado.
alter table audit alter column tipoOperacion type "tipoOperaciones";
-- Creamos restriccin para el nombre de tabla.
create or replace function checkTabla(name) returns boolean as $$
declare
tabla alias for $1;
begin
return exists (select pg_tables.tablename from pg_catalog.pg_tables where
pg_tables.tablename = tabla and pg_tables.schemaname = 'public' );
end;
$$ language plpgsql;
-- Le agrego el constraint a la tabla Audit..
alter table audit add constraint "chkNombreTabla" check(checkTabla("tabla"));

2 Creamos Triggers para la insercin, actualizacin y borrado sobre la


tabla Avion.
-- Creamos la funcin para el insert y el update.
create or replace function avionInsertUpdate() returns trigger as $$
begin
insert into audit values (TG_TABLE_NAME, TG_OP, current_user, current_timestamp);
return null;
end;
$$ language plpgsql;
-- Creamos la funcin para el delete.
create or replace function avionDelete() returns trigger as $$
begin
insert into audit values (TG_TABLE_NAME, TG_OP, current_user, current_timestamp);
return null;
end;
$$ language plpgsql;

-- Creamos el trigger para el insert y el update.


create trigger "trgInsertUpdateAvion" after INSERT or UPDATE on avion for each statement
execute procedure avionInsertUpdate();
-- Creamos el trigger para el delete.
create trigger "trgDeleteAvion" after DELETE on avion for each statement execute procedure
avionDelete();

3 Crear dos usuarios, userA y userB.


create role userA;
create role userB;
4 - Investigar y documentar la gramtica y diferentes modificadores de las
sentencias GRANT y REVOKE en Postgres.
Una base de datos deben mantener sus datos seguros, debe asegurarse que cada usuario
pueda acceder a los datos que le corresponden nicamente, para esto Postgres cuenta con un
sistema de privilegios que cada usuario tiene sobre distintos objetos de la base.
Los privilegios suelen clasificarse en privilegios del sistema y de objetos.
Los privilegios del sistema permiten al usuario realizar algn tipo de operacin que afecta a
todo el sistema.
Los privilegios de objetos se definen como las acciones que le son permitidas a un usuario
ejecutar en un determinado objeto de la base de datos (tabla, vista, secuencia, funcin), esto
una vez que el usuario haya sido autentificado dentro del DBMS.
Los privilegios de objetos dependen del tipo de objeto, por ejemplo el estndar SQL1 especifica
4 privilegios para tablas y vistas:
SELECT - Permite consultar todas las filas.
INSERT - Permite la creacin de nuevos registros.
DELETE - Permite la eliminacin de filas.
UPDATE - Permite la modificacin de filas ya creadas.
Para el resto de los objetos en PostgreSQL pueden o no aplicar los siguientes privilegios:
RULE - Permite la creacin de reglas para una tabla o una vista.
REFERENCES - Permite la creacin de llaves forneas (foreign key) al crear relaciones.
TRIGGER - Permite la creacin de triggers.
EXECUTE - Permite la ejecucin de funciones o store procedures.
ALL - Permite todos los privilegios.
De manera predeterminada en PostgreSQL cuando se crea un objeto el creador del objeto es
el propietario y se le asignan todos los privilegios sobre ese objeto, el resto de los usuarios no
tiene ningn privilegio sobre ese objeto.
El DDL (Data Definition Language) incluye dos comandos para conceder y retirar privilegios:
GRANT y REVOKE.

GRANT, para asignar privilegios, sintaxis.


GRANT [privilegios] ON [objeto] TO {public | group | username}
Privilegios:

SELECT Acceso a todas las columnas de una tabla/vista especfica.

INSERT Inserta datos en todas las columnas de una tabla especfica.

UPDATE Actualiza todas las columnas de una tabal especfica.

DELETE Elimina filas de una tabla especfica.

RULE Define las reglas de la tabla o vista (ver sentencia CREATE RULE).

ALL Otorga todos los privilegios.

Objetos de bases de datos:

TABLE Tabla.

COLUMN Columna de una tabla.

VIEW Vista.

SEQUENCE Secuencia.

DATABASE FOREIGN-DATA WRAPPER Empaquetador de datos externos

SERVIDOR EXTERNO Un servidor externo normalmente encapsula la informacin de


conexin que un contenedor de datos externa utiliza para acceder a una fuente de
datos externa. Informacin de conexin especfica del usuario adicional se puede
especificar por medio de asignaciones de usuario.

FUNCTION Una funcin.

PROCEDURAL LANGUAGE Un lenguaje procedural, pgSQL (SQL Procedural


Language). Es el lenguaje por defecto utilizado en PostgreSQL. Entre otros lenguajes
soportados por PostgreSQL Tcl, Perl y Python.

SCHEMA Un esquema de nuestra base de datos.

TABLESPACE Un Tablespace el cual permiten a los administradores definir los


lugares, en el sistema de archivos, donde los archivos de la base de datos se pueden
almacenar. Una vez creado, un Tablespace puede ser referenciado por su nombre a la
hora de crear objetos de base de datos.

Estos comandos adicionalmente cuentan con las opciones de:


ALL PRIVILEGES Otorga todos los privilegios al usuario sobre un particular objeto.
PUBLIC En vez de asignar los privilegios a cada usuario (uno por uno), se utiliza esta palabra
para asignar los privilegios a cada uno de los usuarios autentificados en la base de datos,
incluso a aquellos que no han sido creados.

Adems para el comando GRANT tenemos la opcin de:


WITH GRANT OPTION Cuando se crea un objeto en la base de datos, el creador de ese
objeto es el nico que puede otorgar privilegios al objeto para que otros usuarios lo utilicen, con
esta opcin el propietario del objeto permite que otros usuarios puedan asignar privilegios a un
objeto de su propiedad.
Ejemplos
Otorgar permisos al esquema.
GRANT ALL ON SCHEMA public TO northwind_admin;
Otorgar permisos a una tabla.
GRANT ALL ON TABLE orders TO northwind_admin;
Otorgar privilegios todas las tablas de un esquema.
GRANT ALL ON ALL TABLES IN SCHEMA public TO northwind_admin;

Otorgamos todos los privilegios al usuario martin.


GRANT ALL PRIVILEGES ON authors TO martin;
Otorga el privilegio SELECT a todos los usuarios incluso a aquellos que no se han creado
dentro de la DBMS.
GRANT SELECT ON authors TO PUBLIC;
Ahora bien, el usuario postgres requiere que el usuario martin tenga los privilegios de SELECT
e INSERT, pero que tambin martin tenga la capacidad de otorgarlos a otros usuarios,
ejecutamos los siguientes comandos
GRANT INSERT, SELECT ON Books TO martin WITH GRANT OPTION;

REVOKE, revoca el privilegio de acceso a un usuario, grupo o a todos los usuarios,


sintaxis.
REVOKE [privilegios] ON [objecto] FROM {public | group | username }
Los privilegios y los objetos sobre los que acta el comando son los mismos que con Grant.
Cuando se conceden privilegios a un usuario con la opcin WITH GRANT OPTION, al
momento de revocar este privilegio puede pasar:
Si user1 da un privilegio con la opcin GRANT a user2 y user2 se lo da a user3, entonces
user1 puede revocar este privilegio en cascada usando la palabra clave CASCADE.
Si user1 da un privilegio con GRANT a user2 y user2 se lo da a user3, entonces si user1
intenta revocar este privilegio, fallar si ha especificado la palabra clave RESTRICT.
Ejemplos
Revocamos los permisos INSERT y SELECT sobre la tabla authors al user martin
REVOKE INSERT,SELECT ON authors FROM martin;
Revocamos todos los privilegios sobre la tabla authors al user martin
REVOKE ALL PRIVILEGES ON authors FROM martin;

5 - Otorgar los siguientes permisos:


De seleccin al userA sobre todas las tablas y permisos de INSERT sobre la tabla Audit con la
opcin WITH GRANT OPTION.
grant SELECT on all tables in schema public to userA;
grant INSERT on audit to userA with grant option;
Otorgar permisos de seleccin, INSERT y UPDATE al userB sobre las siguientes tablas: avion,
piloto, pilotoAvion.
grant SELECT, UPDATE, INSERT on avion, piloto, "pilotoAvion" to userB;

6 - Conectarse con el usuario userB a la base de datos y hacer una


insercin sobre la tabla avion, documentar lo que arroja el motor. Si no
fue posible solucionar el inconveniente conectndose con el usuario
userA.
Al conectarme con el userB y tratar de insertar en la tabla avion, el motor de la base de datos
me informa del siguiente error:

Si bien puedo insertar en la tabla avion, por que el permiso de insercin me fue otorgado, no lo
puedo hacer en la tabla audit, que es la que lleva un log con todas las acciones de los usuarios
sobre las operaciones que realizan en la tabla avion.
Solucin
Vuelvo a entrar con el userA y le otorgo al usuario userB privilegios INSERT sobre la tabla
audit, que es la que lleva un log de las operaciones realizada sobre la tabla avion.
GRANT INSERT on audit to userB;
Ingreso nuevamente con el userB y compruebo si puedo insertar en la tabla avion.
La insercin la puedo realizar debido a los privilegios que el userA le otorgo al userB.

También podría gustarte