Restrições ao Domínio Integridade Referencial Asserções Triggers Segurança e Autorizações

Documentos relacionados
BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

Bases de Dados. Restrições de integridade. Restrições de integridade. As restrições de integridade garantem a consistência da BD exemplos

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

Banco de Dados Avançados Banco de Dados Ativo

Bases de Dados 2012/2013 Restrições de Integridade em SQL. Helena Galhardas 2012 IST. Bibliografia

SQL Gatilhos (Triggers)

Oracle 10g: SQL e PL/SQL

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Comandos de Manipulação

Bases de Dados 2012/2013 Funções/procedimentos e triggers. Helena Galhardas 2012 IST. Bibliografia. Manual referência PostgreSQL

Page 1. Prof. Constantino Jacob

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

PostgreSQL. André Luiz Fortunato da Silva Analista de Sistemas CIRP / USP alf@cirp.usp.br

estiver abaixo ou igual ao mínimo, um novo pedido é acrescentado a uma relação pedidos.

Cadeira de Tecnologias de Informação. Ano lectivo 2009/2010. Sites dinâmicos. Com Expression Web (Parte 2) TI2009/10 EWD_1

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

Tópicos Avançados em Banco de Dados Dependências sobre regime e controle de objetos em Banco de Dados. Prof. Hugo Souza

Oracle Database 10g: Fundamentos de SQL e PL/SQL

SQL (Structured Query Language)

Tarefa Orientada 19 Triggers

Linguagem SQL. Comandos Básicos

Considere as Relações Funcionários (F) e Dependentes (D), com o seguinte esquema simplificado:

Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

Bancos de Dados I. Integridade semântica

Sistemas de Informação

SQL Structured Query Language. SQL Linguagem de Definição de Dados. SQL Structured Query Language. SQL Structured Query Language

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL92 DDL( RIS, ACTUALIZAÇÕES E VISTAS) DML (QUERIES, SUBQUERIES,JUNÇÕES, E OPERAÇÕES SOBRE CONJUNTOS)

SQL: Definição de tabelas, Modificações à Base de Dados

Prova de Fundamentos de Bancos de Dados 2 a Prova

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003

Prova de Fundamentos de Bancos de Dados 2 a Prova

Linguagem de Consulta Estruturada (SQL)

Integridade dos Dados

SQL DDL Criando Tabelas e Restrições

Backup. José Antônio da Cunha CEFET-RN

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

EXEMPLOS DE COMANDOS NO SQL SERVER

SQL. Definição do Esquema da Base de Dados. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática


Linguagem SQL (Parte II)

Esquema da Relação. Modelo Relacional. Instância da Relação. Exemplo. Uma base de dados é uma colecção de uma ou mais relações com nomes distintos

Modelo Lógico: Tabelas, Chaves Primárias e Estrangeiras

BANCO DE DADOS. Vinícius Pádua

Relatório. Projecto de Base de Dados Parte 2. Turno: quinta-feira, 11:30 Grupo 25: André Gonçalves Rui Barradas Hélton Miranda 68477

Disciplina: Unidade III: Prof.: Período:

trigger insert, delete, update

Manual de Utilização. Ao acessar o endereço chegaremos a seguinte página de entrada: Tela de Abertura do Sistema

Módulo de Aprendizagem I

LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

Criação de uma aplicação Web ASP.NET MVC 4

Monitoria GDI Aula Prática. DML + PL/SQL parte 1

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Pontifícia Universidade Católica do Rio Grande do Sul FACULDADE DE INFORMÁTICA PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO.

Banco de Dados - Senado

COMPETÊNCIAS ESPECÍFICAS Compreender e utilizar a linguagem SQL, na construção e manutenção de uma base de dados.

AULA 1 INTRODUÇÃO A BANCO DE DADOS E VISÃO GERAL DO SQL CONCEITUANDO BANCO DE DADOS MODELO RELACIONAL

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

Structured Query Language (SQL) Aula Prática

Consistem num conjunto de apontadores para instâncias especificas de cada relação.

Database and Applications. Criação, inserção de dados PHP+MySQL

Introdução ao SQL. Aécio Costa

Centro Universitário Franciscano

PL/pgSQL. Introdução. Introdução. Introdução

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Aplicações - SQL. Banco de Dados: Teoria e Prática. André Santanchè e Luiz Celso Gomes Jr Instituto de Computação UNICAMP Agosto de 2013

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Aprenda a instalar a plataforma de monitorização Cacti

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL

Bases de Dados 2007/2008. Aula 9

BANCO DE DADOS Parte 4

PostgreSQL 8.0. Diogo Biazus

Conceitos. Considerações Gerais. Autorização. Autorização no SQL Server. Autorização 16/06/2009

SQL - Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL

MER e Conceitos gerais

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Introdução à linguagem SQL

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

S Q L 31/03/2010. SQL - Structured Query Language Linguagem de Consulta Estruturada

S Q L 15/01/2013. Enfoques de SQL. Enfoques de SQL SQL. Usos de SQL. SQL - Origem/Histórico. Gerenciamento de Dados e Informação

SQL Structured Query Language

MANUAL DO INSTALADOR XD EM AMBIENTES MICROSOFT WINDOWS

Comandos DDL. id_modulo = id_m odulo

Bases de Dados. Parte V: A Linguagem SQL

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

SQL. Prof. Márcio Bueno.

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

PL/pgSQL por Diversão e Lucro

Transcrição:

Capítulo 5: Integridade e Segurança Restrições ao Domínio Integridade Referencial Asserções Triggers Segurança e Autorizações 1

Triggers Um trigger é um comando que é executado automaticamente pelo sistema, como side-effect duma modificação à base de dados dum determinado tipo pré-definido. Para definir um trigger, há que: Especificar que evento faz disparar trigger Especificar em que condições o trigger deve ser. Especificar que acção fazer quando o trigger é executado. São conhecidos como event-condition-action rules Os triggers são armazenados na base de dados, e executados para todos as interacções com esta. O Oracle suporta triggers, embora com uma sintaxe ligeiramente diferente da do SQL. 2

Exemplo de Trigger Imagine uma situação em que o banco aceita que haja saldos negativos e, nesses casos: coloca o saldo a 0 cria um empréstimo com o valor em dívida Atribui a este empréstimo um número idêntico ao da conta de depósito O trigger deve ser executado sempre que há uma actualização na relação account que faz com que o saldo passe a negativo. 3

Codificação do Exemplo em SQL:1999 create trigger overdraft_trigger after update on account referencing new row as nrow for each row when nrow.balance < 0 begin atomic insert into borrower (select customer_name, account_number from depositor where nrow.account_number = depositor.account_number); insert into loan values (nrow.account_number, nrow.branch_name, nrow.balance); update account set balance = 0 where account.account_number = nrow.account_number end 4

Eventos e Acções de Triggers em SQL Os eventos que podem fazer disparar um trigger são insert, delete ou update No Oracle, também podem disparar triggers eventos de servererror, logon, logoff, startup e shutdown. Triggers sobre update podem-se restringuir só a alguns atributos E.g. create trigger overdraft_trigger after update of balance on account Pode-se referenciar o valor dos atributos antes e depois da modificação referencing old row as : para deletes e updates referencing new row as : para inserts e updates Pode-se fazer disparar um trigger antes do evento, para codificar restrições. E.g. converter espaços em null. create trigger setnull_trigger before update on r referencing new row as nrow for each row when nrow.phone_number = set nrow.phone_number = null Para além do before e do after no Oracle existe também o instead of. 5

Acções Externas Por vezes podemos querer que um dado evento faça disparar uma acção para o exterior. Por exemplo, numa base de dados de uma armazém, sempre que a quantidade de um produto desce abaixo (devido a um update) de um determinado valor podemos querer encomendar esse produto, ou disparar algum alarme. Os triggers não podem ser usados para implementar acções sobre o exterior, mas... podem ser usados para guardar numa tabela separada acções-a-levar-a-cabo. Podem depois haver procedimentos que, periodicamente verificam essa tabela separada. E.g. Uma base de um armazém com as tabelas inventario(item, quant): Que quantidade há de cada produto quantmin(item, quant) : Qual a quantidade mínima de cada produto reposicoes(item, quant): Quanto encomendar sempre que está em falta aencomendar(item, quant) : Coisas a encomendar (lido por procedimento) 6

Exemplo de Acções Externas create trigger aenc_trigger after update of quant on inventario referencing old row as orow, new row as nrow for each row when nrow.quant < = some (select quant from quantmin where quantmin.item = orow.item) and orow.quant > some (select quant from quantmin where quantmin.item = orow.item) begin insert into aencomendar (select item, quant from reposicoes where reposicoes.item = orow.item) end 7

Sintaxe de Triggers em Oracle create [or replace] trigger <nome_trigger> {before after instead of} <evento> [referencing old as <nome_antes>] [referencing new as <nome_depois>] for each row when <condição> begin <Sequencia de comandos, terminados por ;> end; / Evento pode ser: delete on <tabela ou view> insert on <tabela ou view> update on <tabela ou view> update of <atributos separados por,> on <tabela ou view> servererror, logon, logoff, startup ou shutdown Os comandos são PL/SQL o que inclui os comandos SQL, mais WHILEs, IFs, etc (ver manuais) Dentro da condição os nome_antes e nome_depois podem ser usados sem mais. Mas nos comandos têm que ter o símbolo : antes!!! 8

Statement Triggers São executados após (antes, ou em vez de) uma instrução completa vs. os anteriores que são executadas após alterações em cada linha Sintaxe: create [or replace] trigger <nome_trigger> {before after instead of} <evento> begin <Sequencia de comandos, terminados por ;> end; Para ser usado quando as condições são para testar globalmente e não linha a linha. 9

Uso de triggers Podem usar-se para implementar assertions, fazendo raise_application_error quando as condições não se verificam. Não usar triggers: Quando as restrições podem ser impostas doutra forma!! Os triggers são mais difíceis de manter e são menos eficientes. Quando se querem manter sumários Para tal usem-se views e se eficiência for importante usem-se materialized views Os triggers permitem uma grande generalidade na imposição de restrições e, também por isso mesmo, devem ser usados com grande cuidado. 10

Exemplo create table alunos( num_aluno number(6) not null,, cod_curso number(3) not null, primary key (num_aluno), unique (num_aluno, cod_curso) foreign key cod_curso references curso); create table curso_cadeira( cod_curso number(3) not null, cod_cadeira number(3) not null,, primary key (cod_curso, cod_cadeira), ); create table inscricoes( num_aluno number(6) not null, cod_curso number(3) not null, cod_cadeira number(5) not null, data_inscricao date not null,, primary key (num_aluno, cod_curso, cod_cadeira, data_inscricao), foreign key (num_aluno, cod_curso) references alunos(num_aluno, cod_curso), foreign key (cod_curso, cod_cadeira) references curso_cadeira); 11

Triggers para actualização de vistas Podemos utilizar triggers para efectuar modificações através de vistas. Para tal, criamos triggers para todas as operações permitidas, como por exemplo: para a insercão (do tipo instead of insert on), para a remoção (do tipo instead of delete on) para a actualização (do tipo instead of update on). Consideremos a vista: create view info_empréstimos as select loan_number, customer_name, amount from borrower natural inner join loan 12

Triggers para actualização de vistas Se quisermos permitir a remoção de empréstimos através da vista, criamos o trigger: create trigger remove_empréstimos instead of delete on info_empréstimos referencing old row as orow for each row begin delete from loan where loan_number = orow. loan_number ; delete from borrower where loan_number = orow. loan_number ; end 13

Triggers para actualização de vistas Se quisermos permitir a inserção de empréstimos através da vista, criamos o trigger: create trigger insere_empréstimos instead of insert on info_empréstimos referencing new row as nrow for each row begin insert into loan values (nrow.loan_number, NULL, amount); insert into borrower values (nrow.customer_name, nrow.loan_number) end 14

Triggers para actualização de vistas Se quisermos permitir a actualização do valor do empréstimo através da vista, criamos o trigger: create trigger actualiza_empréstimos instead of update of amount on info_empréstimos referencing new row as nrow referencing old row as orow for each row begin end update loan set amount = nrow. amount where loan_number = orow. loan_number ; 15

Triggers para inserção de chaves Se quisermos preencher automaticamente a chave de um tuplo, aquando da sua inserção, recorrendo a uma sequência: create trigger chave_aluno before insert on alunos for each row declare aluno_id number; begin end select seq_aluno.nextval into aluno_id from dual; :new.num_aluno := aluno_id; 16

Segurança Segurança ao contrário das restrições de integridade, que pretendiam proteger a base de dados contra estragos acidentais, a segurança preocupa-se com proteger a base de dados de estragos propositados. A nível do sistema operativo A nível da rede A nível físico A nível humano A nível da base de dados Mecanismos de autenticação e autorização para permitir acessos selectivos de (certos) utilizadores a (certas) partes dos dados 17

Autorizações Diferentes formas de autorização em dados da bases de dados: Autorização de leitura permite ler, mas não modificar dados. Autorização de inserção permite inserir novos tuplos, mas não modificar tuplos existentes. Autorização de modificação permite modificar tuplos, mas não apagá-los. Autorização de remoção permite apagar tuplos 18

Autorizações (Cont.) Diferentes formas de autorização, para alterar esquemas: Autorização de index permite criar e apagar ficheiros de index. Autorização de resources permite criar novas relações. Autorização de alteração permite criar e apagar atributos duma relação. Autorização de drop permite apagar relações. 19

Autorizações e Vistas Pode-se dar autorização a utilizadores sobre uma vista, sem se lhe dar autorização sobre as tabelas que a definem Isto permite não só melhorar a segurança dos dados, como também tornar mais simples o seu uso Uma combinação de segurança a nível de tabelas, com segurança a nível de vistas, pode ser usada para limitar o acesso de um utilizador apenas aos dados de que ele necessita. 20

Autorizações e Vistas A criação de uma vista não requer autorização resources pois, de facto, nenhuma nova tabela é criada Quem cria uma vista, fica exactamente com os mesmo privilégios sobre esta que tinha sobre as tabelas. E.g. o criador duma vista cust_loan sobre as tabelas borrower e loan, que só tenha autorização de leitura sobre estas tabelas, só fica com autorização de leitura sobre a vista que criou 21

Atribuição de Privilégios A passagem de privilégios de um utilizador para outro pode ser representada por um grafo de autorizações. Os nós do grafo são utilizadores. A raiz é o administrador da base de dados. Considere o grafo abaixo, para e.g. escrita numa relação. Um arco U i U j indica que o utilizador U i atribuiu ao utilizador U j privilégio de escrita sobre essa relação.. U 1 U 4 DBA U 2 U 5 U 3 22

Grafo de atribuição de privilégios Requisito: Todos os arcos têm que fazer parte de algum caminho com origem no administrador. Se o administrados retira o privilégio a U 1 : U 1 U 4 Deve ser retirado privilégio a U 4 (pois U 1 já não tem autorização) Não deve ser retirado a U 5 (pois U 5 tem autorização vinda de U 2 ) Devem ser prevenidos ciclos: DBA U 7 U 2 U 5 U 3 Administrador dá privilégios a U 7 U7 dá privilégios a U 8 DBA U8 dá privilégios a U 7 U 8 DBA retira privilégios de U 7 Deve retirar autorização de U 7 para U 8 e de U 8 para U 7 (pois já não há caminho do administrador nem para U 7 nem para U 8 ). 23

Especificações de Segurança em SQL O comando grant é usado para atribuir privilégios grant <lista de privilégios> on <nome de relação ou view> to <lista de utilizadores> <lista de utilizadores> é: Um user-id public, o que atribui o privilégios a todos os utilizadores Um perfil (role) veremos à frente A atribuição de privilégios sobre uma vista não se propaga às relações nela usadas. Quem atribui o privilégio tem que o ter (ou ser o administrador da base de dados). 24

Privilégios em SQL select: permite acesso de leitura sobre a relação ou vista Exemplo: dar a U 1, U 2, e U 3 autorização de leitura na relação branch: insert: permite inserir tuplos grant select on branch to U 1, U 2, U 3 update: permite usar o comando update do SQL delete: permite apagar tuplos. references: permite a declaração de chaves externas. all privileges: forma sumária de atribuir todos os privilégios. 25

Privilégio de atribuir privilégios with grant option: autoriza um utilizador a passar um privilégio a outros utilizadores. Exemplo: grant select on branch to U 1 with grant option dá a U 1 o privilégio select sobre a relação branch e autoriza U 1 a passar esse privilégio a qualquer outro utilizador 26

Perfis Um perfil permite atribuir, de apenas uma vez, privilégios iguais para uma classe de utilizadores Podem ser atribuídos e retirados privilégios a perfis de utilizadores, da mesma forma que a utilizadores isolados. Podem-se associar perfis a utilizadores, ou mesmo a outros perfis Exemplo: create role caixa create role gerente grant select on branch to caixa grant update (balance) on account to caixa grant all privileges on account to gerente grant caixa to gerente grant caixa to maria, scott grant gerente to ana 27

Retirar de privilégios em SQL O comando revoke serve para retirar privilégios. revoke <privilégios> on <relação ou view> from <utilizadores> [restrict cascade] Exemplo: revoke select on branch from U 1, U 2, U 3 cascade Se se colocar cascade, retirar privilégios de um utilizador também os pode retirar a outros, conforme descrito pelo grafo. Se se usar restrict só é retirado privilégio a esse utilizador revoke select on branch from U 1 restrict Com restrict, o comando revoke falha (dá erro) se esse utilizador já passou o privilégio a outros. 28

Retirar de privilégios em SQL (Cont.) <privilégios> pode ser all. Nesse caso são retirados todos os privilégios que foram atribuídos pelo utilizador que deu o comando. Se <utilizadores> incluir public todos os utilizadores perdem esse privilégio, a não ser que lhe tenha sido atribuído explicitamente. Se o mesmo privilégio for atribuído duas vezes por utilizadores diferentes, então quem o tem pode ficar com ele mesmo depois dum revoke (cf. grafo). Todos os privilégios que dependem do privilégio retirado, são também retirados. 29

Limitação a autorizações em SQL SQL não permite autorizações a nível de tuplo E.g. não se pode restringir de forma a que um aluno só possa ver as suas notas. Neste caso, a tarefa de autorização cai sobre as aplicações (o que é indesejável, mas o SQL aqui não ajuda). Ou então definir vistas e dar autorizações apenas a essas vistas 30