Encontranos en redes
MySQLPostgreSQLBase de datos5 min de lectura
Asegurar bases de datos MySQL/PostgreSQL
Bind a localhost, contraseñas fuertes, privilegios mínimos, conexiones cifradas y backups encriptados.
Principios de seguridad para bases de datos
- Mínimo privilegio: cada usuario solo accede a lo que necesita
- Bind a localhost: no exponer al mundo
- Contraseñas fuertes y únicas
- Conexiones cifradas cuando sea posible
- Backups regulares y encriptados
MySQL: Configuración segura
Ejecutar mysql_secure_installation
bash
sudo mysql_secure_installationEsto permite:
- Configurar contraseña de root
- Eliminar usuarios anónimos
- Deshabilitar login remoto de root
- Eliminar base de datos de test
Bind a localhost
Editá /etc/mysql/mysql.conf.d/mysqld.cnf:
ini
[mysqld]
bind-address = 127.0.0.1bash
sudo systemctl restart mysqlCrear usuarios con privilegios mínimos
sql
-- Crear usuario para una app específica
CREATE USER 'miapp'@'localhost' IDENTIFIED BY 'ContraseñaFuerte123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON miapp_db.* TO 'miapp'@'localhost';
FLUSH PRIVILEGES;
-- Nunca usar GRANT ALL a menos que sea estrictamente necesarioEliminar bases y usuarios de test
sql
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;PostgreSQL: Configuración segura
Configurar autenticación
Editá /etc/postgresql/16/main/pg_hba.conf:
terminal
# Solo conexiones locales con contraseña
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256Bind a localhost
Editá /etc/postgresql/16/main/postgresql.conf:
terminal
listen_addresses = 'localhost'bash
sudo systemctl restart postgresqlCrear roles con privilegios mínimos
sql
-- Crear rol para la aplicación
CREATE ROLE miapp WITH LOGIN PASSWORD 'ContraseñaFuerte123!';
GRANT CONNECT ON DATABASE miapp_db TO miapp;
GRANT USAGE ON SCHEMA public TO miapp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO miapp;Conexiones cifradas (SSL)
MySQL con SSL
sql
-- Verificar estado SSL
SHOW VARIABLES LIKE '%ssl%';
-- Forzar SSL para un usuario
ALTER USER 'miapp'@'%' REQUIRE SSL;PostgreSQL con SSL
En postgresql.conf:
terminal
ssl = on
ssl_cert_file = '/etc/ssl/certs/server.crt'
ssl_key_file = '/etc/ssl/private/server.key'Backups encriptados
bash
# MySQL: backup cifrado con gpg
mysqldump -u root -p miapp_db | gpg --symmetric --cipher-algo AES256 -o backup_$(date +%Y%m%d).sql.gpg
# PostgreSQL: backup cifrado
pg_dump miapp_db | gpg --symmetric --cipher-algo AES256 -o backup_$(date +%Y%m%d).sql.gpg
# Restaurar
gpg -d backup_20260115.sql.gpg | mysql -u root -p miapp_dbRecomendaciones
- Nunca expongas el puerto de la base de datos a internet
- Si necesitás acceso remoto, usá un túnel SSH
- Rotá contraseñas de base de datos cada 3-6 meses
- Monitoreá queries lentas y conexiones activas
- Mantené la base de datos actualizada con parches de seguridad
¿Te resultó útil esta guía?