Download - Portfólio 4 Semestre Unopar Individual
Santaluz2014
RILZO PEREIRA DOS REIS
SISTEMA DE ENSINO PRESENCIAL CONECTADOTECNOLOGO EM ANALISE E DESENVOLVIMENTO DE SISTEMAS
DESENVOLVIMENTO DA INFORMAÇÃO
TELECINE MOZER
Santaluz2014
-
SUMÁRIO
DESENVOLVIMENTO DA INFORMAÇÃO
TELECINE MOZER
Trabalho interdisciplinar apresentado à Universidade Norte do Paraná - UNOPAR, como requisito parcial para a obtenção de média semestral.
Orientadores: Roberto Y. Nishimura, Anderson Emídio M. Gonçalves, Marcio Roberto Chiaveli e Veronice de Freitas.
RILZO PEREIRA DOS REIS
1 INTRODUÇÃO .......................................................................................... 3
2 Objetivo...................................................................................................... 4
3 Telecine Mozer............................................................................................. 5
3.1 Segurança no Desenvolvimento de aplicações WEB....................... 5
3.2 Diagrama de Atividades UML........................................................... 12
3.3 Modelo Relacional Normalizado....................................................... 16
4 CONCLUSÃO ............................................................................................ 8
5 REFERÊNCIAS ......................................................................................... 9
1. Introdução
A escalabilidade, portabilidade e fácil acesso provido pela plataforma Web têm
popularizado seu uso no desenvolvimento de diversas aplicações. Porém, o
crescente número de incidentes de segurança levanta preocupações quanto à
sua seguridade. Umas partes destes incidentes decorrem da falta de
consideração de segurança durante o processo de desenvolvimento. Este
trabalho tem como objetivo propor práticas de segurança a serem aplicadas
durante o processo de desenvolvimento de software Web que minimizem os
riscos, aumentando a qualidade e confiabilidade do produto final. Nele serão
apresentados: conceitos de segurança da informação, as vulnerabilidades mais
comuns existentes em software Web e algumas práticas que devem ser
aplicadas durante o desenvolvimento.
3
2. Objetivo:
Reduzir o risco de ataques e exposição dos ativos das empresas a partir da
melhoria da segurança no ambiente das aplicações web.
Oferecendo acesso a informações e suporte para que os técnicos e
programadores possam consultar ampliar os seus conhecimentos,
esclarecimento de dúvidas e melhorando o desenvolvimento de suas aplicações.
4
3.1Segurança no Desenvolvimento de aplicações WEB:
Levando em consideração as boas linguagens de programação, elas por
si só não podem ser consideradas seguras ou inseguras; a segurança de sua
aplicação depende, sobretudo, de todo o projeto e, mais especificamente, do
código do programa.
A linguagem mais usada no desenvolvimento de sistemas web é o PHP
(“Hypertext Preprocessor", originalmente Personal Home Page). Usada
originalmente apenas para o desenvolvimento de aplicações presentes e
atuantes no lado do servidor, capazes de gerar conteúdo dinâmico na World
Wide Web. Figura entre as primeiras linguagens passíveis de inserção em
documentos HTML, dispensando em muitos casos o uso de arquivos externos
para eventuais processamentos de dados. O código é interpretado no lado do
servidor pelo módulo PHP, que também gera a página web a ser visualizada no
lado do cliente. A linguagem evoluiu, passou a oferecer funcionalidades em linha
de comando, e além disso, ganhou características adicionais, que possibilitaram
usos adicionais do PHP, não relacionados a web sites. É possível instalar o PHP
na maioria dos sistemas operacionais, gratuitamente.
Vantagens do PHP
Além do fato do PHP ser absolutamente gratuito, uma de suas grandes
vantagens é que ele é multi-plataforma. Roda não só em servidores Windows,
mas também em Linux, Unix, FreeBSD e mais uma dúzia de sistemas
operacionais. Imagine o caso de uma grande corporação que resolva mudar de
plataforma, de Windows para Linux ou vise e versa. Como o PHP é multi-
plataforma, bastaria passar os scripts de uma máquina para a outra e pronto. Em
comparação, se os sites tivessem sido escritos em ASP a empresa estaria presa
à Microsoft. Até existem emuladores de ASP para rodas em sistemas com base
Unix (Como o Linux) mas estas emulações não são 100% compatíveis.O PHP
tem algumas vantagens muito interessantes:
5
Fácil aprendizado – A linguagem PHP pegou elementos do Perl, Java e do C. A
maioria dos programadores para Web conhece ao menos uma destas
linguagens, facilitando o aprendizado.
Acesso a dados – O PHP se conecta facilmente a sistemas Sybase, MySQL,
MS-SQL, Oracle e muitos outros compatíveis com o padrão ODBC.
Velocidade e robustez – O ASP tende a deixar o servidor mais lento, o PHP
raramente causa este problema. A diferença entre ambos já foi maior, mas o
ASP foi sendo otimizado pela Microsoft enquanto que o PHP cresceu,
aglutinando mais e mais funções.
Multi-plataforma – Como já vimos, o PHP funciona em qualquer plataforma onde
for possível instalar um servidor Web. Só para lembrar, há versões para Linux,
FreeBSD, Solaris, Windows NT, IRIX, HP-UX e até para o Amiga.
Código-fonte aberto – Muitas organizações, principalmente governamentais,
relutam em criar sistemas usando ferramentas da Microsoft pelo fato de serem
proprietárias, isto é, não há acesso ao código-fonte. Estas entidades precisam
de extremo cuidado com a segurança e não podem confiar seu destino
cegamente em uma única empresa. É preciso inspecionar o código-fonte dos
programas utilizados não só para garantir que estejam isentos de falhas, mas
também para possivelmente modificá-lo para cumprir determinadas tarefas.
Trabalhar com PHP é tão fácil quanto em ASP, inclusive no tocante à conexão
com banco de dados.
6
Desvantagens do PHP
Mas nem tudo são flores no PHP. Veja alguns pontos fracos:
Compatibilidade entre versões – Nota-se que falta um pouco de padronização.
Por exemplo, um comando que funciona em determinada revisão pode não
funcionar em outra.
Documentação incompleta – Como a maioria dos programas Open Source,
frequentemente os recursos surgem antes de estarem documentados. O site da
organização ajuda bastante, mas é comum encontrar recursos sem
documentação e, principalmente, sem exemplos que possam facilitar o
aprendizado. Mas é preciso dizer que os recursos sem documentação só serão
importantes para quem é usuário bem avançado, ou seja, ele já saberá o que
fazer para contornar a falta de documentação.
Suporte a datas – Claro que é possível fazer dos os tipos de cálculos usando
datas, mas neste ponto o ASP dá um banho no PHP.
Existem algumas queixas em relação ao PHP que vêm de usuários avançados:
Segurança – Segundo os especialistas, o uso de Servelets e do JSP deixa os
códigos mais seguros, pois são pré-compilados.
Aplicativos de servidor – Segundo algumas correntes de pensamento, o Java
leva clara vantagem sobre o PHP, mas isto vem mudando com a implantação
das ferramentas para Web 2.0.
Web services – Segundo os mesmos especialistas, o PHP precisava
desenvolver melhor interligação com os serviços via Web. Isto já foi feito, hoje o
PHP pode competir de igual para igual com ferramentas da Microsoft e Adobe na
criação de sites dinâmicos com todos os requisitos da Web 2.0.
7
As vulnerabilidades mais comuns no PHP são:
• Cross-site Scripting;
• SQL Injection;
• Inclusão de valores em variáveis internas;
• Exposição de informações do servidor (mensagens de erro);
• Exposição de arquivos do sistema e outros do servidor;
• Execução de programas no servidor.
A segurança das aplicações, principalmente aquelas conectadas a uma rede
aberta e perigosa como é a Internet é bastante complexa. Essa complexidade
advém do fato que as aplicações web, e-commerce, Internet Bank, na realidade
são agrupamentos bastante heterogêneos de plataformas, bancos de dados,
servidores de aplicação, etc. Uma aplicação típica, geralmente, está distribuída
em vários servidores, rodando diversos aplicativos e para funcionar na
velocidade adequada, a aplicação precisa que as interfaces entre os diversos
sistemas sejam construídas com a premissa que os dados passados através da
mesma são confiáveis e não hostis. Não há tempo hábil para duplas verificações
nas aplicações e a necessidade de haver “confiança” entre os diversos
subsistemas e é disso que os hackers e outros ciber criminosos se aproveitam.
Para o sistema aplicativo, frequentemente desenvolvido in house ou por
terceiros, especificamente para a empresa, não existem patches de segurança.
Segundo o Gartner, 75% dos ataques são concentrados nos aplicativos
específicos de cada empresa, pois os atacantes sabem das suas fragilidades.
Vulnerabilidades comuns nestes sistemas complexos, a segurança dos produtos
disponíveis no mercado é assegurada pelos fabricantes, que fornecem
periodicamente patches que os atualizam. Os ataques que hoje conhecemos são
baseados em vulnerabilidades típicas de aplicações web complexas. Mesmo os
sistemas operacionais (Windows, AIX, Solaris) que são mantidos por grandes
empresas, empregando milhares de profissionais, têm vulnerabilidades que são
periodicamente descobertas por hackers e só se transformam em patches
depois que os hackers já atacaram algumas vezes, que o problema foi
comunicado ao fabricante e devidamente corrigido. A Internet agregou outros
8
componentes de risco, sendo muito importante o “efeito comunidade” em que os
hackers e outros criminosos se julgam fazendo parte de uma “comunidade” e
obrigados a compartilhar rapidamente suas descobertas. Isto significa que
qualquer vulnerabilidade descoberta nas suas aplicações será rapidamente
divulgada, com as ferramentas necessárias para atacá-la, e outros hackers e
cibe criminosos aproveitarão as vulnerabilidades da sua aplicação. Os ataques
podem causar uma série de problemas, entre os quais se podem citar:
•Perdas Financeiras;
•Transações Fraudulentas;
•Acesso não autorizados a dados, inclusive confidenciais;
•Roubo ou modificação de Dados;
•Roubo de Informações de Clientes;
•Interrupção do Serviço;
•Perda da confiança e lealdade dos clientes;
•Dano à imagem da marca.
Os tipos mais comuns de ataques são:
1.Cross-Site Scripting
2.SQL Injection
3.Command Injection
4.Cookie/Session Poisoning
5.Parameter/Form Tampering
6.BufferOverflow
7.Directory Traversal/Forceful Browsing
8.Cryptographic Interception
9.Cookie Snooping
10.Authentication Hijacking
Utilizações de firewalls e protocolo HTTPS.
Firewalls A maioria dos firewalls de rede, por se concentrar nas camadas mais
9
baixas, não protege as aplicações da maior parte desses ataques, protege sim o
acesso aos recursos de rede. Uma nova geração de appliances está surgindo
para resolver este e outros problemas, o Aplicativo Firewalls. Fazem parte de um
novo conceito, que é a defesa na camada de aplicação. Defesa das aplicações
dos clientes, não padronizadas, heterogêneas, distribuídas em vários sistemas
operacionais, usando diversos servidores de aplicação e de bancos de dados.
Surgiram só agora, por duas razões, primeiro a necessidade de combater
ataques cada vez mais inteligentes e segundo a disponibilidade da tecnologia
necessária para a criação desses appliances que necessitam monstruosa
capacidade de computação. O Gartner Group identificou como uma tendência à
transformação do firewall comuns em commodities, em que a principal diferença
entre os diversos appliances é o preço, pois as funcionalidades e a tecnologia
são bastante similares, e o surgimento de novos lideres no Gartner Quadrante
Mágico dos Firewall.
HTTPS: Hypertext Transfer Protocol Secure, é uma implementação do protocolo
HTTP's sobre uma camada adicional de segurança que utiliza o
protocoloSSL/TLS. Essa camada adicional permite que os dados sejam
transmitidos através de uma conexão criptografias e que se verifique a
autenticidade do servidor e do cliente através de certificados digitais. A porta
TCP usada por norma para o protocolo HTTPS é a 443. O protocolo HTTPS é
utilizado, em regra, quando se deseja evitar que a informação transmitida entre o
cliente e o servidor seja visualizada por terceiros, como, por exemplo, no caso de
compras on-line. A existência na barra de tarefas de um cadeado (que pode ficar
do lado esquerdo ou direito, dependendo do navegador utilizado) demonstra a
certificação de página segura (SSL). A existência desse certificado indica o uso
do protocolo HTTPS e que a comunicação entre o browser e o servidor se dará
de forma segura. Para verificar a identidade do servidor é necessário abrir esse
certificado com um duplo clique no cadeado para exibição do certificado. Nas
URL's dos Sites o início ficaria 'https://'. Consulte a ajuda do seu navegador para
mais informações de como ele avisa sobre sites seguros. Um exemplo de
conexão via HTTPS são os próprios sites da Wikipédia, em que é possível
acessar e editar o conteúdo dos sites através de uma conexão segura. Através
da URL é possível editar a Wikipédia em língua Portuguesa. Conexões HTTPS
são frequentemente usadas para transações de pagamentos na World Wilde
10
Web e para transações sensíveis em sistemas de informação corporativos.
Porém, o HTTPS não deve ser confundido com o menos utilizado protocolo
"Secure HTTP" (S-HTTP), especificado na RFC 2660.
11
3.2 UML – DIAGRAMA DE ATIVIDADES
Um diagrama de atividade é essencialmente um gráfico de fluxo, mostrando o
fluxo de controle de uma atividade para outra e serão empregados para fazer a
modelagem de aspectos dinâmicos do sistema. Na maior parte, isso envolve a
modelagem das etapas sequenciais em um processo computacional;
Enquanto os diagramas de sequência dão ênfase ao fluxo de controle de um
objeto para outro, os diagramas de atividades dão ênfase ao fluxo de controle de
uma atividade para outra;
Uma atividade é uma execução não atômica em andamento em uma máquina
de estados e acabam resultando em alguma ação, formada pelas computações
atômicas executáveis que resultam em uma mudança de estado do sistema ou o
retorno de um valor.
Exemplo 1:
Considere o fluxo de trabalho associado à construção de uma casa. Primeiro,
você seleciona um local. A seguir, contrata um arquiteto para projetar sua casa.
Uma vez definida a planta, seu desenvolvedor determina os custos da casa.
Após concordar com um preço e com uma forma de pagamento, a construção
pode começar. As licenças são tiradas, o terreno é cavado, a fundação é
cimentada, as estruturas são erguidas e assim por diante até tudo ficar pronto.
Você então recebe as chaves e um certificado de habitse e toma posse da casa.
Embora seja uma grande simplificação do que realmente acontece em um
processo de construção, essa descrição capta o percurso crítico do fluxo de
trabalho correspondente;
12
Figura 1, diagrama de Atividades.
Características:
Um diagrama de atividades é essencialmente um fluxograma que dá ênfase à atividade que ocorre ao longo do tempo. Você pode considerar um diagrama de atividades como um diagrama de seqüência cujo interior é revelado;
Um diagrama de sequência observa os objetos que passam mensagens;
Um diagrama de atividade observa as operações passadas entre os objetos;
Mostra o fluxo de uma atividade para outra;
Uma atividade é uma execução em andamento;
As atividades resultam em uma ação;
As ações abrangem a chamada a outras operações, enviando um sinal, criando ou destruindo um objeto;
13
Exemplo 2:
Por exemplo, o diagrama a seguir mostra um diagrama de atividades para
uma empresa de varejo, que especifica o fluxo de trabalho envolvido quando um
cliente devolve um item de um pedido postal. O trabalho começa com a ação
solicitar devolução do cliente e depois flui por televendas (receber número de
devolução), retorna ao cliente (enviar item) e, a seguir, ao depósito (receber item
e depois Incluir item novamente no estoque) e, por fim, terminando em
contabilidade (creditar conta).
Conforme o diagrama indica, um objeto significativo (i, uma instância de Item)
também acompanha o fluxo do processo, mudando do estado devolvido para o
estado disponível.
Figura 2 – Diagrama de Atividade.
14
Exemplo 3:
Figura 3 – Diagrama de Atividade.
15
3.3 MODELO RELACIONAL NORMALIZADO – MRN
Num projeto de banco de dados é necessário identificar os dados e fazer
com que estes representem eficientemente o mundo real. Os SGDB – Sistemas
Gerenciadores de Bancos de Dados ou SGBDR – Sistemas Gerenciadores de
Bancos de Dados Relacionais são baseados no Modelo Relacional de Dados,
que tem o princípio de que todos os dados são guardados em tabelas. Conceito
criado por Edgar Frank Codd em 1970. Foi o primeiro modelo de dados descrito
teoricamente. O Modelo Entidade Relacionamento apresenta algumas situações
de difícil implementação prática. Para resolver isso, Codd propôs um processo
de Normalização de Dados (ou normalização de tabelas) que aplica uma série
de regras às tabelas de um banco de dados, para verificar se estas estão
corretamente projetadas. O objetivo da normalização é evitar problemas
provocados por falhas no projeto do banco de dados, eliminando redundâncias e
evitando problemas com inserção, eliminação e atualização de dados. Com a
normalização bem sucedida, o espaço de armazenamento de dados diminui, as
tabelas podem ser atualizadas com maior eficiência. Normalmente após a
aplicação das Regras de Normalização, algumas tabelas acabam sendo
divididas em duas ou mais tabelas. Esse processo causa a simplificação dos
atributos de uma tabela, contribuindo significativamente para a estabilidade do
modelo de dados, reduzindo-se consideravelmente as necessidades de
manutenção. Inicialmente Codd estabeleceu três Formas Normais, chamando-as
de Primeira, Segunda e Terceira Formas Normais. Uma definição mais forte da
Terceira Forma Normal foi depois proposta por Boyce e Codd, chamada Forma
Normal Boyce-Codd. Depois uma Quarta e uma Quinta Formas Normais foram
propostas, baseadas nos conceitos de dependências multivaloradas e de junção,
respectivamente: • Primeira Forma Normal, ou 1FN • Segunda Forma Normal, ou
2FN • Terceira Forma Normal, ou 3FN • Forma Normal Boyce-Codd, ou FNBC ou
BCNF • Quarta Forma Normal, ou 4FN
5. 4 • Quinta Forma Normal, ou 5FN Cada uma das formas normais
representa uma condição mais forte que a anterior na lista, mas para a maioria
dos efeitos práticos, considera-se que as bases de dados estão normalizadas se
aderirem à Terceira Forma Normal. “Outro ponto a notar é que os projetistas de
um banco de dados não precisam normalizar até a forma normal mais alta
16
possível. As relações podem permanecer em um estado de normalização mais
baixo, como 2FN, por razões de desempenho.” (ELMASRI; NAVATHE, 2005
apud NISHIMURA, 2009, p. 81). O processo é sequencial, iniciando pela 1FN.
Não é possível “pular” uma forma normal, assim como não é possível fazer uma
forma normal errada e passar para a próxima. Se uma tabela obedece às regras
de uma forma normal, esta obedece igualmente às regras das formas normais
anteriores. Uma tabela está na Primeira Forma Normal quando seus atributos
não contêm grupos de Repetição, ou também, a 1FN requer que todos os
valores de colunas em uma tabela sejam atômicos (indivisíveis). É necessário
identificar atributos que representam o armazenamento de um mesmo dado em
locais diferentes; atributos repetidos; atributos com mais de uma ocorrência.
Uma “regra de ouro” para a 1FN é não misturar assuntos em uma mesma tabela
(BATTISTI, 2004). Ao identificar esses erros, os atributos devem ser transferidos
para uma nova tabela (ou tabelas), mantendo um relacionamento com a tabela
original. As tabelas resultantes devem obedecer à 1FN. Para aplicar as regras
das formas normais seguintes é necessário entender de Dependência Funcional.
Existe dependência funcional X Y entre dois atributos X e Y, se os valores de X
determinam os valores de Y. Se em um novo registro da tabela, o valor de X se
repetir, obrigatoriamente o valor de Y também se repetirá. A Segunda Forma
Normal ocorre quando a chame primária é composta por mais de um campo. Se
uma tabela está na 1FN e possui chave primária simples, já está
automaticamente na 2FN. Uma tabela, para estar na 2FN, não pode conter
dependência funcional entre seus atributos não-chave com apenas parte de sua
chave primária, isto é, cada atributo não-chave deve ser dependente da chave
primária inteira. Com as dependências encontradas, divide-se a tabela em duas
(ou
6. 5 mais) outras tabelas, mantendo as tabelas resultantes na 2FN. Battisti
(2004) explica a Terceira Forma Normal: Na definição dos campos de uma
entidade podem ocorrer casos em que um campo não seja dependente
diretamente da chave primária ou de parte dela, mas sim dependente de outro
campo da tabela, campo este que não a Chave Primária. Para estar na 3FN, a
relação R deve obedecer a 2FN e não pode conter dependências funcionais dos
atributos não-chave com outros atributos não- chave. Mais uma vez se divide a
tabela em outras para solucionar o problema encontrado. As tabelas resultantes
17
devem obedecer à 3FN. A 3FN é aquela que, na maioria dos casos, termina o
processo de normalização.
PADRÃO SQL A linguagem SQL (Structured Query Language, ou
Linguagem Estruturada de Consulta) é uma linguagem de pesquisa declarativa
para bancos de dados relacionais. Foi desenvolvida pela IBM nos anos 70 como
uma interface para o System R, um sistema experimental de um banco de dados
relacional que tinha por objetivo demonstrar a viabilidade da implementação do
modelo relacional proposto por Codd. A sua grande vantagem sobre os modelos
anteriores, dada sua linguagem não procedural e manipulação de conjuntos de
dados com um único comando, a torna uma das maiores razões para o sucesso
dos SGBDs comerciais. Embora criada pela IBM, rapidamente surgiram vários
“dialetos” desenvolvidos por outros produtores. Essa rápida expansão levou à
necessidade de uma padronização da linguagem. Na década de 80, a ANSI
(American National Standards Institute – Instituto Nacional Americano de
Padrões) e a ISO (International Standards Organization – Organização
Internacional de Padrões) chegaram à versão padrão da SQL, chamada SQL-86
ou SQL1. Houve ainda uma revisão em 1992 (SQL-92 ou SQL2) e outra em
1999 (SQL-99 ou SQL3). A adoção da linguagem SQL por vários SGBDs permite
que os programadores sejam mais independentes do SGBD, podendo escrever
declarações em um programa aplicativo e acessar os dados em dois ou mais
SGBDs relacionais, sem ter de alterar a SQL em ambos SGBDs. A SQL é uma
linguagem abrangente, possuindo comandos que definem e manipulam a
estrutura de armazenamento e procedimentos (DDL) e comandos de
manipulação de dados (DML). Os comandos DDL (Data Definition Language –
Linguagem de Definição de Dados) permitem a criação e manutenção da
estrutura de armazenamento de um SGBD, como tabelas, colunas etc. Esses
comandos não acessam dados, mas interferem em sua existência e forma de
armazenamento ou acesso.
A escalabilidade, portabilidade e fácil acesso provido pela plataforma Web têm
popularizado seu uso no desenvolvimento de diversas aplicações. Porém, o
crescente número de incidentes de segurança levanta preocupações quanto à
sua seguridade. Umas partes destes incidentes decorrem da falta de
consideração de segurança durante o processo de desenvolvimento. Este
trabalho tem como objetivo propor práticas de segurança a serem aplicadas
18
durante o processo de desenvolvimento de software Web que minimizem os
riscos, aumentando a qualidade e confiabilidade do produto final. Nele serão
apresentados: conceitos de segurança da informação, as vulnerabilidades mais
comuns existentes em software Web e algumas práticas que devem ser
aplicadas durante o desenvolvimento.
19
4 Conclusão
Trabalhando há três anos como técnico de redes em telecomunicações, pude
perceber a importância da segurança não apenas nas camadas da rede, mas
também no acesso a aplicações do usuário final. Essa experiência que ganhei
ao longo desses anos, também tem servido para ampliar os meus
conhecimentos nos estudos do curso de Análises e Desenvolvimento de
Sistemas.
O que pode se notar no decorrer dessa atividade, é a grande importância e
necessidade que uma informação tem, a informação é o bem mais preciso hoje
em dia, tudo é guardado a sete chaves, informações essa desde um simples
e-mail até dados pessoais como números de documentos, ressaltando também a
grande parte que a tecnologia hoje nos beneficia para o sigilo. Portanto a
segurança e a confiabilidade dos dados precisam ser preservadas da melhor
forma possível. Um erro durante o desenvolvimento pode abrir brechas para
invasores de sistemas, podendo ocasionar perdas de dados ou até mesmo
financeiramente.
O tema escolhido para estudarmos durante esta atividade complementar,
foi bastante propicio, pois ela nos mostra mais uma possibilidade para
ampliarmos nossos conhecimentos.
20
5 Referencias
http://www.martinsfontespaulista.com.br/anexos/produtos/capitulos/254879.pdf
http://pt.wikipedia.org/wiki/Diagrama_de_atividade
REFERÊNCIAS BATTISTI, Júlio. O modelo relacional de dados – parte 04. In:
iMasters, por uma internet mais criativa e dinâmica. 2004. Disponível em
<http://imasters.uol.com.br/artigo/2521/bancodedados/o_modelo_relacional_de_
dad os_-_parte_04/>.
21