bookmark_borderCrear usuario y darle permisos en mariadb

Los pasos para crear un nuevo usuario en mariadb. Es necesario que tengas el root o algun usuario con permisos de administración.

Ingresa a mariadb, si estas en el servidor puedes hacerlo con la siguiente sentencia, existen otras sentencias pero basicamente debes de iniciar sesión con el administrador.

$ sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 682924
Server version: 10.3.29-MariaDB-0ubuntu0.20.10.1-log Ubuntu 20.10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Crea el usuario con la siguiente sentencia:

MariaDB [(none)]> CREATE USER 'usuario'@localhost IDENTIFIED BY 'passwordusuario';

Donde:

  • usuario@localhost. Es el nombre del usuario y el lugar desde donde se puede conectar ese usuario. En este caso este usuario solo se puede conectar estando en el servidor registrado. Si quisieramos que este usuario se pudiera conectar desde otros equipos podriamos poner una IP fija o el % para indicar que se puede conectar desde cualquier equipo.
  • passwordusuario. Es la contraseña que va a utilizar el usuario para conectarse el servidor. Esta sentencia solo crea el usuario y no puede utilizar ningun recurso (base de datos, ejecución de procedimientos, etc) del servidor.

Despues de crear el usuario debe de otorgar los permisos al usuario con la siguiente sentencia.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'usuario'@localhost IDENTIFIED BY 'passwordusuario';

Si solo deseamos dar permisos sobre una base de datos.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON 'yourDB'.* TO 'usuario'@localhost;
MariaDB [(none)]> 

Bueno ahora llega el momento de revisar que todo funcione.

MariaDB [(none)]>  FLUSH PRIVILEGES;
MariaDB [(none)]>  SELECT host, user FROM mysql.user;
MariaDB [(none)]>  SHOW GRANTS FOR 'usuario'@localhost;

Si necesitas mas información acerca de CREATE USER o de GRANT PRIVILEGES ON TO.

bookmark_borderComo instalar mariadb 10.05 en Ubuntu 20.04 para producción

Con este procedimiento vamos a instalar una versión anterior de MariaDB server en Ubuntu 20.04, ya que en los sistemas legados es posible que se requieran versiones especificas, ya sea por las caracteristicas o que no hayan sido testeadas con las versiones nuevas.

Prerequisitos

  • Servidor Ubuntu Server 20.04 LTS
  • El servidor de producción ya esta protegido siguiendo el procedimiento descrito en el articulo.

Procedimiento

  • Agrega el repositorio de MariaDB en la lista de origenes autorizados, en el archivo /etc/apt/sources.list.d, e impora la llave publica PGP para verificar la descarga de los paquetes
  • Actualiza la información de tu sistema de paquetes
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10./ubuntu focal main'
$ sudo apt update
  • Ejecuta la instalación con el servidor de paquetes del ubuntu, y comprueba la versión instalada
$ sudo apt install mariadb-server
$ mysql --version
  • Ejecuta la secuencia de comandos de seguridad. Revisa y confirma las opciones de seguridad dependiendo de tu caso.
$ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
  • Crea un usuario administrativo para conexión remota (solo si la administración es remota). Conectate al servidor con el usuario de root, y ejecuta los siguientes comandos
$ sudo mariadb
MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
  • Por default, mariadb solo permite conexiones locales, si vas a conectarte desde un equipo diferente, debes de cambiar en el archivo de configuración /etc/mysql/my.cnf,
$ sudo nano /etc/mysql/my.cnf
$ more /etc/mysql/my.cnf | grep bind
#bind-address		= 127.0.0.1
bind-address		= 0.0.0.0
  • Para hacer las pruebas puedes conectarte con el usuario administrador, y crear una base de datos.
mysql -h <ip-server> -u admin -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 38
Server version: 10.4.24-MariaDB-1:10.4.24+maria~focal-log mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database test;
Query OK, 1 row affected (0.075 sec)

MariaDB [(none)]> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.073 sec)

bookmark_borderInstala un servidor keycloak en producción con docker

En esta entrada vamos a instalar un servidor keycloak en producción, utilizando docker, mariadb y certbot

Los pasos que vamos a seguir son

  • Genera un certificado para producción utilizando certbot
  • Configura la red de docker y configura los contenedores.
  • Instala el reverse proxy para tu servidor.

Genera un certificado para producción utilizando certbot

$ sudo certbot certonly -d tu.dominio.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Nginx Web Server plugin (nginx)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 3
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for tu.dominio.com
Input the webroot for tu.dominio.com: (Enter 'c' to cancel): /var/www/html
Waiting for verification...
Cleaning up challenges
Subscribe to the EFF mailing list (email: pruebas@dominio.com).

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/tu.dominio.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/tu.dominio.com/privkey.pem
   Your cert will expire on 2021-11-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Si no quieres utilizar certbot, puedes ocupara para crear el certificado openssl, solo que como no es emitido por una entidad certificadora, seguramente lo va a detectar como aprocrifo.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/tudominio-selfsigned.key -out /etc/ssl/certs/tudominio-selfsigned.crt
   Country Name (2 letter code) [AU]:
   State or Province Name (full name) [Some-State]:
   Locality Name (eg, city) []:
   Organization Name (eg, company) [Internet Widgits Pty Ltd]:
   Organizational Unit Name (eg, section) []:
   Common Name (e.g. server FQDN or YOUR name) []:
   Email Address []:

Para que podamos leer la llave privada desde el servidor docker debemos de cambiarle los permisos para que se pueda leer.

Si lo hicimios con certbot

$ sudo chmod 644 /etc/letsencrypt/live/tu.dominio.com/privkey.pem

Si lo hicimos con openssl

$ sudo chmod 644 /etc/ssl/private/tudominio-selfsigned.key

Configura la red de docker

Esto lo vamos a ocupar para que sea vea el contenedor de keycloak y el de la base de datos.

$ docker network create keycloak-network

Instala una instancia de mariadb para almacenar la información

$ docker run -d --name mariadb \
--net keycloak-network \
-e MYSQL_ROOT_PASSWORD=root_p@assword \
-e MYSQL_DATABASE=keycloak \
-e MYSQL_USER=keycloak \
-e MYSQL_PASSWORD=p@ssword \
mariadb

Si ya tienes una instancia de mariadb en un contenedor docker solo debes de poner ponerla en la misma red de keycloak, con la sentencia

$ docker network connect mariadb

Donde mariadb es el nombre del contenedor de mariadb.

Descarga e instala la imagen de keycloak para producción.

$ docker run -it -d --name keycloak \
--net keycloak-network \
-p8080:8080 -p 8443:8443s \
-v /etc/ssl/certs/keycloak-selfsigned.crt:/etc/x509/https/tls.crt \
-v /etc/ssl/private/keycloak-selfsigned.key:/etc/x509/https/tls.key \
-e KEYCLOAK_USER=administrador \
-e KEYCLOAK_PASSWORD=p@ssword \
-e DB_VENDOR=mariadb \
-e DB_DATABASE=keycloak \
-e DB_USER=keycloak \
-e DB_PASSWORD=p@assworddb \
jboss/keycloak

donde

-v se indican el certificado y la llave privada para el keycloak.

Por último, si necesitamos reiniciar el servidor, debemos detener el contenedor, borrarlo y volverlo a construir

$ docker stop keycloak
$ docker rm keycloak

bookmark_borderInstalar keycloak en un contenedor docker

En este artículo vamos a describir como debe de instalarse un servidor keycloack en un contenedor docker y vamos a utilizar mariadb como repositorio de los datos de nuestro servidor, y explica las variables que puedes cambiar y como afectan.

Prerequisitos

Asegurate de tener instalado docker.

$ docker --version

Vamos a trabajar con la versión Docker CE 16.

Uso e instalación

Crea un recurso de red si lo vas a instalar en el mismo equipo, un contenedor para la base de datos y otro para el keycloak.

$ docker network create keycloak-network

Crea el contendor de la base de datos, para este caso yo voy a utilizar mariadb. Las variables que debes de cambiar cuando vas a crear el contenedor de mariadb para keycloak son:

  • MYSQL_ROOT_PASSWORD. Contraseña del root de mariadb.
  • MYSQL_DATABASE. Nombre de la base de datos donde se va a almacenar la información de keycloak.
  • MYSQL_USER. Nombre del usuario de base de datos con el cual se va a conectar el servidor de keycloak.
  • MYSQL_PASSWORD. Contraseña del usuario de base de datos, que va a utilizar el seridor de keycloak.
$ docker run -d 
   --name mariadb 
   --net keycloak-network 
   -e MYSQL_ROOT_PASSWORD=password 
   -e MYSQL_DATABASE=keycloak 
   -e MYSQL_USER=keycloak 
   -e MYSQL_PASSWORD=password mariadb

Ahora toca el turno para crear el contendor de keycloak, y que utilice la base de datos mariadb.

  • KEYCLOAK_USER. Es el administrador de keycloak y el primer usuario con el cual vas a ingresar.
  • KEYCLOAK_PASSWORD. La contraseña del administrador de keycloak.
  • DB_VENDOR. Debe de escribirse el nombre del manejador de base de datos en minusculas, ES MUY QUISQUILLOSO asi es que pon los nombres exactamente como te dice la documentación.
  • DB_USER. El nombre del usuario que creaste al crear el contenedor de mariadb, este es el que pusisten en la variable MYSQL_USER cuando creaste el contenedor de mariadb.
  • DB_PASSWORD. Es la contraseña del usuario de la base de datos, es lo que pusiste en la variable MYSQL_PASSWORD.
$ docker run -it -d 
   --name keycloak 
   --net keycloak-network 
   -p8080:8080 
   -e KEYCLOAK_USER=administrador 
   -e KEYCLOAK_PASSWORD=password 
   -e DB_VENDOR=mariadb 
   -e DB_USER=keycloak 
   -e DB_PASSWORD=password 
   jboss/keycloak

Y ahora solo queda probar que todo este correcto, abre un explorador de internet y navega a la url http://localhost:8080/auth.

Navega a la opción de Administration Console, y completa el formulario. Debes de utilizar el nombre del usuario (KEYCLOAK_USER) y contraseña (KEYCLOAK_PASSWORD) que pusiste para crear el contenedor de keycloak.

Observaciones importantes, si tu detienes el contenedor de keycloak con la sentencia

$ docker stop keycloak
$ docker start keycloak

Te va a marcar un error y no vas a poder volverlo a levantar. Primero debes destruirlo y volverlo a generar. Para destruir el contenedor de docker utiliza la sentencia.

$ docker rm keycloak

Como toda la configuración esta en tu contenedor de base de datos no tienes de que preocuparte.

bookmark_borderRenombrar una base de datos (mariadb)

Ingresa como administrador de

  • Ingresa como Administrador de Bases de Datos.
  • Crea la nuevo esquema (base de datos).
CREATE SCHEMA new_db;
  • Cambia el esquema de las tablas a la nueva base de datos, con el siguiente script
RENAME TABLE old_db.table TO new_db.table;
  • Actualiza los permisos de los usuarios que ocupaban las tablas.
  • Vas a tener que recompilar los store procedures y vistas que hagan uso de las tablas.