En este artículo expongo mis notas sobre como poner en marcha y gestionar cuestiones básicas de MariaDB sobre Debian Trixie.
MaríaDB es una base de datos de tipo relacional. El proyecto surge de un fork de MySQL, luego la adquisición de Sun Microsystems por parte de Oracle Corporation. Por temor a que el código pase a ser cerrado, se realizó un fork de MysQL y el proyecto de código abierto pasó a llamarse MariaDB. Si alguna vez trabajaste con MySQL, podés hacerlo sin problemas con MariaDB.
En Debian, 3 paquetes son necesarios. El paquete 'dev' de MariaDB sólo lo reservamos en caso de que debamos realizar compilaciones dependientes.
Para instalar MariaDB:
sudo apt install mariadb-server mariadb-client mariadb-backup
Luego habilitamos el servicio y lo iniciamos.
sudo systemctl enable mariadb
sudo systemctl start mariadb
No es necesario crear usuario y contraseña, ya que MariaDB usa unix socks, por lo que el usuario root puede entrar a la consola de MariaDB sin más credenciales que su condición de administrador.
sudo mariadb -u root -p
De cualquier manera, es posible establecer un password para root, pero en ese caso el mismísmo usuario root deberá proveerlo para iniciar sesión.
ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
Considero que esto es innecesario, ya que el usuario root es quien puede realizar todas las operaciones sobre el servicio. A mi entender, si pretendo gestionar todas las bases con un único usuario, parece más razonable crear un usuario específico para tal fin con los privilegios establecidos para cada base de datos, y reservar el root sólo para casos de emergencia o para gestiones en un nivel superior.
Primero, eliminamos cualquier usuario 'anónimo' que se haya creado al instalar la base de datos:
DELETE FROM mysql.user WHERE User='';
De manera secundaria, borramos todas entradas que permitan el acceso de root desde el exterior:
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
Potencialmente puden existir tablas de pruebas. En ese caso las eliminamos:
DROP DATABASE IF EXISTS test;
Todos estos cambios en las tablas de sistema no serán aplicados, a menos que le indiquemos hacerlo. Por eso cada vez que modificamos elementos del sistema, al finalizar debemos decirle que cometa los cambios almacenados en la memoria en el disco:
FLUSH PRIVILEGES;
Hasta aqui hemos puesto a punto el servidor MariaDB de manera mínima como para comenzar a trabajar.
CREATE DATABASE IF NOT EXISTS <nombre de base de datos>;
En el siguiente comando, el usuario puede acceder desde cualquier ubicación (no sólo local). Para limitarlo localmente debería cambiar '%' por 'localhost' (o la ubicación desde dónde quiero permitir su acceso).
CREATE USER '<nombre de usuario>'@'%' IDENTIFIED BY '<contraseña>';
SHOW GRANTS FOR '<nombre de usuario>'@'%';
Con esta sentencia se debe tener particular cuidado, ya que crea otro 'superusuario' en la tabla, con los mismos privilegios y capaz de modificar al usuario root. La finalidad de esto, habiendo impedido el acceso remoto a root, es tener un usuario con todos los privilegios, pero desconocido para los atacantes.
GRANT ALL PRIVILEGES ON *.* TO `<usuario>`@`%` IDENTIFIED BY '<password>' WITH GRANT OPTION
Esto es lo ideal, ya que el usuario podrá unicamente trabajar con una base de datos específicamente.
Para otorgar acceso local únicamente:
GRANT ALL PRIVILEGES ON <base de datos>.* TO '<usuario>'@'localhost' IDENTIFIED BY '<password>';
Puedo cambiar 'localhost' por: '%', entonces el usuario tendrá acceso desde cualquier parte:
GRANT ALL PRIVILEGES ON <base de datos>.* TO '<usuario>'@'%' IDENTIFIED BY '<password>';
Si se activan binlogs, el servidor almacenará un log de las operaciones de escritura en las bases. Esto permite restaruar hasta el punto exacto en el cual se produjo un incidente. Para eso, deberemos editar el archivo:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Alli, en el apartado [mariadbd] deberemos activar algunas opciones:
[mariadbd]
...
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 5
max_binlog_size = 100M
binlog_format = ROW
...
Dónde:
Luego se deberá crear el directorio de almacenamiento y darle permisos correctos:
sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql
sudo chmod 750 /var/log/mysql
Reiniciar el servicio luego de hacer los cambios.