segunda-feira, 27 de dezembro de 2010

Utilizando MD5 em Criptográfia

Aqui desenvolvi com algumas pesquisas e montei umas Function para PHP para validação de logins ao Banco de Dados utilizando MD5, podem notar ele originalmente foi feito apenas para alimentar o md5 database md5.rednoize.com, porém você também pode utiliza-lo para efetuar pesquisas.

Código PHP:

#!/usr/bin/php -q
<?php
//Alterar a linha para #!/pathdophp/php -q -d short_open_tag=on
$servidor "md5.rednoize.com";
echo "\033[32m";
echo 
"------------------------------------\r\n";
echo 
"- md5hash - http://md5.rednoize.com -\r\n";
echo 
"- Criado por: Elder Stroparo     -\r\n";
echo 
"- E-Mail: seuemail[arroba]email.com     -\r\n";
echo 
"- Seg, 27 de Dezembro de 2010         -\r\n";
echo 
"------------------------------------\r\n";
settype($template"string");
//$template = "1234567890abcdefghijklmnopqrstuvwxyz"; //Letras e Numeros.
$template "123456789"//Somente numeros.
function GetRandomString($length) {
       global 
$template;
       
settype($length"integer");
       
settype($rndstring"string");
       
settype($a"integer");
       
settype($b"integer");
       for (
$a 0$a <= $length$a++) {
               
$b rand(0strlen($template) - 1);
               
$rndstring .= $template[$b];
       }
       return 
$rndstring;
}
if (
$argc<3) {
echo 
"\r\n";
echo 
"Para \"quebrar\" uma md5 use ".$argv[0]." -m\r\n";
echo 
"Para adicionar uma nova senha ao banco de dados (md5.rednoise.com) utilize: ".$argv[0]." -q\r\n";
echo 
"[#] Alimentando o banco de dados...\r\n";
echo 
"[!] Para finalizar pressione CTRL+C\r\n\r\n";
while (
1) {
$rand GetRandomString(7);
echo 
$rand;
echo 
" - ";
echo 
file_get_contents("http://$servidor/?p&q=$rand");
echo 
"\r\n";
}
}
if (
$argv[1] == "-m") {
$q $argv[2];
echo 
"[!] Consultando servidor...";
echo
"\r\n";
echo 
"[*] A senha é: ";
echo 
file_get_contents("http://$servidor/?p&q=$q&b=MD5-Search");
echo 
"\r\n";
}
if (
$argv[1] == "-q") {
$q $argv[2];
echo 
"[*] Senha $q - md5: ";
echo 
file_get_contents("http://$servidor/?p&q=$q");
echo 
"\r\n[!] Adicionada com sucesso!";
echo
"\r\n";
}
?>


Bom espero que tenham gostando deste exemplo em PHP, ai está um modelo de como utilizar o MD5, ele está alimentando o bando de dados e gerando uma sequencia diretamente do servidor http://md5.rednoize.com (MD5 HASH).


Funções de Criptográfia

Bom vou falar hoje um pouco sobre o termo Funções de Criptográfia que é meios de proteger as informações armazenadas em um Banco de Dados.

Os Banco de Dados são muito importante eles utilizam para armazenar diversos tipos de informações, desde dados sobre uma conta de e-mail até dados importantes da Receita Federal. Para tal existem diversos tipos, os quais variam em complexidade e sobre tudo em segurança.

A Criptográfia são técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário, oque atorna difícil de ser lida por alguém não autorizado. Assimsendo, só o receptor da mensagem pode ler a informação com facilidade.

Visão Geral: a criptografia tem quatro objetivos principais

confidencialidade da mensagem: só o destinatário autorizado deve ser capaz de extrair o conteúdo da mensagem da sua forma cifrada. Além disso, a obtenção de informação sobre o conteúdo da mensagem (como uma distribuição estatística de certos caracteres) não deve ser possível, uma vez que, se o for, torna mais fácil a análise criptográfica.

integridade da mensagem: o destinatário deverá ser capaz de determinar se a mensagem foi alterada durante a transmissão.

autenticação do remetente: o destinatário deverá ser capaz de identificar o remetente e verificar que foi mesmo ele quem enviou a mensagem.

não-repúdio ou irretratabilidade do emissor: não deverá ser possível ao emissor negar a autoria da mensagem.

Nem todos os sistemas ou algoritmos criptográficos são utilizados para atingir todos os objetivos listados acima. Normalmente, existem algoritmos específicos para cada uma destas funções. Mesmo em sistemas criptográficos bem concebidos, bem implementados e usados adequadamente, alguns dos objetivos acima não são práticos (ou mesmo desejáveis) em algumas circunstâncias. Por exemplo, o remetente de uma mensagem pode querer permanecer anônimo, ou o sistema pode destinar-se a um ambiente com recursos computacionais limitados.

Comentando melhor sobre as funções de criptográfia Criptografia

Criptografia, MD2, MD4, SHA, Hash, MD5, MD6 (não utilizavél).

Criptografia

(Do Grego kryptós, "escondido", e gráphein, "escrita") é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário (detentor da "chave secreta"), o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ler a informação com facilidade. É um ramo da Matemática, parte da Criptologia.

MD2

é um algoritmo de hash que cria um valor de hash de 128 bits funciona semelhante ao algoritmo de MD4 e foram desenvolvidos pela RSA Data Security, Inc.

MD4

é um algoritmo de hash que cria um valor de hash de 128 bits funciona semelhante ao algoritmo de MD2 e foram desenvolvidos pela RSA Data Security, Inc.
Ele foi desenvolvido em 1990, mas um ano após foi sucedido pelo MD5 por possuir falhas de segurança. A lógica desse algoritmo influenciou a criação de outros algoritmos como o MD5, SHA-1 e o RIPEMD. O MD4 também é usado para computar o hash de senhas em sistemas Microsoft NT.

SHA

(Secure Hash Algorithm) está relacionada com as funções criptográficas. A função mais usada nesta família, a SHA-1, é usada numa grande variedade de aplicações e protocolos de segurança, incluindo TLS, SSL, PGP, SSH, S/MIME e IPSec. SHA-1 foi considerado o sucessor do MD5. Ambos têm vulnerabilidades comprovadas. Em algumas correntes, é sugerido que o SHA-256 ou superior seja usado para tecnologia crítica. Os algoritmos SHA foram desenhados pela National Security Agency (NSA) e publicados como um padrão do governo Norte-Americano.

O primeiro membro da família, publicado em 1993, foi oficialmente chamado SHA; no entanto, é frequentemente chamado SHA-0 para evitar confusões com os seus sucessores. Dois anos mais tarde, SHA-1, o primeiro sucessor do SHA, foi publicado. Desde então quatro variantes foram lançadas com capacidades de saída aumentadas e um design ligeiramente diferente: SHA-224, SHA-256, SHA-384, e SHA-512 — por vezes chamadas de SHA-2.

Hash

é uma sequência de bits geradas por um algoritmo de dispersão, em geral representada em base hexadecimal, que permite a visualização em letras e números (0 a 9 e A a F), representando 1/2 byte cada. O conceito teórico diz que "hash é a transformação de uma grande quantidade de informações em uma pequena quantidade de informações".

Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.

Uma função de hash recebe um valor de um determinado tipo e retorna um código para ele. Enquanto o ideal seria gerar identificadores únicos para os valores de entrada, isso normalmente não é possível: na maioria dos casos, o contra-domínio de nossa função é muito menor do que o seu domínio, ou seja, x (o tipo de entrada) pode assumir uma gama muito maior de valores do que (o resultado da função de hash).

MD5

(Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, e muito utilizado por softwares com protocolo ponto-a-ponto (P2P, ou Peer-to-Peer, em inglês) na verificação de integridade de arquivos e logins.

Foi desenvolvido em 1991 por Ronald Rivest para suceder ao MD4 que tinha alguns problemas de segurança. Por ser um algoritmo unidirecional, uma hash md5 não pode ser transformada novamente no texto que lhe deu origem. O método de verificação é, então, feito pela comparação das duas hash (uma da mensagem original confiável e outra da mensagem recebida). O MD5 também é usado para verificar a integridade de um arquivo através, por exemplo, do programa md5sum, que cria a hash de um arquivo. Isto pode-se tornar muito útil para downloads de arquivos grandes, para programas P2P que constroem o arquivo através de pedaços e estão sujeitos a corrupção dos mesmos. Como autenticação de login é utilizada em vários sistemas operacionais unix e em muitos sites com autentificação.

MD6

sobre a Criptografia MD6 MD6 (Message-Digest algorithm 6) é uma função hash criptográfico. Ele usa uma árvore de Merkle-como a estrutura, e em 2008, Ronald Rivest e outros, publicaram uma nova versão do algoritmo o MD6 com hash de tamanhos 224, 256, 384 ou 512 bytes. O algoritmo MD6 iria participar do concurso para ser o novo algoritmo SHA-3, porém após removeu-o do concurso por considera-lo muito lento, anuncionado que os computadores de hoje são muito lentos para usar o MD6.

Em breve estarei postando as funções de criptográfia de acordo com cada algoritimo

segunda-feira, 20 de dezembro de 2010

Procedures e Funções em PL/SQL


Bom pessoal a pedido de algumas pessoas está ai o tutorial sobre PL/SQL de uma maneira bem simples, utilizando a linguagem PL/SQL para fazer Procedures, e Functions.

Bom então vamos a luta.

Procedures e Funções


Uma função nada mais é do que pedaços de código, definidos pelo utillizador ou pré-definidos pela linguagem, utilizados para manipular dados. Aceitam um ou mais argumentos, devolvendo um valor. O argumento é uma constante, variável ou o nome de uma coluna. O valor devolvido serve para classificar a função: será numérica se o valor devolvido é numérico, char se devolve um char. As funções são utilizadas para manipular dados, tornando mais potentes as consultas. Dividem-se em três grandes grupos: manipulação de linhas, manipulação de grupos de linhas e funções analíticas. Dentro do primeiro grupo há funções para manipular caracteres, números, datas e funções que permitem converter dados de um tipo para outro. As funções de grupo permitem obter um valor que depende do grupo de linhas, por exemplo uma média, variância ou um máximo. As funções analíticas misturam os dois tipos anteriores: devolvem um valor por cada linha, mas esse valor depende do grupo.


E uma procedure nada mais é do um bloco PL/SQL nomeado. A grande vantagem sobre um bloco PL/SQL anônimo é que pode ser compilado e armazenado no banco de dados como um objeto de schema. Graças a essa característica as procedures são de fácil manutenção, o código é reutilizável e permitem que trabalhemos com módulos de programa.

Uma procedure é, então, um bloco
PL/SQL nomeado que pode aceitar argumentos (também chamado de parâmetros) e pode ser chamada por um programa, uma sessão SQL ou uma trigger.

Durante a instalação do banco de dados Oracle um script é executado automaticamente e cria toda a estrutura necessária para que as procedures sejam executadas. Eventualmente esse procedimento automático pode falhar devido a alguma falha física no disco rígido, nesse caso o usuário
SYS pode recriar a estrutura através do script SQL DBMSSTDX.SQL.

Para criar uma procedure o usuário precisa ter o privilégio de sistema
CREATE PROCEDURE, para criar a procedure em outros schemas o usuário deve ter o privilégio de CREATE ANY PROCEDURE. Este é um ponto muito interessante sobre as procedures, os privilégios para criação de procedures têm que ser concedidos explicitamente, ou seja, não pode ser adquirido através de roles.

Para executar uma procedure externa é necessário ter o privilégio de
EXECUTE. Caso queira alterar a procedure de outro schema deve ter o privilégio de sistema ALTER ANY PROCEDURE.

A sintaxe básica de uma procedure é:


CREATE [OR REPLACE] PROCEDURE [schema.]nome_da_procedure
[(parâmetro1 [modo1] tipodedado1,
parâmetro2 [modo2] tipodedado2,
...)]
IS|AS
Bloco PL/SQL


Onde:

REPLACE - indica que caso a procedure exista ela será eliminada e substituída pela nova versão criada pelo comando;

BLOCO PL/SQL - inicia com uma cláusula BEGIN e termina com END ou END nome_da_procedure;

NOME_DA_PROCEDURE - indica o nome da procedure;

PARÂMETRO - indica o nome da variável PL/SQL que é passada na chamada da procedure ou o nome da variável que retornará os valores da procedure ou ambos. O que irá conter em parâmetro depende de MODO;

MODO - Indica que o parâmetro é de entrada (IN), saída (OUT) ou ambos (IN OUT). É importante notar que IN é o modo default, ou seja, se não dissermos nada o modo do nosso parâmetro será, automaticamente, IN;

TIPODEDADO - indica o tipo de dado do parâmetro. Pode ser qualquer tipo de dado do SQL ou do PL/SQL. Pode usar referencias como %TYPE, %ROWTYPE ou qualquer tipo de dado escalar ou composto. Atenção: não é possível fazer qualquer restrição ao tamanho do tipo de dado neste ponto.

IS|AS - a sintaxe do comando aceita tanto IS como AS. Por convenção usamos IS na criação de procedures e AS quando estivermos criando pacotes.

BLOCO PL/SQL - indica as ações que serão executadas por aquela procedure.

Vamos ver um exemplo de procedure para ajudar nosso entendimento:


CREATE OR REPLACE PROCEDURE aumenta_sal (p_empno IN emp.empno%TYPE) IS
BEGIN
UPDATE
scott.emp
SET
sal = sal * 1.10
WHERE
empno = p_empno;
END aumenta_sal;
/


Neste exemplo estamos criando uma procedure para aumentar o salário de um funcionário em 10%. A primeira linha define o NOME DA PROCEDURE, que vai ser AUMENTA_SAL.

A linha dois define o parâmetro P_EMPNO no modo IN. Ou seja, vai ser um dado informado na chamada da procedure. Em seguida determinamos que ele será do mesmo tipo e tamanho que a coluna EMPNO da tabela EMP. Isso é feito através da referencia EMP.EMPNO%TYPE.

Podemos verificar o estado de nossa procedure através de uma simples consulta:


SELECT object_name, status
FROM user_objects
WHERE object_name LIKE '%AUMENTA%';/


Agora podemos verificar o funcionamento de nossa procedure:


SELECT empno, sal
FROM scott.emp;


EMPNO SAL
---------

7839 5000
7698 2850
7782 2450



CALL AUMENTA_SAL(7839);


Ou


EXECUTE AUMENTA_SAL(7839);



SELECT empno, sal FROM scott.emp;



EMPNO SAL
--------

7839 5500
7698 2850
7782 2450



Podemos notar que o salário do funcionário 7839 aumentou em 10%.


Funções


Sintaxe Básica:


CREATE [OR REPLACE] FUNCTION nome_da_função[( parameter1 [ mode1] datatype1,parameter2 [ mode2] datatype2,. . .)]RETURN tipo_de_dadoIS|ASBloco PL/SQL;


Ao contrário das procedures as funções tem que retornar ao menos um valor.


CREATE OR REPLACE FUNCTION pega_sal
(p_id IN emp.empno%TYPE)
RETURN NUMBER
IS
v_sal emp.sal%TYPE :=0;
BEGIN
SELECT sal
INTO v_sal
FROM scott.emp
WHERE empno = p_id;
RETURN v_sal;
END pega_sal;/


Executando


VARIABLE g_sal NUMBER
EXECUTE :g_sal := pega_sal(7839)
PRINT g_sal


Função para calcular CPMF


CREATE OR REPLACE FUNCTION cpmf(p_value IN NUMBER)
RETURN NUMBER IS

BEGIN
RETURN (p_value * 0.038);
END cpmf;
/
SELECT empno, ename, sal, cpmf(sal)
FROM scott.emp
WHERE deptno = 10;


sexta-feira, 9 de julho de 2010

Mapeamento Objeto Relacional


Bom vou falar hoje sobre Mapeamento Objeto Relacional (ORM, O / RM, e O / R mapeamento) em software de computador é uma programação técnica para conversão de dados incompatíveis entre sistemas do tipo em banco de dados relacional e orientada objetos linguagens de programação. This creates, in effect, a "virtual object database " that can be used from within the programming language. Isso cria, de fato, um "virtual objeto de banco de dados"que podem ser usados dentro da linguagem de programação.

Mapeamento Objeto Relacional é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando banco de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.

Bom esta técnica, o programador não precisa se preocupar com os comandos em linguagem SQL; ele irá usar uma interface de programação simples que faz todo o trabalho de persistência.

Não é necessária uma correspondência direta entre as tabelas de dados e as classes do programa. A relação entre as tabelas onde originam os dados e o objecto que os disponibiliza é configurada pelo programador, isolando o código do programa das alterações à organização dos dados nas tabelas do Banco de Dados.

A forma como este mapeamento é configurado depende da ferramenta que estamos a usar. Como exemplo, o programador que use Hibernate na linguagem Java pode usar ficheiros XML ou o sistema de anotações que a linguagem providencia.

sexta-feira, 14 de maio de 2010

Cliente-Servidor Vantagens e Desvantagens

Bom vo citar algumas Vantagens e Desvantagens do Cliente-Servidor para vocês entenderem melhor sobre este assunto o que é bom e não é bom para você que não está apto em Banco de Dados que isto é fundamental Cliente-Servidor


Vantagens

Na maioria dos casos, a arquitetura cliente-servidor permite que os papéis e responsabilidades de um sistema de computação para ser distribuído entre vários computadores independentes que são conhecidos por si só através de uma rede. Isso cria uma vantagem adicional para essa arquitetura: maior facilidade de manutenção. Por exemplo, é possível substituir, reparar, atualizar ou mesmo realocar um servidor de seus clientes, enquanto continuam a ser a consciência e não afetado por essa mudança;
Todos os dados são armazenados nos servidores, que geralmente possuem controles de segurança muito maior do que a maioria dos clientes. Servidores podem controlar melhor o acesso e recursos, para garantir que apenas os clientes com as permissões adequadas podem acessar e alterar dados;
Desde o armazenamento de dados é centralizada, as atualizações dos dados são muito mais fáceis de administrar, em comparação com o paradigma P2P, onde uma arquitetura P2P, atualizações de dados podem precisar ser distribuída e aplicada a cada ponto na rede, que é o time-consuming é passível de erro, como pode haver milhares ou mesmo milhões de pares;
Muitas tecnologias avançadas de cliente-servidor já estão disponíveis, que foram projetadas para garantir a segurança, facilidade de interface do usuário e facilidade de uso;
Funciona com vários clientes diferentes de capacidades diferentes.

Desvantagens

Redes de tráfego de bloqueio é um dos problemas relacionados com o modelo cliente-servidor. Como o número de solicitações simultâneas de cliente para um determinado servidor, o servidor pode ficar sobrecarregado;
O paradigma cliente-servidor não tem a robustez de uma rede P2P. Sob cliente-servidor, se um servidor crítico falhar, os pedidos dos clientes não podem ser cumpridos. Em redes P2P, os recursos são normalmente distribuídos entre vários nós. Mesmo se um ou mais nós partem e abandonam baixar um arquivo, por exemplo, os nós restantes ainda deve ter os dados necessários para completar o download.

Características do Cliente e do Servidor

Bom hoje ainda vou comentar sobre Cliente-Servidor ainda.. vamos lá.

Características do Cliente

Sempre inicia pedidos de servidores;
Espera por respostas;
Recebe respostas;
Normalmente, se conecta a um pequeno número de servidores de uma só vez;
Normalmente, interage diretamente com os usuários finais através de qualquer interface com o usuário , como interface gráfica do usuário.

Características do Servidor

Sempre esperar por um pedido de um dos clientes;
Serve os clientes pedidos, em seguida, responde com os dados solicitados aos clientes;
Um servidor pode se comunicar com outros servidores, a fim de atender uma solicitação do cliente.

Bom são essas ai as características do Cliente-Servidor espero que seja útil a vocês. Para mim é sim.

quinta-feira, 13 de maio de 2010

Cliente-servidor


Olá pessoal bom faz um tempo que eu não faço nenhum posts e hoje estou devolta vou fazer alguns posts sobre Cliente-servidor.

Bom Cliente-servidor é um modelo computacional que separa clientes e servidores, sendo interligados entre si geralmente utilizando-se uma rede de computadores. Cada cliente pode enviar requisições de dado para algum dos servidores conectados e esperar pela resposta. Por sua vez, algum dos servidores disponíveis pode aceitar tais requisições, processá-las e retornar o resultado para o cliente. Apesar do conceito ser aplicado em diversos usos e aplicações, a arquitetura é praticamente a mesma.

Muitas vezes os clientes e servidores se comunicam através de uma rede de computador com hardwares separados, mas o cliente e servidor podem residir no mesmo sistema. A máquina servidor é um host que está executando um ou mais programas de servidor que partilham os seus recursos com os clientes.

E lembrando também um cliente não compartilha de seus recursos, mas solicita o conteúdo de um servidor ou função de serviço. Os clientes, portanto, iniciam sessões de comunicação com os servidores que esperam as solicitações de entrada.

Uma breve descrição sobre este assunto é a característica de cliente-servidor, descreve a relação de programas em um aplicativo. O componente de servidor fornece uma função ou serviço a um ou muitos clientes, que iniciam os pedidos de serviços.

Obtendo a funções como a troca de e-mail, acesso à internet e acessar banco de dados, são construídos com base no modelo cliente-servidor. Por exemplo, um navegador da web é um programa cliente em execução no computador de um usuário que pode acessar informações armazenadas em um servidor web na Internet. Usuários de serviços bancários acessando do seu computador usam um cliente navegador da Web para enviar uma solicitação para um servidor web em um banco. Esse programa pode, por sua vez encaminhar o pedido para o seu próprio programa de banco de dados do cliente que envia uma solicitação para um servidor de banco de dados em outro computador do banco para recuperar as informações da conta. O saldo é devolvido ao cliente de banco de dados do banco, que por sua vez, serve-lhe de volta ao cliente navegador exibindo os resultados para o usuário.

O modelo cliente-servidor, se tornou uma das idéias centrais de computação de rede. Muitos aplicativos de negócios a serem escrito hoje utilizam o modelo cliente-servidor. Em marketing, o termo tem sido utilizado para distinguir a computação distribuída por pequenas dispersas computadores da "computação" monolítica centralizada de computadores mainframe.

Cada instância de software do cliente pode enviar requisições de dados a um ou mais servidores ligados. Por sua vez, os servidores podem aceitar esses pedidos, processá-los e retornar as informações solicitadas para o cliente. Embora este conceito possa ser aplicado para uma variedade de razões para diversos tipos de aplicações, a arquitetura permanece fundamentalmente a mesma.

Bom é isso ai amigos espero que o básico vocês peguem porque é muito útil saber destes pequenos detalhes de cliente-servidor.

sexta-feira, 12 de fevereiro de 2010

Criando uma Trigger

Bom vo fazer um exemplo de como criar um gatilho em uma tabela, o usuário deve possuir o privilégio TRIGGER na tabela. 

Na versão atual, gatilhos de declaração (STATEMENT triggers) não estão implementados. 

Consulte o comando DROP TRIGGER para obter informações sobre como remover gatilhos. 
Exemplos

Verificar se o código do distribuidor existe na tabela de distribuidores antes de inserir ou atualizar uma linha da tabela filmes: 


CREATE TRIGGER se_dist_existe
  BEFORE INSERT OR UPDATE ON filmes FOR EACH ROW
  EXECUTE PROCEDURE verificar_chave_primaria ('did', 'distribuidores', 'did');

Antes de remover um distribuidor, ou de atualizar o seu código, remover todas as referências para a tabela filmes: 


CREATE TRIGGER se_filme_existe
  BEFORE DELETE OR UPDATE ON distribuidores FOR EACH ROW
  EXECUTE PROCEDURE verificar_chave_primaria (1, 'CASCADE', 'did', 'filmes', 'did');

O segundo exemplo também pode ser implementado usando uma chave estrangeira, como em:
 
CREATE TABLE distribuidores (
  did DECIMAL(3),
  nome VARCHAR(40),
  CONSTRAINT se_filme_existe
  FOREIGN KEY(did) REFERENCES filmes
  ON UPDATE CASCADE ON DELETE CASCADE  
);

Está situação eu fiz no PostgreSQL com (SQL99).
Bom embreve farei mais posts acompanhem.

O que é Trigger?


Bom aqui este tópico vou falar sobre as
Triggers é um (Gatilho) as melhores coisas que existem em um banco de dados para o programador elas dão uma dorzinha de cabeça mas que... facilitam muito a vida do desenvolvedor do software, mais vamos para entendimento melhor, temos que saber para que serve uma Trigger e qual a sua função dentro do banco. Então Let's GO!!!.

Uma descrição básica e rápida ela é o comando no banco CREATE TRIGGER introduz um novo gatilho no banco de dados atual. O gatilho fica associado com a relação tabela e executa a função especificada função. 

O
gatilho pode ser especificado para disparar antes (BEFORE) da operação ser realizada na tupla (antes das restrições serem verificadas e o INSERT, UPDATE ou DELETE serem efetuados) ou após (AFTER) a operação ser realizada (ou seja, após as restrições serem verificadas e o INSERT, UPDATE ou DELETE ter completado). Se o gatilho disparar antes do evento, o gatilho pode evitar a operação para a tupla atual, ou modificar a tupla sendo inserida (para as operações de INSERT e UPDATE somente). Se o gatilho disparar após o evento todas as modificações, incluindo a última inserção, atualização ou exclusão, são "visíveis" para o gatilho

O
SELECT não modifica nenhuma linha, portanto não é possível criar gatilhos para SELECT. Regras e visões são mais apropriadas para este caso. 

Sintaxe ficariam assim:

Name (CREATE TRIGGER -- define um novo gatilho);
Synopsis (BEFORE | AFTER);
Entradas (nome, tabela, evento, função);
Saídas (Mensagem retornada se o gatilho for criado com sucesso);

Bom  mais para frente irei postar várias Tiggers para vários tipos de Linguagens de Banco de Dados como exemplo Postgre, Firebird, Oracle entre outros...

1º O que são Triggers?

Triggers são códigos de
PL/SQL armazenados dentro do banco de dados, onde podemos definir um "bloco" PL/SQL para que seja executado automaticamente pelo banco, assim toda vez que uma instrução SQL ( evento DML ) for aplicada para uma tabela específica ele irá executar um determinado evento automaticamente.

2º Para que serve uma Trigger?

Bom volto a falar ela esta dentro do
Banco de Dados e tem uma função muito boa a Trigger dentro do seu banco será de uma utilidade enorme, imaginem que temos um banco de dados com 1.500,000 de registros, onde os funcionários da empresa ganham por hora, e você tem que atualizar o banco de horas de cada funcionário por dia, alguns comandos poderia fazer isso por nós, mas seria um pouco complicado e desgastante, então, por este motivo, criamos nossas Triggers, onde definimos o que deve ser mudado na tabela num único arquivo e depois acionamos um único comando DML (Update) para ele, assim, ele irá atualizar os 1.500,000 de registros de uma única só vez.

3º Implementação da Trigger dentro do banco?

Devemos tomar algumas precauções sobre a implementação das
Triggers dentro do banco, fique atento para estes tópicos :
  • Use triggers para garantir a execução de comandos para uma tabela específica;
  • Não fique criando triggers que duplique regras já definidas em CONSTRAINTS do banco;
  • O Oracle recomenda que limitamos os nossos códigos no máximo em 60 linhas,
  • Caso você tenha que criar algo mais complexo crie stored procedure, será mais utíl;
  • ATENÇÃO cuidado ao criar as Triggers que disparem sob uma instrução UPDATE na sua Tabela, não pode alterar a tabela porque isso iria disparar a Triggers mais de N vezes no sistema, e a memória do equipamento não iria agüentar ocasionandos bugs de memória e resultados errôneos.

4º Pontos fundamentais das Triggers?

Segurança e Integridade

Podemos utilizar as Triggers para garantir uma segurança maior no nosso banco, ela tem como tarefa restringir o acesso as tabelas e controlar as atualizações.

Auditoria

Como disse anteriormente, as Triggers são executadas automaticamente, assim, podemos utilizá-las para fazer auditoria sobre acesso ao banco de dados.

Replicação de Dados

São excelentes para criar uma política de replicação síncrona de uma tabela para outra.

Integridade

Apartir das Triggers podemos criar controles mais complexos para os relacionamento das tabelas.

Controle de dados

Caso uma tabela tenha dados, cujo valor depende de outras tabelas, as Triggers pode atualizar automaticamente a coluna com os valores derivados.

Próximos posts vou comentar sobre a Preparação das Triggers passo-a-passo e um resumo sobre os comandos, assim vocês poderam na ultima coluna, estar dominando a criação e a utilização deste mecanismo.

Tipos de Constraints


Bom agora vou falar sobre os tipos de Constraints;

  • Constraint DEFAULT
  • Constraint CHECK
  • Constraint PRIMARY KEY
  • Constraint UNIQUE
  • Constraint FOREIGN KEY

Basicamente falando, integridade de dados é a maneira de dizer que os dados que estão na sua base são confiáveis. Existem dois tipos de implementar integridade de dados nos Bancos de Dados: Declarativa e Procedural.

Declarativa diz respeito ao uso das constraints e das rules.

Procedural diz respeito ao uso de Stored Procedures e Triggers. (recomendo que leia este outro tópico sobre Triggers...)

Observações: 

- É possível criar uma constraint após a criação da tabela.
- Uma Constraint pode ser definida a nível de coluna ou a nível de tabela.
- Constraints são armazenadas no Dicionário de Dados e podem ser facilmente recuperadas se possuírem nomes razoáveis.

Constraint DEFAULT

Bom Constraint Defaukt ela serve para indicar um valor padrão para um campo, quando o mesmo não for especificado. Exemplo: se a tabela TESTE possui dois campos, COD e NOME, e para o campo NOME existe uma constraint DEFAULT criada, ao inserirmos dados nesta tabela podemos somente fornecer o conteúdo do campo COD, pois o conteúdo do campo NOME será automaticamente preenchido com o valor definido na constraint DEFAULT

Esta constraint deve ser utilizada para manter integridade de domínio. Também podemos utilizar esta constraint como um objeto independente, assim como as rules. Não podemos criar constraints em campos com o tipo de dados rowversion e campos que possuem uma propriedade IDENTITY definida.

Constraint CHECK

Esta constraint nos permite criar uma regra para o preenchimento de um certo campo em uma tabela. Nesta regra podemos utilizar valores de outros campos da mesma tabela para fazer a validação dos dados. Ou melhor um método para validar a integridade de todos os dados que entram em sua base e Check Constraints é ótimo para garantir todos  os dados que entram em seus sistemas através de novas soluções ou interfaces.

As Check Constraints também melhoram o aproveitamento de seu sistema. O gerenciador de banco de dados verifica o cumprimento das Check Constraints no nível mais baixo do sistema operacional e por isso a verificação destas regras tem uma carga de trabalho menor do que teria através de aplicativos.

Esta constraint deve ser utilizada para manter integridade de domínio e integridade referencial.

Esta constraint pode ser desabilitada, para caso de uma grande inserção de dados na tabela.

Constraint PRIMARY KEY

Esta constraint serve para definirmos um ou mais campos como chaves primárias. Uma chave primária é o atributo de um ou mais campos que identifica unicamente um registro em uma tabela. Podemos criar somente uma constraint PRIMARY KEY por tabela e não podemos colocar o valor NULL nos campos que compõem a chave primária.

Esta constraint deve ser utilizada para manter integridade de entidade. Quando esta constraint é criada na tabela, um índice também é automaticamente criado sobre as colunas que fazem parte da chave primária. Este índice não pode ser apagado diretamente, devemos apagar a constraint PRIMARY KEY primeiro.

Observações:

- A Constraint Primary Key é uma combinação das constraints Unique e Not Null
- Um índice único é automaticamente criado.

Constraint UNIQUE

Esta constraint faz a validação de valores únicos em uma coluna de uma tabela. Se um campo estiver definido com a constraint UNIQUE nenhum valor repetido poderá ser fornecido para esta campo. Diferente da PRIMARY KEY, podemos colocar várias constraints UNIQUE por tabela mas para cada campo que possue uma constraint UNIQUE somente podemos inserir o valor NULL uma vez.

Esta constraint deve ser utilizada para manter integridade de entidade. Quando esta constraint é criada na tabela, um índice também é automaticamente criado sobre a coluna sobre a qual a constraint está definida. Este índice não pode ser apagado diretamente, devemos apagar a constraint UNIQUE primeiro.

Observações:

- Designa uma coluna ou uma combinação de colunas de tal forma que duas linhas não possam ter o mesmo valor.
- Valores nulos são aceitos.
- Automaticamente é criado um índice único para a(s) coluna(s) especificada(s).

Constraint FOREIGN KEY

Esta constraint é utilizada para implementar o conceito de chave estrangeira e serve para indicar que o conteúdo de um campo deve se referenciar a um outro campo que possua ou uma chave primária ou uma constraint UNIQUE

Quando o campo que está sendo referenciado residir na mesma tabela, não precisamos uitilizar a palavra-chave FOREIGN KEY, podendo somente utilizar REFERENCES. Esta constraint também pode ser desabilitada, para o caso de uma grande inserção de dados na tabela. 

Esta constraint deve ser utilizada para manter integridade refencial e podemos ainda programar eventos em cascata utilizando as cláusulas ON DELETE e ON UPDADE.

Observações:

- Estabelece um relacionamento com a chave primária ou única da mesma ou de outra tabela.
- Deve referenciar um valor existente na tabela pai ou ser nulo.
- Chaves estrangeiras são baseadas em dados e são puramente lógicas, isto é, não são ponteiros físicos.
- Uma chave estrangeira, parte de uma chave primária, não pode ser nula pois uma chave primária não pode ser nula, nem parcialmente nula. 
- Havendo a cláusula ON DELETE CASCADE, uma deleção na tabela pai causa a deleção das linhas relacionadas na tabela filho.

Bom é isso ai espero que tenha respondido muitas perguntas e o porque haha... e muitos programadores desconhece desse assunto mas entendem muito sem saber o que é esses simples recursos que faz sem saber o nome que é Constraints isso nos Bancos de Dados.

É isso em breve muitos exemplos...

O que é uma Constraints?

Olá! vamos falar hoje sobre "O que é uma Constraints?"
Bom é um assunto bem interessante, as CONSTRAINTS, que nada mais são restrições que você estabelece para uma coluna no banco de dados, que nada mais é de um método para validar a integridade de todos os dados que entram em sua base.

Bom antes de você começar a ler este tópico recomendo você ler antes sobre a Integridade no Banco de Dados então depois de ler... volte aqui haha.

Constraints bom podemos ter os seguintes tipos:

  • Primary Key (PK) = Está restrição cria um índice único para um conjunto de colunas ou uma coluna para Chave Primaria.
  • Unique = Está Contraint determina que uma coluna não poderá ter 2 linhas com o mesmo valor.
  • Foreign Key (FK ou Chave Estrangeira) = Determina uma coluna ou um conjunto de colunas que possuem valores em outras tabelas, referente a uma referência ou um relacionamento.
  • Check = Especifica a condição que a coluna precisa para salvar o registro.
  • Not Null = Determina que a coluna tem preenchimento obrigatório.

Bom agora deu para você entender melhor sobre o que estamos falando né haha, as opções de restrições (Constraints), temos que aplicar isso na prática, e para isso vou utilizar um exemplo bem simples. Vamos imaginar que você tem que criar uma tabela para receber informações de consultas de empregados na sua empresa, onde no formulario de cadastro existe os campos Código, Nome, Departamento, Sexo, Idade e E-mail. Então nosso código deverá ter os seguintes campos todas com suas restrições para inclusão.

SQL 1º CREATE TABLE EMPREGADOS (
2
º COD NUMBER(6) NOT NULL CONSTRAINT CODEMP_PK PRIMARY KEY,
3
º NOME VARCHAR2(20) NOT NULL,
4
º DEPARTAMENTO VARCHAR2(40) NOT NULL CONSTRAINT DEPTO_FK REFERENCES DEPTO
5
º INITIALLY DEFERRED, 
6
º SEXO CHAR(1) NOT NULL CONSTRAINT CHECK_SEXO CHECK (SEXO IN ('F','M')),
7
º IDADE NUMBER(2) CONSTRAINT CHECK_IDADE CHECK (IDADE > 18),
8
º EMAIL VARCHAR2(40) NOT NULL UNIQUE
9
º )
10
º TABLESPACE USERS;

Agora vamos analisar o código linha por linha afim de entendermos o que está acontecendo.

1º Linha: Está sendo criada a tabela chamada
EMPREGADOS

2º Linha: Vamos criar uma coluna COD onde tem preenchimento obrigatório e está relacionada com outra tabela chamada CODEMP (Código Empregado) como chave primaria.

3º Linha: Criamos uma coluna NOME que o preenchimento é obrigatório.

4º Linha: Criamos uma coluna DEPARTAMENTO onde o preenchimento é obrigatório e como chave estrangeira para a tabela DEPTO e a cláusula DEFERRED significa que a transição poderá ser adiada até o fim da execução do serviço do banco.

6º Linha: Criação da coluna SEXO onde tem preenchimento obrigatório e só será aceito os caracteres F (Feminino) e M (Masculino).

7º Linha: Criamos uma coluna IDADE onde a idade do empregado da empresa tem que ser superior a 18 anos.

8º Linha: Criação da coluna EMAIL onde o preenchimento é obrigatório e não permite que os valores da coluna seja repetido.

10º Linha: Estamos determinando a área de reserva para aquela tabela.

PRONTO! é isso agora você já deve saber utilizar as restrições para suas tabelas e deixar elas mais utilizáveis no sistema.

Até a próxima.

quinta-feira, 11 de fevereiro de 2010

Integridade no Banco de Dados


Olá Pessoal, beleza... estou devolta... 

Bom comecei este artigo pensando em falar sobre Constraints e Triggers, mas antes, deveria falar sobre o que é uma Integridade no Banco de Dados, então, resolvi preparar este artigo que descreve os tipos e exemplificar cada um deles. 

Vamos lá! Let's GO!!!

Integridade é fundamental! 

Quando vamos projetar um Banco de Dados, imaginamos as possíveis formas para que nossa aplicação grave os dados corretamente no Banco de Dados, mas as vezes, esquecemos de definir, a nível de banco, quais as validações que devem ser feitas para evitar inconsistências nos dados e que, futuramente, se tornariam dores de cabeça. 

Em um Banco de Dados, possuímos 3 formas de Integridade

- Integridade de Domínio 
- Integridade de Entidade 
- Integridade Referencial 


Integridade de Domínio 

Neste tipo de integridade, as validações ocorrem em cada campo de nossa tabela (ou entidade), como por exemplo se um campo deve aceitar valores Null ou apenas uma faixa de valores, por exemplo: 

Temos um campo Sexo, que só deve aceitar valores do tipo M ou F e, independente de nossa aplicação, não deverá aceitar outros valores. Com integridade de domínio, podemos fazer isto facilmente. 

Integridade de Entidade 

Já na integridade de entidade, temos validações um nível acima, onde definimos quais campos de nossa tabela são chaves primárias (PK) ou únicas (UK). 

Um exemplo de chave única é o campo de CPF que nunca pode se repetir. 

OBS: Geralmente chaves únicas são chamadas de chaves candidatas, pois são candidatas a chave primária, mas não são uma. 

Integridade referencial 

E por último, mas não menos importante, vemos a Integridade Referencial, onde criamos nossas referências a campos do tipo PK ou UK de outras tabelas, as famosas chaves estrangeiras FK. Lembre-se que eu não posso criar uma referência (relacionamento) de uma coluna se esta não for uma chave primária de outra tabela. 

Este tipo de integridade é fundamental para verificar se um dado será inserido de forma correta e, como é uma chave estrangeira, se este dado realmente existe.

Vamos tirar por exemplo uma tabela chamada PEDIDO e uma CLIENTE. Eu só posso adicionar um registro de PEDIDO se existir um CLIENTE relacionado a ele, e é assim que as verificações acontecem, no momento da inclusão ou alteração, o SGBD verifica se o registro existe e caso não, retorna um erro

Bom, vimos neste artigo um pouco sobre integridade no banco de dados, no próximo irei falar sobre como criar Constraints e Triggers possamos pôr em prática o que vimos hoje. 

Até a próxima.

domingo, 31 de janeiro de 2010

História do SQL Server


Bom falarei sobre o SQL Server, tudo começou em 27 de março de 1987, o presidente da Microsoft na época, Jon Shirley, e o co-fundador e presidente da Sybase, Mark Hoffman, assinaram um acordo onde a Microsoft obteria direitos exclusivos ao produto DataServer da Sybase para o OS/2. Já a Sybase além de obter os royalties da Microsoft, ganharia credibilidade com o endosso de sua tecnologia pela Microsoft.Para ganhar aceitação no mundo dos bancos de dados para PC, onde o dBASE da Ashton-Tate tinha boa parte do mercado, o “novosistema de gerenciamento de banco de dados da Microsoft (licenciado pela Sybase) precisaria interessar à grande comunidade do dBASE. E a maneira mais direta de fazer isso era fazer a Ashton-Tate endossar o produto, e foi exatamente o que a Microsoft fez, um acordo com a Ashton-Tate.

A primeira versão beta do Ashton-Tate/Microsoft SQL Server foi lançada no segundo semestre de 1988

A versão 1.1 do Microsoft SQL Server foi lançada no segundo semestre de 1990.

No início de 1991 o acordo entre a Microsoft e a Sybase foi retificado, possibilitando à Microsoft o acesso de “somente-leitura” ao código-fonte do SQL Server para fins de suporte. Neste mesmo ano a Microsoft lançou uma versão de manutenção, o SQL Server 1.11.

O Microsoft SQL Server versão 4.2 for OS/2 entrou em teste beta no segundo semestre de 1991, tendo sido um desenvolvimento conjunto entre a Microsoft e a Sybase. A versão 4.2 (16-bit) foi lançada em março de 1992.

Em outubro de 1992, surgiu a primeira versão beta do SQL Server for Windows NT e em agosto de 1993 era lançada a versão final para o Windows NT 3.1.

O primeiro beta do SQL Server 6.0 (também chamado de SQL95) surgiu no final de outubro de 1994, e em julho de 1995 era lançado oficialmente o Microsoft SQL Server 6.0.

Em dezembro de 1995 é liberado uma versão beta completa do SQL Server 6.5. 

O SQL Server 7.0 (codinome Sphinx) chegou ao mercado no início de 1999 e colocou o SQL Server no mercado de sistemas de gerenciamento de base de dados relacionais de classe empresarial

Em setembro de 1999 é distribuído o Beta 1 do SQL Server 2000 (versão 8.0 de codinome Shiloh), o Beta 2 foi lançado em abril de 2000 e em agosto a versão final do Microsoft SQL Server 2000.

Em novembro de 2005 é lançado ao público o SQL Server 2005 (codinome Yukon).

O SQL server hoje

Atualemten lançou a versão final do Microsoft SQL Server 2008 (codinome Katmai) foi lançada em agosto de 2008, entre as novidades estão funções para compressão de dados, suporte a informações geo-espaciais e gerenciamento baseado em políticas, além de novas opções de relatórios e serviços de análise.

O MS SQL Server é um SGBD - sistema gerenciador de Banco de dados relacional criado pela Microsoft. Com a nova versão o Microsoft SQL Server 2008 é fornecida uma plataforma de dados confiável, produtiva e inteligente que permite que você execute suas aplicações de missão crítica mais exigentes, reduza o tempo e o custo com o desenvolvimento e o gerenciamento de aplicações e entregue percepção que se traduz em ações estratégicas em toda sua organização.O SQL É um Banco de dados robusto e usado por sistemas corporativos dos mais diversos portes. O Microsoft SQL Server 2008 fornece uma plataforma confiável de dados que permite que a execução de aplicações de missão crítica mais exigentes.

Pessoas têm ilhas de dados em suas organizações, e precisam de uma plataforma que forneça a 'malha' que realmente una tudo e as tornem mais valiosas que a soma de suas partes. É disso que se trata o SQL Server 2008.”

Algumas funções do SQL Server:

Trigger
Stored procedure
SQL User Function
Extended Stored Procedure

Bom é isso ai o site oficial SQL Server.

 Copyright © 2008-2010 All Right Reserved - Todos os Direitos Reservados Elder Stroparo