Bienvenidos sean a este post, hoy veremos un poco como es la seguridad en mariadb.
Si bien no es un tema que hablamos mucho al momento de conectarnos con el servidor necesitamos enviar tres datos:
- El usuario
- La contraseña
- La IP de conexion
El usuario y contraseña es como cualquier sistema hoy en dia pero cuando nos referimos a la IP de conexion debemos informar la IP de nuestro equipo (o nombre de host), esto es para los casos cuando nos conectamos remotamente desde un cliente pero si lo hacemos en el mismo servidor se utiliza localhost, aunque esto al momento de conectarnos en general no se informa pero de esto hablaremos en un momento, por lo general la forma de un usuario es:
id_usuario@direccion_ip
Como mencionamos esto es mas utilizado cuando nos conectamos remotamente o por medio de algun complemento (plug-in), los permisos pueden ser asignados a una cuenta individual o a cuentas que coinciden con un patron, los patrones se crean con el operador LIKE, existen distintos tipos de permisos, desde algunos muy especificos hasta otros mas genericos, estos a su vez se pueden conceder a todo el servidor, a las bases o los contenidos de estas (tablas y procedimientos), a objetos individuales o inclusive a determinadas columnas en una tabla o vista pero mariadb 10 tambien soporta roles, lo cual nos permite conceder permisos a un rol (p.e admin) como a un individuo, aunque los roles se asignan a los usuarios y estos tendran los permisos que se le asignaron al rol, esto nos permite tener un mejor control sobre sistemas con muchos usuarios y donde se necesita una muy buen politica de seguridad.
Por ultimo vamos a ver como generar de forma muy basica los permisos para un usuario y en caso de no existir lo creara, esto se hace por medio del comando GRANT y su sintaxis es la siguiente:
GRANT <acciones> ON <objetos> TO <usuario@IP> IDENTIFIED BY 'contraseña' <WITH GRANT OPTION>
Esta es su forma mas basica pero que mejor funciona para mi, desglosemos un poco toda esta linea; GRANT es el comando que nos permite conceder permisos, las acciones que podra realizar y estas comprenden:
- INSERT
- UPDATE
- SELECT
- DELETE
- DROP
- CREATE
- SHOW
- ALL
Estos son algunos pero como pueden observar son los comandos que tenemos disponibles para poder manipular desde las bases hasta las tablas y los datos en esta, por ejemplo podemos conceder a un usuario que solo haga lecturas de una o varias tablas, que solamente borre o solamente actualice pero si queremos que tenga permiso total, es decir un nuevo administrador, simplemente pasamos el comodin ALL y este le dara todos los permisos disponibles, lo siguiente es el ON para indicar a donde le concederemos los permisos y la sintaxis de los objetos es:
nombre_base.nombre_tabla
Donde podemos especificar una tabla en particular, varias tablas en distintas bases todas separadas por comas pero tambien disponemos de un comodin como es el asterisco (*) lo cual equivale a decir que son todas por ejemplo:
- *.*, equivale a decir todas las bases y todas las tablas
- nombre_base.*, esto es a todas las tablas de dicha base
Por lo tanto nos da la posibilidad de poder restringuir hasta donde esa persona puede llegar, por lo general como en el caso anterior si es un administrador se le concede con *.*, despues tenemos el TO que sera para indicar a quien se le dara los permisos, la identificacion es como se muestra ahi, les paso un par de ejemplos de como podemos usarlo:
Para que el usuario se conecte desde una IP especifica:
'tinchicus'@'10.0.176.11'
En este caso el usuario podra conectarse al servidor siempre y cuando el equipo desde donde lo hace tiene dicha direccion IP, el inconveniente de esta forma es que el cliente este dentro de un DHCP y se le modifique la IP en algun momento perdiendo la capacidad de conectarse, y se le debe conceder nuevamente el acceso con la nueva IP, una solucion seria:
'tinchicus'@'%'
Este es un comodin de SQL y es como decirle que puede hacerlo desde cualquier IP, en mi experiencia particular nunca me funciono y por ultimo tenemos una opcion mas:
'tinchicus'@'localhost'
Este nos permite conectarnos desde el mismo servidor unicamente, esto es muy utilizado para cuando tenemos un cliente en el mismo servidor, o un servidor web que se conecta mediante PHP (por ejemplo) pero no podremos hacerlo externamente, por ultimo tenemos a la encargada de establecer la contraseña de nuestro usuario, se puede dejar en blanco? En general si pero no es recomendable, por ultimo tenemos un tema opcional como es WITH GRANT OPTION, lo cual permitira al usuario poder conceder permisos de acceso o crearlos, como hicimos ahora, por lo general es mas seguro tener otro igual que root y no trabajar tanto con el superusuario, por ultimo veamos como seria un par de ejemplos de como es la sintaxis:
grant insert,select on curso.alumnos to 'etortore'@'localhost' identified by '123456'
grant all on *.* to 'tinchicus'@'10.0.177.122' identified by '123456' with grant option
grant select on curso.* to 'polizzia'@'%' identified by ''
Como pueden ver es bastante simple conceder los permisos, simplemente tengan bien en claro cuales son los alcances de cada uno a crear, mas adelante ahondaremos un poco mas en este tema.
En resumen, hoy hemos visto la autenticacion y la seguridad, como se realiza, como se concede el acceso a un usuario, tanto en permisos y desde donde puede conectarse, hemos visto como crear un usuario mediante grant o modificar sus permisos en caso de existir, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
