Diferencia entre revisiones de «Mysql Creación de usuarios»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 1: Línea 1:
 +
=Introducción=
 +
 +
* Vimos en el punto anterior como es posible manipular la tabla '''user''' directamente con las órdenes SQL INSERT, UPDATE, DELETE.
 +
 +
: Pero a la hora de crear nuevos usuarios, normalmente haremos uso de órdenes SQL pertenecientes al lenguaje de control de datos.
 +
 +
 +
 +
=SQL=
 +
 +
==Creando nuevos usuarios==
 +
 +
* La orden SQL que permite añadir nuevos usuarios es: [https://dev.mysql.com/doc/refman/5.7/en/create-user.html '''CREATE USER'''].
 +
 +
 +
: Su forma más simple:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
CREATE USER nombre_usuario IDENTIFIED BY 'password';
 +
</syntaxhighlight>
 +
: nombre_usuario tiene el formato: 'usuario'@'host'
 +
 +
: Por ejemplo:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
CREATE USER 'angel' IDENTIFIED BY '12345678';
 +
</syntaxhighlight>
 +
: Estaríamos añadiendo una nueva fila a la tabla 'user' de la base de datos 'mysql', con nombre de usuario 'angel' y password '12345678'
 +
 +
 +
* Si no podemos la palabra clave 'IDENTIFIED BY' estaríamos creando un usuario sin contraseña, <u>lo cual no es recomendado</u>.
 +
: Por ejemplo:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
CREATE USER 'anonimo';
 +
</syntaxhighlight>
 +
: Al crear este usuario sin contraseña, podríamos conectarnos al Mysql sin enviar el parámetro -p o --password en herramientas clientes:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
mysql -u anonimo
 +
</syntaxhighlight>
 +
 +
 +
 +
* Para ver las sentencia 'CREATE USER' utilizada para crear un determinado usuario, debemos ejecutar la orden SQL: [https://dev.mysql.com/doc/refman/5.7/en/show-create-user.html SHOW CREATE USER usuario]
 +
: Por ejemplo, para ver la sentencia 'create user' del usuario actual podemos poner:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
SHOW CREATE USER CURRENT_USER();
 +
</syntaxhighlight>
 +
 +
[[Image:Mysql_usuarios_1.jpg|center|400px]]
 +
 +
 +
 +
* Más información [https://dev.mysql.com/doc/refman/5.7/en/adding-users.html en este enlace].
 +
 +
<br />
 +
===Conexiones seguras===
 +
 +
* Queda fuera de este manual explicar los tipos de certificados y como funcionan para garantizar una conexión segura.
 +
: Decir que se basan en el uso de 'claves públicas' y 'claves privadas'.
 +
: Podemos consultar [https://es.wikipedia.org/wiki/Transport_Layer_Security la wikipedia] para aclarar los conceptos.
 +
 +
 +
* En MYSQL podemos hacer que el servidor acepte conexiones SSL, es decir, conexiones cifradas.
 +
: Para ello debemos seguir los siguientes pasos:
 +
<gallery caption="Executando a versión Desktop" widths="350" heights="300px" perrow="2">
 +
Image:Mysql_usuarios_2.jpg| Comprobamos si el servidor Mysql acepta conexiones seguras. Para ello debemos mirar las variables del sistema [https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_have_openssl have_open_ssl] y [https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_have_ssl have_ssl]. Como vemos en la imagen, están deshabilitados.
 +
Image:Mysql_usuarios_3.jpg| Podemos comprobar como desde la herramienta cliente 'mysql', si ejecutamos la orden '''\s''' nos indica que la conexión no es segura.
 +
Image:Mysql_usuarios_4.jpg| Ahora necesitamos generar los archivos que conformarán el certificado y que serán utilizados por los clientes y por el servidor. Para ello debemos hacer uso de la orden [https://dev.mysql.com/doc/refman/5.7/en/mysql-ssl-rsa-setup.html mysql-ssl-rsa-setup] que viene con Mysql y que generá los archivos necesarios en el directorio indicado por la variable del sistema '''datadir''' y que por defecto es  '''/var/lib/mysql/'''. Como a estos archivos tiene que acceder el servidor mysql vamos a indicar con la opción '''--uid=mysql''' que el propietario de los archivos generados será el usuario que utiliza mysql para acceder al sistema operativo y que  por defecto es '''mysql'''.
 +
Image:Mysql_usuarios_5.jpg| Podemos ver los archivos generados con la orden: <b>sudo find /var/lib/mysql -name '*.pem' -ls</b>
 +
Image:Mysql_usuarios_6.jpg| En versiones anteriores de Mysql debíamos editar el archivo de configuración y añadir las líneas que le indicaban a Mysql donde buscar el certificado (más información [https://www.percona.com/blog/2013/06/22/setting-up-mysql-ssl-and-secure-connections/ en este enlace]. Pero en las versiones actuales solamente necesitamos reiniciar el servicio.
 +
Image:Mysql_usuarios_7.jpg| Ahora los clientes que intenten conectarse al Mysql, si lo haces desde la propia máquina, intentarán utilizar la conexión SSL por defecto. Podemos comprobarlo conectándose con la orden: '''mysql -u root -p -h 127.0.0.1'''. Fijarse que debemos de poner el parámetro -h (de host) ya que de esta forma estamos conectándonos por TCTP/IP. Si no lo ponemos estaríamos conectándonos a través del socket.
 +
Image:Mysql_usuarios_8.jpg| Si estamos en el Workbench podemos crear una conexión nueva y ver como en la pestaña SSL ya tiene marcada la opción SSL si está disponible.
 +
Image:Mysql_usuarios_9.jpg| Si hubiéramos generado los archivos SSL en otro directorio diferente al directorio de datos de Mysql, tendríamos que editar el archivo de configuración del servidor Mysql, indicar la ruta donde se encuentran los archivos (como muestra la imagen), editar el archivo de configuración de las herramientas clientes (en la sección [] correspondiente y poner la misma información que en el servidor, pero sólo las entradas: '''ssl-cert'''y '''ssl-key'''. Recuerda que en las distribuciones basadas en Ubuntu tenemos que dar permiso de acceso a esos archivos si están en un directorio diferente como vimos en el punto de 'Casos especial: los directorios' durante [http://wiki.cifprodolfoucha.es/index.php?title=Mysql_Instalaci%C3%B3n#Del_servidor la instalación].
 +
</gallery>
 +
 +
 +
 +
* Podemos 'obligar' a un determinado usuario que solo se pueda conectar si utiliza una conexión cifrada mediante un certificado SSL:
 +
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
CREATE USER 'usuario'@'localhost' REQUIRE SSL;
 +
</syntaxhighlight>
 +
: Como vemos al final de la orden CREATE USER debemos escribir '''REQUIRE SSL'''.
 +
 +
:<u>Nota:</u> Un certificado SSL es el tipo de certificado más conocidos de los [https://en.wikipedia.org/wiki/X.509 certificados X.509].
 +
  
  

Revisión del 16:51 10 nov 2017

Introducción

  • Vimos en el punto anterior como es posible manipular la tabla user directamente con las órdenes SQL INSERT, UPDATE, DELETE.
Pero a la hora de crear nuevos usuarios, normalmente haremos uso de órdenes SQL pertenecientes al lenguaje de control de datos.


SQL

Creando nuevos usuarios

  • La orden SQL que permite añadir nuevos usuarios es: CREATE USER.


Su forma más simple:
1 CREATE USER nombre_usuario IDENTIFIED BY 'password';
nombre_usuario tiene el formato: 'usuario'@'host'
Por ejemplo:
1 CREATE USER 'angel' IDENTIFIED BY '12345678';
Estaríamos añadiendo una nueva fila a la tabla 'user' de la base de datos 'mysql', con nombre de usuario 'angel' y password '12345678'


  • Si no podemos la palabra clave 'IDENTIFIED BY' estaríamos creando un usuario sin contraseña, lo cual no es recomendado.
Por ejemplo:
1 CREATE USER 'anonimo';
Al crear este usuario sin contraseña, podríamos conectarnos al Mysql sin enviar el parámetro -p o --password en herramientas clientes:
1 mysql -u anonimo


  • Para ver las sentencia 'CREATE USER' utilizada para crear un determinado usuario, debemos ejecutar la orden SQL: SHOW CREATE USER usuario
Por ejemplo, para ver la sentencia 'create user' del usuario actual podemos poner:
1 SHOW CREATE USER CURRENT_USER();
Mysql usuarios 1.jpg



Conexiones seguras

  • Queda fuera de este manual explicar los tipos de certificados y como funcionan para garantizar una conexión segura.
Decir que se basan en el uso de 'claves públicas' y 'claves privadas'.
Podemos consultar la wikipedia para aclarar los conceptos.


  • En MYSQL podemos hacer que el servidor acepte conexiones SSL, es decir, conexiones cifradas.
Para ello debemos seguir los siguientes pasos:


  • Podemos 'obligar' a un determinado usuario que solo se pueda conectar si utiliza una conexión cifrada mediante un certificado SSL:
1 CREATE USER 'usuario'@'localhost' REQUIRE SSL;
Como vemos al final de la orden CREATE USER debemos escribir REQUIRE SSL.
Nota: Un certificado SSL es el tipo de certificado más conocidos de los certificados X.509.












-- Ángel D. Fernández González -- (2017).