Capítulo 6: Integridade e Segurança

Slides:



Advertisements
Apresentações semelhantes
O Comando DROP INDEX Para eliminar um índice definido sobre uma tabela, utilize: Drop Index on ; Ex: No Access: Drop Index X on.
Advertisements

Banco de Dados Prof. Antonio.
Segurança Renata Viegas.
Triggers Renata Viegas.
SQL Structured Query Language
Prof.: Bruno Rafael de Oliveira Rodrigues
Banco de Dados SQL TRIGGERS (Gatilhos)
Banco de Dados SQL Stored Procedures
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Software Básico Silvio Fernandes
Visões Marilde Santos.
Restrições de Integridade
Análise de Requisitos Use Case Renata Araujo Ricardo Storino
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
SCC Bancos de Dados e Suas Aplicações
SCC Bancos de Dados e Suas Aplicações
Bancos de Dados – SQL – parte 1
1 3. Ao fazer as alterações no slide master, estas irão ser aplicadas a todos os diapositivos "dependentes" dele.
Monitoria GDI Aula Prática
Capítulo 2: Modelo ER Conjuntos de entidades Conjuntos de relações
©Silberschatz, Korth and Sudarshan (modificado)5.1.1Database System Concepts Capítulo 5: Outras linguagens Query-by-Example (QBE) Datalog.
Vânia Maria Ponte Vidal
Monitoria GDI Aula Prática
Capítulo 24 Segurança de banco de dados
Capítulo 6: Integridade e Segurança
Capítulo 3: Modelo Relacional
2.2.1Database System Concepts©Silberschatz, Korth and Sudarshan (Modificado) Capítulo 2: Modelo ER Conjuntos de entidades Conjuntos de relações Aspectos.
Capítulo 7: Design de Bases de Dados
Primeira aula de PL/SQL Parte II
Monitoria GDI Aula Prática
Oracle 9i: SQL e PL/SQL Bruno Celso Cunha de Freitas
SEQUENCE, PROCEDURE, FUNÇÃO, TRIGGER
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
BANCOS DE DADOS ATIVOS Weyler M Lopes © Especialização em Banco de Dados.
Banco de Dados Parte 04 Ceça. Ceça Moraes 2 Conteúdo  Os três níveis da arquitetura  Mapeamentos  Arquitetura cliente-servidor.
Banco de dados.
Aula Prática PL/SQL Profa. Bernadette Farias Lóscio
Baseado no material do Professor Raul Paradeda
Monitoria GDI Aula Prática Aula 2: PL 1. Estudo de caso - continuação Pegar arquivo GDI.zip em Descompactar arquivo: o criacaoTabelas.SQL.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Triggers (Gatilhos) Professor Esp. Diego André Sant’Ana
SCC Bancos de Dados e Suas Aplicações
©Silberschatz, Korth and Sudarshan (modificado)7.3.1Database System Concepts Capítulo 7: Design de Bases de Dados 1ª Forma Normal Objectivos com Design.
AULA DE DÚVIDAS 9 de Abril de Especialização  Simplifica-se quando:  especialização é disjunta e  especialização é total e  não há relações.
©Silberschatz, Korth and Sudarshan (Modificado)1.1Database System Concepts Capítulo 1: Introdução Função dos Sistemas de Bases de Dados Visão dos dados.
©Silberschatz, Korth and Sudarshan (modificado)9.1.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
©Silberschatz, Korth and Sudarshan (Modificado)3.1.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução.
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
©Silberschatz, Korth and Sudarshan (modificado)9.2.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
©Silberschatz, Korth and Sudarshan (modificado)6.1.1Database System Concepts Capítulo 6: Integridade e Segurança Restrições ao Domínio Integridade Referencial.
III - Oracle9i Apontadores – Tipo de Dado (REF). Identificador de Objeto A todo objeto de uma “object table” é associado um OID (“Object IDentifier”)
Equipe de monitoria Aula prática 4.  Tipos  Tabela de Objetos  Herança  Métodos  Referências  Coleções  Composição de coleções  Conectividade.
7P/SI – 2010/01 Prof. Carlos Alberto Seixas. Agenda Visão Geral sobre os Conceitos e Implementação sobre SGBs MySQL Revisão das Práticas Práticas 1 e.
IEC Banco de Dados I Aula 04 – SQL (II) Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho
©Silberschatz, Korth and Sudarshan (modificado)7.3.1Database System Concepts Capítulo 7: Design de Bases de Dados 1ª Forma Normal Objectivos com Design.
Visões Visão tabela derivada a partir das tabelas do BD tabela virtual
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
2.1.1Database System Concepts©Silberschatz, Korth and Sudarshan (Modificado) Capítulo 2: Modelo ER Conjuntos de entidades Conjuntos de relações Aspectos.
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Daniel Paulo Introdução Neste capítulo trataremos a relação entre tabelas e FILEGROUPS, bem como a alocação interna de dados.
Daniel Paulo SQL Server 2014 Módulo II Daniel Paulo
©Silberschatz, Korth and Sudarshan (modificado)6.1.1Database System Concepts Capítulo 6: Integridade e Segurança Restrições ao Domínio Integridade Referencial.
©Silberschatz, Korth and Sudarshan (Modificado)3.2.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução.
BD SQL (Insert, Update, Delete) e Select Hayslan Nicolas Colicheski Bucarth – IFRO / 2015 –
Fundamentos de Banco de Dados Prof. André Cypriano M. Costa
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
Aula 13 - Triggers. Triggers no SGBD Postgres  Os Triggers (Gatilhos) são funções preparadas para serem disparadas no caso de alguma alteração ocorrer.
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Capítulo 5 Mais SQL: Consultas Complexas, Triggers e Views.
Transcrição da apresentação:

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

Asserções Uma asserção é um predicado que exprime uma condição que gostaríamos de ver sempre satisfeita na base de dados. Em SQL as asserções têm a forma: create assertion <nome> check <predicado> Quando se define uma asserção, o sistema testa-a, e volta a testá-la, sempre que há modificações na base de dados (que a possam violar) Estes testes podem introduzir um overhead significativo; logo as asserções são para usar com cuidado e de forma comedida. Impor uma condição da forma “para todo o X, P(X)”, há que o fazer usando uma dupla negação: “não existe X tal que not P(X)” O Oracle não permite definir asserções.

Exemplo de Asserção G disjoint isa E1 E2 Uma especialização duma entidade geral G (com chave CG) em E1 e E2 é disjunta. create assertion disjE1E2 check (not exists ((select CG from E1) intersect (select CG from E2)) )

Exemplo de Asserção Em cada balcão, a soma dos montantes de todos os seus empréstimos tem que ser sempre inferior à soma de todos os seus depósitos. create assertion sum_constraint check (not exists (select * from branch where (select sum(amount) from loan where loan.branch_name = branch.branch_name ) >= some (select sum(balance) from account where account.branch_name = branch.branch_name )

Outro Exemplo Todo o empréstimo tem que estar sempre ligado a pelo menos um cliente de uma conta (de depósito) cujo saldo é não inferior a metade do valor do empréstimo create assertion balance_constraint check (not exists ( select * from loan where not exists ( select * from borrower natural inner join depositor natural inner join account where loan.loan_number = borrower.loan_number and account.balance >= 2 * loan.ammount )

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.

Exemplo de Trigger Imagine uma situação em que o banco aceita que haja saldos negativos e, nesses casos: mete 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.

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

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.

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)

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 begin insert into aencomendar (select item, quant from reposicoes where reposicoes.item = orow.item) end

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!!!

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.

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.

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

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

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.

Autorizações e Views Pode-se dar autorização a utilizadores sobre uma view, 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 views, pode ser usada para limitar o acesso de um utilizador apenas aos dados de que ele necessita.

Autorizações e Views A criação de uma view não requere autorização resources pois, de facto, nenhuma nova tabela é criada Quem cria uma view, fica exactamente com os mesmo privilégios sobre esta que tinha sobre as tabelas. E.g. o criador duma view 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 as view que criou

Atribuição de Privilégios A passagem de privilégios de um utilizador para outro pode ser representado 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 Ui Uj indica que o utilizador Ui atribuiu ao utilizador Uj privilégio de escrita sobre essa relação.. U1 U4 DBA U2 U5 U3

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 U1: Deve ser retirado privilégio a U4 (pois U1 já não tem autorização) Não deve ser retirado a U5 (pois U5 tem autorização vinda de U2) Devem ser prevenidos ciclos: Administrador dá privilégios a U7 U7 dá privilégios a U8 U8 dá privilégios a U7 DBA retira privilégios de U7 Deve retirar autorização de U7 para U8 e de U8 para U7 (pois já não há caminho do administrador nem para U7 nem para U8).

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 view 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).

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

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 U1 with grant option dá a U1 o privilégio select sobre a relação branch e autoriza U1 a passar esse privilégio a qualquer outro utilizador

Perfis Um perfil permite atribuir, de apenas uma vez, privilégios iguais para uma classe de utilizadores Pode 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

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 U1, U2, U3 cascade Se se colocar cascade o retirar de privilégios de um utilizador também o pode retirar a outros, conforme descrito pelo grafo. Se se usar restrict só é retirado privilégio a esse utilizador revoke select on branch from U1 restrict Com restrict, o comando revoke falha (dá erro) se esse utilizador já passou o privilégio a outros.

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.

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 view e dar autorizações apenas a essas views