sexta-feira, 3 de junho de 2011

SQL - Inserir, alterar e excluir

Inserir, alterar e excluir dados com insert into, update e delete

Em SQL as instruções DML (Data Manipulation Language) são usadas para manipulação de dados e consiste nas operações de inserir dados (insert into), alterar dados (update) e excluir dados (delete). Inserir, alterar e excluir dados são consideradas operações essenciais e de grande aplicação nas operações com banco de dados.

insert into, update e delete são comandos da linguagem SQL e não dos bancos de dados, como o Oracle, SQL Server, Access ou MySQL. Isto significa que o aprendizado destes comandos tem enorme abrangência, pois você poderá usá-los em qulaquer banco de dados relacional, como os bancos acima citados.

Inserir dados com insert into

Para inserir linhas em uma tabela usamos o comando INSERT. Este comando faz parte das instruções DML (Data Manipulation Language) ou Linguagem de manipulação de dados.

Exemplo 1: Insert into em SQL Server e Access

INSERT INTO empregados(nome, data_nascimento, salario, cidade, estado)
VALUES('José','05/14/1965',1000,'Brasilia','DF')

Este mesmo exemplo deve ser tratado de forma diferente para o MySQL, pois o formato de data que ele opera é diferente do SQL Server. Veja como fica o mesmo exemplo para o banco MySQL.

Exemplo 1: Insert into em MySQL

INSERT INTO empregados(nome, data_nascimento, salario, cidade, estado)
VALUES('José','1965-15-14',1000,'Brasilia','DF')

No caso da coluna codigo_empregado nós não podemos usar o insert para tentar inserir um valor nesta coluna, pois a mesma foi criada com o argumento Identity, que faz a geração automática dos valores desta coluna.

Observe que as colunas do tipo texto (nome, cidade e estado) e a coluna do tipo data (data_nascimento) recebem os valores entre (aspas simples ou apóstrofo), porém, na coluna numérica (salário) o valor foi passado sem o uso de aspas simples.

No caso do MySQL a data tem o formado de ano, mês e dia.

Exemplo 2: SQL Server e Access

INSERT INTO empregados(nome, data_nascimento)
VALUES('João','12/15/1960')

Lembrando que o MySQL trata a data no formato ano-mes-dia, portanto devemos fazer esta alteração. Veja o mesmo exemplo para MySQL.

INSERT INTO empregados(nome, data_nascimento)
VALUES('João','1960-12-15')

Observe que não usamos todas as colunas da tabela empregados criada anteriormente, ou seja, você pode fazer um insert em apenas algumas colunas. Neste caso as demais colunas irão receber valores nulos.

Exemplo 3: SQL Server

INSERT INTO empregados(nome, data_nascimento, salario)
VALUES('Maria','22/06/1954',1420,52)

Em MySQL o exemplo fica assim:

INSERT INTO empregados(nome, data_nascimento, salario)
VALUES('Maria','1954-06-22',1420,52)

O exemplo acima causou um erro porque houve excesso de valores, ou seja, perceba que o valor 1420,52 tem uma vírgula e isto fez com que o banco de dados entendesse como sendo dois valores. Neste caso a vírgula deverá ser substituido por ponto, ao invés de usar 1420,52, use 1420.52.

Alterar dados com update

Para alterar linhas em uma tabela usamos o comando UPDATE. Este comando faz parte das instruções DML (Data Manipulation Language) ou Linguagem de manipulação de dados.

UPDATE empregados set nome='João da Silva',cidade='São Paulo' where codigo_empregado=2

No exemplo acima, alteramos o nome para João e a cidade para São Paulo, mas é importante observar que esta alteração só irá ocorrer onde o código do empregado for igual a 2.

A cláusula where é usada para criar um filtro, ou seja, para determinar quais as linhas serão afetadas.

CUIDADO: Se você não especificar a cláusula where as modificações serão aplicadas em todas as linhas da tabela.

Excluir dados com delete

Para excluir linhas em uma tabela usamos o comando DELETE. Este comando faz parte das instruções DML (Data Manipulation Language) ou Linguagem de manipulação de dados.

DELETE FROM empregados where codigo_empregado=1

CUIDADO: Se você não especificar a cláusula where todas as linhas da tabela serão excluídas.

No exemplo acima, será excluído a linha em que o código do empregado for igual a 1

A cláusula where é usada para criar um filtro, ou seja, para determinar quais as linhas serão afetadas.

Para excluir todas as linhas de uma tabela use o comando Delete como no exemplo a seguir:

DELETE FROM empregados
_________________________
Créditos deste artigo para: http://www.luis.blog.br


segunda-feira, 30 de maio de 2011

instalação de Firewall com Iptables utilizando Layer7

Introdução

O projeto Layer7 é um patch que permite ao Netfilter tratar a camada de aplicação. Em nosso caso, foi instalado especificamente para controlar MSN e transferência de arquivos pelo MSN. Porém ele trata muitos outros protocolos. Para conhecê-los melhor, basta acessar o link:
Existem diversos tutoriais na internet que tratam sobre esta instalação de Layer7 com Iptables, porém devido a atualização de versões, entre outros fatores, sempre é bom fazer uma revisão atualizando os dados e melhorando em alguns pontos. Este artigo tem por objetivo esta revisão. Toda e qualquer sugestão de melhoria é bem vinda.

Procedimentos de instalação

Caso queira baixar todos os pacotes necessários antes de iniciar, seguem os links diretos para download:
1. Instalar pacotes necessários (caso falte alguma dependência, basta instalar ou se preferir faça a instalação dos pacotes abaixo usando o aptitude):

# apt-get install libncurses5-dev kernel-package gcc

2. Criar diretório para armazenar pacotes:

# mkdir /opt/layer7
# cd /opt/layer7


3. Baixar e descompactar o pacote do projeto Layer7 (utilizei a versão 2.21):

# wget -c http://downloads.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.21/netfilter-layer7-v2.21.tar.gz?use_mirror=ufpr&ts=1278937632
# tar zxvf netfilter-layer7-v2.21.tar.gz

4. Baixar e descompactar o fonte do Kernel (utilizei a versão 2.6.25.2):

# cd /root/
# wget -c
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.2.tar.bz2
# cd /usr/src
# tar jxvf /root/linux-2.6.25.2.tar.bz2


5. Aplicar o patch do Layer7 no novo kernel:

# cd /usr/src/linux-2.6.25.2
# patch -p1 < /opt/layer7/netfilter-layer7.v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch


6. Aproveitar configuração do kernel atual:

Caso queira usar as configurações do kernel atual no novo kernel, utilize os comandos abaixo. Provavelmente será necessário responder várias perguntas referentes a novos itens inclusos no novo kernel e que não existiam no atual. Para estas perguntas, caso não saiba as respostas, pressione então de fora a fora, pois depois você poderá rever as opções na próxima etapa).

# cp /boot/config-2.6[pressione o tab] /.config
# make oldconfig


7. Configurar o novo kernel:

# make menuconfig

Acesse os submenus como segue:

Networking
Networking options
Network packet filtering framework (netfilter)
Core Netfilter Configuration

Marque os módulos referentes ao Layer 7 (na dúvida marque todos os módulos). Volte 1 nível e entre no submenu:

IP: Netfilter Configuration

Marque o módulo "IPv4 connection tracking support (required for NAT)".
Marque o módulo "Full NAT" e demais sub-itens desse módulo.

Obs.: Em caso de instalar sem utilizar a configuração de kernel anterior, convém dar uma passada em todo o submenu de Networking afim de verificar se opções referentes a bridge, nat e afins estejam selecionadas.

Terminado, salve e saia.

8. Compilar o novo kernel e criar um pacote .deb do mesmo:

# make-kpkg -initrd kernel_image

Obs.: Caso esteja fazendo a atualização de um servidor remoto, por questões de segurança convém deixar este processamento em segundo plano.

# make-kpkg -initrd kernel_image &

Saia para tomar um merecido café, pois esta etapa demora um tempo considerável.

Obs.: A instalação manual também pode ser realizada, mas como se trata de Debian, não precisamos ficar "reiventando a roda", vamos gerar o pacote e deixar o dpkg fazer o resto. Mas caso queira fazer manualmente também funciona.

9. Instalar o novo kernel:

# dpkg -i ../linux-image-2.6.25[pressione TAB].deb

10. Reiniciar a máquina com o novo kernel:

# shutdown -r now

Obs.: Caso aconteça algum erro, dê boot com o kernel antigo e então remova este novo kernel para fazer melhorias.

# apt-get remove --purge linux-image-2.6.25.2

(para ver o nome correto do pacote faça: dpkg -l | grep linux-image)

11. Baixar o Iptables (utilizei a versão 1.4.0, pois as posteriores não obtive sucesso):

# cd /opt/layer7
# wget -c
http://www.netfilter.org/projects/iptables/files/iptables-1.4.0.tar.bz2

12. Descompactar o fonte e aplicar o patch:

# cd /opt/layer7
# tar jxvf iptables-1.4.0.tar.bz2
# cd iptables-1.4.0
# patch -p1 < /opt/layer7/netfilter-layer7-v2.1/iptables-1.4-for-kernel-2.6.20forward-layer7-2.21.patch
# chmod 755 extension/.layer7-test


13. Remover o Iptables antigo e instalar a nova versão:

# aptitude purge iptables
# make KERNEL_DIR=/usr/src/linux-2.6.25 BINDIR=/sbin LIBDIR=/lib
# make install KERNEL_DIR=/usr/src/linux-2.6.25 BINDIR=/sbin LIBDIR=/lib


Verificar se tudo correu bem:

# iptables -n -L
# iptables -n -L -t nat
# ls -l /lib/iptables/*layer7*


14. Baixar e instalar os pacotes de protocolos do Layer7:

# cd /opt/layer7
# wget -c
http://downloads.sourceforge.net/project/l7-filter/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz?use_mirror=ufpr&ts=1278938145
# tar zxvf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install
# ls /etc/l7-protocols/protocols


Dicas importantes a respeito do Layer7

Dica 1: Caso você já tenha o Layer7 funcionando e necessite apenas atualizar os protocolos suportados, basta fazer apenas o item 14, observando é claro o nome do novo arquivo de protocolos. O que acontece é apenas copiar os novos pacotes de protocolos em cima dos antigos. Então convém fazer um backup dos arquivos dos protocolos antigos.

Dica 2: Nem sempre todos os pacotes mais recentes envolvidos funcionam plenamente em conjunto, então observe as versões de kernel, iptables e layer7 compatíveis antes fazer as compilações.

_______________________________________________
CRÉDITOS PARA: Dorival Junior (http://www.vivaolinux.com.br/~dorivaljunior)