Posts Taggedmysql

MySQL – Comparação de nomes de tabelas

Essa semana estava publicando um banco de dados em ambiente de produção ( ambiente meio que completamente diferente do ambiente de desenvolvimento :S … mas tudo bem ) e o restore insistia em retornar uma mensagem de erro ao tentar inserir os registros pois não encontrava a tabela que tinha acabado de criar. Isso estava acontecendo pq em produção o nome da tabela estava em lower case e no script em upper case. Nunca prestei atenção nessa característica do mysql, pra mim era case insensitive … mas pelo visto não é :) – contra fatos, não há argumentos já dizia Bento XVI.

Procurando no pai dos burros, descobri que a solução é bem simples, basta definir a variável lower_case_table_names no my.cnf/my.ini … na seção mysqld.

Os valores possíveis são:

  • 0 (Zero) – Os nomes são armazenados na forma original, como informado no comando CREATE e a comparação é case sensitive.
  • 1 (Um) – Os nomes são armazenados em lower case e a comparação é case insensitive.
  • 2 (Dois) – Os nomes são armazenados na forma original, como informado no comando CREATE e a comparação é case insensitive – Essa forma funciona apenas em sistemas case insensitive.

Em meu caso eu tinha um servidor de desenvolvimento Linux e produção Windows Server (tudo a ver heheheh) e usei em ambos a opção 1. Ficando assim:

[mysqld]

lower_case_table_names = 1

Maiores detalhes: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

Abraços

Add comment Agosto 20, 2009

Perl + DBI + MySQL

Essa semana precisei criar alguns scripts de migração e estatística de dados em bases MySQL. Esse tipo de problema é bem a area do Perl e Python. Ambos tem uma boa performance em tratamento de dados principalmente arquivos.

Vou tentar explicar como instalar os recursos necessários para fazer uma aplicação em Perl que possa manipular bases de dados em MySQL.

DBI

O DBI é uma interface de acesso e manipulação de dados. Funciona como uma camada entre o script perl e o driver especifico de um SGBD. Com o DBI não é necessário saber a API  de cada SGBD ( Oracle, MySQL, PostgreSQL, etc ). Quando um métido da interface é invocado, a ação é transferida para o driver especifico de forma transparente para o usuário final.

Vamo fazer o troço funcionar.

INGREDIENTES

  • Internet
  • Perl ou ActivePerl ( Caso seja usuário Windows )
  • Teclado

INSTALANDO

Vá até o shell ou prompt de comando e digite:

ppm install DBI

ppm install DBD-mysql

Pronto, agora é só incluir o modulo DBI e já está pronto para usar.

use strict;
use warnings;
use DBI;

my $conexao = DBI->connect('DBI:mysql:database=meu_banco;host=servidor;port=3306','usuario','senha');

É isso ai … a documentação está aqui: http://search.cpan.org/~timb/DBI/DBI.pm
divirtam-se!

Add comment Maio 23, 2009

Vagas de Emprego – Exterior

Web Application Developer
Ice Water Media, Austin, TX (Mopac )

Company Background
Ice Water Media is a growing marketing firm with over 7 years in business. Our focus is on technology and websites developed for lead generation. We currently own 50 active website properties and several software systems that we have built from the ground up.

Job Description
Because of our growth, we need another web application developer to join our team. The position will work directly under our CTO, who has over 17 years of development experience. Responsibilities include development of new features, fixing bugs in existing software, refactoring the existing code base to improve clarity and purpose, and testing software changes thoroughly while following the development standards and methodology of the company. You should have experience writing software that is easily maintainable by other developers and scalable by the systems administration team. All of our employees are expected to continually improve their skills through reading, training and experimentation.

Leia mais

 PHP / CakePHP Web developer
Confidential, Toronto, Canada

Leading direct response company seeks advanced PHP / MySQL Web
Developer, with at least three years experience in the E-Commerce
arena.

Experience in PHP, CakePHP, T-SQL and OOP is mandatory. The job
involves design and development of an e-commerce back-end system.

The successful candidate will be a likable individual who is
energetic, assertive, motivated, self-starter with exceptional IT
skills.

Leia mais 

PHP Software Engineer
Shutterstock, New York, NY

Shutterstock.com is looking for a PHP software engineer to join our tech team. We’re looking for experienced PHP programmers who can get complicated projects done quickly and independently. You should have a keen interest in and enthusiasm for high-traffic web sites and all the excitement they offer: optimization, load balancing, redundancy, fail over, tiered architectures, etc.

Applicants should be local to the New York area.

Required Skills:

At least 3 years experience with:

* PHP
* HTML / CSS / Javascript
* MySQL
* Linux

Optional Skills 

* AJAX
* layout / design
* other languages (bash, C, etc.)
* Apache
* MySQL replication and optimization

Leia mais 

PHP Programmer
Global Personals, LLC, Manhattan, NY

Changing the World Through Online Dating

Global Personals LLC is focused on the design and implementation of effective online dating communities. Since 2003, we have been creating cutting-edge communication tools that enable millions of members to quickly and easily spice up their lives! With over 12,000,000 member profiles and growing, our portfolio of top-notch free and paid subscription sites (WebDate.com, WealthyMen.com, and Fling.com) continue to redefine the ways that people communicate and meet online. Interested in a casual, fun, and exciting work environment? We have offices in Miami Beach, New York, Baltimore, Los Angeles and San Francisco. Please check out our most recent job postings.

Job Description:
– Looking for a true PHP expert that loves to hack code in several languages and has fun doing it.
– Design, develop, maintain and optimize secure and scalable multi-tier web applications.
– Strong knowledge of PHP, Perl, JavaScript, UNIX shell, SQL, HTML, CSS, XML.
– Comfortable with both object oriented and procedural programming methodologies.
– Experience with PHP5 and MySQL5 preferable.
– Experience with C, C++, Java, Python, and other languages a plus.
– Knowledge installing, configuring and maintaining Linux, Apache, MySQL and PHP packages.
– Strong knowledge of stored procedures, triggers, indexes, table normalization and database design.
– Familiarity with Zeus Web Server a big plus.
– Knowledge of AJAX development a plus.
– Comfortable hacking and compiling Linux software packages.
– Strong understanding of software development life-cycle and best practices.
– Proficiency in working and developing on Linux (any flavor – debian, redhat, ubuntu, slackware etc.
-Proficiency with Flash/Actionscript

Leia mais

Add comment Maio 2, 2009

Oracle compra Sun por US$ 7,4 bilhões

A Oracle comprou a desenvolvedora do Java e fabricante de servidores para empresas Sun Microsystems por 7,4 bilhões de dólares, impulsionando a desenvolvedora de softwares corporativos no setor de hardware.

A Oracle, que está no mercado de banco de dados e de aplicações comerciais (conhecidas pela sigla ERP), pagará 9,5 dólares por ação em dinheiro para a Sun, de acordo com a Oracle, aumento de 42% em relação ao preço do seu fechamento na sexta-feira (17/04).

http://idgnow.uol.com.br/mercado/2009/04/20/oracle-compra-sun-por-us-7-4-bilhoes/

Add comment Abril 21, 2009

Evitando SQL Injection com PHP

SQL injection é uma técnica de introduzir (injetar) instruções SQL em entradas de usuário – entenda entradas de usuário como qualquer variável que possa ser manipulada pelo mesmo como variáveis POST e GET.

Como funciona na prática

$query = " SELECT * FROM USUARIOS WHERE login = ";
$query.= " '{$_POST['login']}' AND senha = '{$_POST['senha']}' ";

$res = mysql_query($query);

if( mysql_num_rows($res) ) {
    echo "Login efetuado com sucesso!";
}else{
    echo "Login e/ou senha incorreto(s)";
}

No código acima, caso o usuário informa no campo login a entrada: blablabla’ or 0=0 – e qualquer valor no campo senha o resultado da query será:
SELECT * FROM USUARIOS WHERE login = ‘blablabla’ or 0=0 –’ AND senha = ’senhainvalida’;
A mágica está no trecho ‘ or 0=0 – que faz com que seja listado todo conteúdo da tabela USUARIOS já que a consulta busca os usuários cujo o login seja ‘blablabla’ ou que zero seja igual a zero. Zero sempre será igual a zero e assim todo conteúdo é retornado. Mas e a senha? A senha é ignorada já que após a comparação é adicionado o caracter de comentário e tudo a partir dali é ignorado :) .

Outro problema nesse código é a forma como o usuário é válidado.

if( mysql_num_rows($res) ) {
    echo "Login efetuado com sucesso!";
}else{
    echo "Login e/ou senha incorreto(s)";
}

A instrução checa apenas se alguma linha foi retornada na consulta. Como vimos antes, todo conteúdo da tabela USUARIOS é retornado e o primeiro usuário retornado na consulta é que será o felizardo a contemplar o invasor com seus dados.

Proteger-se com mysql_real_scape_string() e addslashes()

Essa é a forma mais básica e simples de contornar o problema. Basta chamar uma das duas funções para “escapar” a entrada do usuário.

$_POST['login'] = addslashes($_POST['login']);
$_POST['senha'] = addslashes($_POST['senha']);

$query = " SELECT * FROM USUARIOS WHERE login = '{$_POST['login']}'";
$query.= " AND senha = '{$_POST['senha']}' ";

Ou

$_POST['login'] = mysql_real_escape_string($_POST['login']);
$_POST['senha'] = mysql_real_escape_string($_POST['senha']);

$query = " SELECT * FROM USUARIOS WHERE login = '{$_POST['login']}'";
$query.= " AND senha = '{$_POST['senha']}' ";

As funções irão adicionar um slash (“\”) na aspa simples.
SELECT * FROM USUARIOS WHERE login = ‘blablabla\’ or 0=0 –’ AND senha = ’senhainvalida’;
Todo conteúdo entre aspa simples será interpretado como esperado, como um login de usuário.
Se magic_quotes_gpc estiver ativo no PHP (que é configuração padrão) o escape de cookies, post e get é feito automáticamente.

Usando Prepared Statement

Prepared statement automaticamente faz o escape nos valores de entrada e ajustam corretamente o tipo de dado.

$conexao = new mysqli('localhost','usuario','senha','banco');

$stm = $conexao->prepare("SELECT * FROM USUARIOS WHERE login = ? AND senha = ?");
$stm->bind_param("ss", $_POST['login'], $_POST['senha']);
$stm->execute();

if( $stm->affected_rows ){
    echo "Login efetuado com sucesso!";
}else{
    echo "Login e/ou senha incorreto(s)";
}
$stm->close();

Boas práticas

  • O usuário de acesso ao banco deve ter seu acesso limitado em nível de acesso e à objetos que ele realmente precisa.
  • Use senhas criptografadas
  • Não confie em nenhuma entrada de usuário
  • Evite validar o usuário através do número de linhas que retorna da consulta

Evite o código abaixo:

if( $stm->affected_rows ) {
    echo "Usuário autenticado com sucesso!";
}

Use a forma a seguir:

$conexao = new mysqli('localhost','usuario','senha','banco');

$stm = $conexao->prepare("SELECT senha FROM USUARIOS WHERE login = ?");
$stm->bind_param("s", $_POST['login']);
$stm->execute();

$senha = "";
$stm->bind_result($senha);
if( $stm->fetch() ){
   if( $senha == crypt($_POST['senha'],"td") ){
       echo "Usuário autenticado com sucesso!";
       exit();
   }
}
echo "Usuário e/ou senha inválidos";

$stm->close();

Até o próximo post

Add comment Abril 21, 2009


 

Dezembro 2009
S T Q Q S S D
« Out    
 123456
78910111213
14151617181920
21222324252627
28293031  

Arquivos

Tópicos recentes

Tags

Addfont apache Aplicações audio bash Carreira desabilitado desativado Desktop diminuir Documento emprego Encoding Firefox FPDF Gerenciador Google GTK+ HDA iconv iReport Jasper jasperserver Java Linux MakeFont mudo mysql Partição PDF Perl PHP postgres procedure redimensionar Relatorio script shell shrink SLACKWARE som ttf2pt1 vaga Vista Windows

Categorias

Blogroll