1
2
|
[mysqld] bind-address=127.0.0.1 |
Si por el contrario queremos deshabilitar por completo el acceso mediante un socket de red, basta con añadir la directiva skip-network:
1
2
|
[mysqld] skip-networking |
Por último, si se ha de utilizar el servicio en remoto, todos los usuarios de las aplicaciones que conecten deben estar limitados mediante su dirección de origen (host). Desde el prompt de mysql:
1
|
mysql> GRANT SELECT , INSERT ON basededatos.* TO 'usuario' @ 'host' ; |
Para ver los privilegios de un usuario:
1
|
mysql> SHOW GRANTS FOR 'usuario' @ 'host' ; |
Para eliminar privilegios:
1
|
mysql> REVOKE ALL PRIVILEGES , GRANT OPTION FROM usuario; |
3.- Deshabilitar el uso de LOCAL INFILE: mediante estos permisos se pueden leer ficheros del sistema operativo desde la base de datos, algo común cuando se explota una inyección de código SQL. Para deshabilitar esta función se configura la variable local-infile a 0:
En MySQL anterior a 5.5
1
2
|
[mysqld] set -variable= local -infile=0 |
Para MySQL 5.1 o superior:
1
2
|
[mysqld] local -infile=0 |
4.- Cambio de nombre de usuario root y su contraseña: al igual que en los sistemas operativos, se recomienda que el administrador de la base de datos no sea el usuario root y mantenga una contraseña segura. Si MySQL es una versión superior a 5.0.2
1
|
mysql> RENAME USER root TO r00tz |
En caso de que la versión de MySQL sea inferior:
1
2
3
|
mysql> use mysql; mysql> update user set user = "nuevousuario" where user = "root" ; mysql> flush privileges ; |
Para modificar la contraseña de un usuario se puede utilizar el comando mysqladmin o se puede hacer mediante SQL:
1
2
|
mysql> use mysql; mysql> SET PASSWORD FOR 'username' @ '%hostname' = PASSWORD ( 'newpass' ); |
5.- Eliminar la base de datos «test»: que se distribuye con el servicio y no es necesaria. Para hacerlo directamente en SQL:
1
|
mysql> drop database test; |
O mediante línea de comandos:
1
|
shell> mysqladmin -u username -p drop test |
6.- Eliminación de cuentas obsoletas y acceso anónimo: que son creadas en algunas instalaciones de MySQL, para comprobar si existen este tipo de usuarios:
1
|
mysql> select * from mysql. user where user = "" ; |
Si se muestran usuarios, se pueden eliminar mediante DROP USER (en MySQL 5)
1
|
mysql> DROP USER "" ; |
Si la versión de MySQL es inferior a 5.0:
1
2
3
|
mysql> use mysql; mysql> DELETE FROM user WHERE user = "" ; mysql> flush privileges ; |
Referencias:
- http://www.greensql.net/publications/mysql-security-best-practices
- http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html
- http://dev.mysql.com/doc/refman/5.0/en/security-guidelines.html
- http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-ssl.html
- http://dev.mysql.com/doc/refman/5.1/en/program-variables.html