Quando você conectar a um servidor MySQL, você normalmente deve usar uma senha. A senha não é transmitida em texto puro sobre a conexão, porém o algorítimo de criptografica não é muito forte e com algum esforço um atacante engenhoso pode quebrar a senha se ele conseguir capturar o tráfego entre o cliente e o servidor. Se a conexão entre o cliente e o servidor passar por uma rede não confiável, você deve usar um tunnel SSH para criptografar a comunicação.
Todas outras informações são transferidas como texto que
podem ser lido por qualquer um que consiga ver a conexão. Se
você se preocupa com isto, você pode usar o protocol de
compressão (No MySQL versão 3.22 e superiores) para tornar o
tráfico muito mais dificil de decifrar. Para deixar tudo ainda
mais seguro você deve usar ssh
. Você pode
encontrar um cliente ssh
open source em
http://www.openssh.org,
e um cliente ssh
comercial em
http://www.ssh.com. Com
isto, você pode obter uma conexão TCP/IP critografada entre um
servidor MySQL e um cliente MySQL.
Se você estiver usando o MySQL 4.0, você também pode usar o suporte interno OpenSSL See Secção 4.4.10, “Usando Conexões Seguras”.
Para deixar um sistema MySQL seguro, você deve considerar as seguintes sugestões:
Utilize senhas para todos os usuários MySQL. Lembre-se que
qualquer um pode logar como qualquer outra pessoa
simplesmente com mysql -u outro_usuário
nome_bd
se outro_usuário
não
tiver senha. Isto é um procedimento comum com aplicações
cliente/servidor que o cliente pode especificar qualquer
nome de usuário. Você pode alterar a senha de todos seus
usuários editando o script
mysql_install_db
antes de executá-lo ou
somente a senha para o usuário root
do
MySQL desta forma:
shell>mysql -u root mysql
mysql>UPDATE user SET Password=PASSWORD('nova_senha')
->WHERE user='root';
mysql>FLUSH PRIVILEGES;
Não execute o daemon do MySQL como o usuário
root
do Unix. Isto é muito perigoso,
porque qualquer usuário com privilégios
FILE
estará apto a criar arquivos como o
root
(por exemplo,
~root/.bashrc
). Para prevenir esta
situação, mysqld
irá recusar a
execução como root
a menos que ele seja
especificado diretamente usando a opção
--user=root
.
O mysqld
pode ser executado como um
usuário normal sem privilégios. Você pode também criar
um novo usuário Unix mysql
para tornar
tudo mais seguro. Se você executar o
mysqld
como outro usuário Unix, você
não precisará alterar o usuário root
na tabela user
, porque nomes de usuário
do MySQL não tem nada a ver com nomes de usuários Unix.
Para iniciar o mysqld
como outro usuário
Unix, adicione uma linha user
que
especifica o nome de usuário para o grupo
[mysqld]
do arquivo de opções
/etc/my.cnf
ou o arquivo de opções
my.cnf
no diretório de dados do
servidor. Por exemplo:
[mysqld] user=mysql
Estas opções configuram o servidor para iniciar como o
usuário designado quando você o inicia manualmente ou
usando mysqld_safe
ou
mysql.server
. Para maiores detalhes, veja
Secção A.3.2, “Como Executar o MySQL Como Um Usuário Normal”.
Não suportar links simbólicos para tabelas (Isto pode ser
desabilitado com a opção --skip-symlink
.
Isto é muito importante caso você execute o
mysqld
como root, assim qualquer um que
tenha acesso à escrita aos dados do diretório do mysqld
podem apagar qualquer arquivo no sistema! See
Secção 5.6.1.2, “Utilizando Links Simbólicos para Tabelas”.
Verfique se o usuário Unix que executa o
mysqld
é o único usuário com
privilégios de leitura/escrita nos diretórios de bancos de
dados.
Não forneça o privilégio
PROCESS para todos os
usuários. A saída de mysqladmin
processlits
mostra as consultas atualmente em
execução, portanto qualquer usuário que consiga executar
este comando deve ser apto a ver se outro usuário entra com
uma consulta do tipo UPDATE user SET
password=PASSWORD('não_seguro')
.
O mysqld
reserva uma conexão extra para
usuários que tenham o privilégio
process, portanto o
usuário root
do MySQL pode logar e
verificar a atividade do servidor mesmo se todas as
conexões normais estiverem em uso.
Não conceda o privilégio
FILE a todos os usuários.
Qualquer usuário que possua este privilégio pode gravar um
arquivo em qualquer lugar no sistema de arquivos com os
privilégios do daemon mysqld
! Para
tornar isto um pouco mais seguro, todos os arquivos gerados
com SELECT ... INTO OUTFILE
são lidos
por todos, e não se pode sobrescrever arquivos existentes.
O privilégio FILE pode
também ser usado para ler qualquer arquivo acessível para
o usuário Unix com o qual o servidor está sendo executado.
Pode ocorrer abusos como, por exemplo, usar LOAD
DATA
para carregar o arquivo
/etc/passwd
em uma tabela, que pode
então ser lido com SELECT
.
Se você não confia em seu DNS, você deve utilizar números IP no lugar de nomes de máquinas nas tabelas de permissão. De qualquer forma, você deve ter muito cuidado ao criar entradas de concessão utilizando valores de nomes de máquinas que contenham metacaractes!
Se você deseja restrigir o número de conexões para um
único usuário, você pode faze-lo configurando a variável
max_user_connections
no
mysqld
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.