Wednesday, September 24, 2014

Las conexiones de usuario de MySQL

Original post: http://anothermysqldba.blogspot.com/2014/09/mysql-user-connections.html

Así que me encontré explicando las diferencias con los usuarios de MySQL y la forma en que se autentican. En primer lugar esta información no es nueva, pero se puede encontrar aquí:
Me limitaré a mostrar algunos ejemplos del mundo real para explicar esto.

MySQL utiliza el nombre de usuario, así como el inicio de sesión cuando se evalúa los permisos de un usuario. Por ello, una buena práctica consiste en eliminar los usuarios anónimos.

Para este ejemplo voy a empezar con los siguientes usuarios



MariaDB [(none)]> select user , host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| | centos64 |
| root | centos64 |
| | localhost |
| root | localhost |
+---------+-----------+

Puedo iniciar sesión en el servidor incluso pensé que no tengo un nombre de usuario, ya que por defecto abajo a anónimo @ localhost.


# mysql -u nobody
MariaDB [(ninguno)]> selecciona current_user ();
+ ---------------- +
| Current_user () |
+ ---------------- +
|localhost |
+ ---------------- +
MariaDB [(ninguno)]> Presentación subvenciones;
+ + --------------------------------------
| Ayudas alocalhost |
+ + --------------------------------------
| CONCESIÓN DE USO * A * '' @ 'localhost'. |
+ + --------------------------------------

Si bien no puedo hacer mucho todavía tengo en la base de datos.

Ahora cuando paso un usuario conocido:


# mysql -u root -p
MariaDB [(ninguno)]> selecciona current_user;
+ ---------------- +
| Current_user |
+ ---------------- +
| Root @ localhost |
+ ---------------- +
MariaDB [(ninguno)]> Presentación subvenciones;
+----------------------------------------------------------------------------------------------------------------------------------------+
| Ayudas a root @ localhost |
+----------------------------------------------------------------------------------------------------------------------------------------+
| OTORGAR PRIVILEGIOS EN TODOS * A * 'root' @ 'localhost' IDENTIFICADO POR CONTRASEÑA '* 8CD56861FDADF7A264741F27D502D1A8DAE0A8F7' WITH GRANT OPTION. |
| GRANT proxy en '' @ '' A 'root' @ 'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+


Actualmente el usuario root tiene 4 cuentas diferentes.

MariaDB [(none)]> select user , host from mysql.user where user = 'root';
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| root | centos64 |
| root | localhost |
+------+-----------+

Estas son todas diferentes cuentas. Yo sólo necesito uno de ellos sin embargo. Yo sólo uso la cuenta de root a través de conexiones locales de acogida.

MariaDB [(none)]> DROP USER 'root'@'127.0.0.1';
Query OK, 0 rows affected (0.33 sec)

MariaDB [(none)]> DROP USER 'root'@'centos64';
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> DROP USER 'root'@'::1';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select user , host from mysql.user where user = 'root';
+------+-----------+
| user | host |
+------+-----------+
| root | localhost |
+------+-----------+

Entonces, ¿qué quiero decir con 4 cuentas diferentes? Ellos toda la cuenta de usuario root. No .. Son raíz y cualquier anfitrión. Así que cada cuenta (usuario + host) puede tener diferentes permisos.

Así que vamos a hacer un ejemplo siguiente para mostrar la diferencia.
Así el servidor en este ejemplo tiene dos interfaces de red. Así que voy a crear un usuario por todos los puntos de acceso a cada uno con diferentes permisos para mostrar las diferencias. Voy a establecer la misma contraseña, pero los podía ser diferente también.

MariaDB [(none)]> GRANT SELECT ON *.* TO 'anothermysqldba'@'10.0.2.15' IDENTIFIED BY '<cleartext password>';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE , DROP, RELOAD, SHUTDOWN, PROCESS, FILE, INDEX, ALTER ON *.* TO 'anothermysqldba'@'192.168.0.%' IDENTIFIED BY '<cleartext password>';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'anothermysqldba'@'localhost' IDENTIFIED BY '<cleartext password>' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(ninguno)]> selecciona usuario, anfitrión de mysql.user donde usuario = 'anothermysqldba';
+ ----------------- + ------------- +
| Usuario | acogida |
+ ----------------- + ------------- +
| Anothermysqldba | 10.0.2.15 |
| Anothermysqldba |. 192.168.0% |
| Anothermysqldba | localhost |
+ ----------------- + ------------- +

Así que ¿qué significa esto? A pesar de que los nombres de usuario son los mismos ya que MySQL utiliza el host, así para validar un usuario cada punto de acceso de usuario como diferentes permisos.

Mientras que usted puede confiar en algunos de sus desarrolladores, esto es a menudo una buena idea limitar algunos de su acceso si están trabajando de forma remota o por medio de sus guiones. Si tienen que hacer algo que no le implica y tienen que ssh al servidor en sí y de ingresar para realizar otras tareas. Esto es, por supuesto, depende de la relación y el trabajo del flujo de su negocio y / o aplicaciones.

Uso de la 10.0.2.15 anfitrión el usuario sólo debe seleccionar acceder.

# mysql -h 10.0.2.15 -u anothermysqldba -p
MariaDB [(ninguno)]> selecciona current_user ();
+ --------------------------- +
| Current_user () |
+ --------------------------- +
| Anothermysqldba@10.0.2.15 |
+ --------------------------- +
MariaDB [(ninguno)]> Presentación subvenciones;
+-------------------------------------------------------------------------------------------------------------------------+
| Ayudas a anothermysqldba@10.0.2.15 |
+-------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT en * A * 'anothermysqldba'@'10.0.2.15' IDENTIFICADO POR CONTRASEÑA '* 31360D7EE84BE965C0E759179FC61B6943BCA64F'. |
+-------------------------------------------------------------------------------------------------------------------------+

Uso de host 192.168.0.26 el usuario tiene más acceso. Esta cuenta también se fija para acceder a través de cualquier cosa bajo el 192.168.0 / 255 (%) de subred.

# mysql -h 192.168.0.26 -u anothermysqldba -p
MariaDB [(ninguno)]> selecciona current_user ();
+ ----------------------------- +
| Current_user () |
+ ----------------------------- +
| Anothermysqldba@192.168.0.% |
+ ----------------------------- +
MariaDB [(ninguno)]> Presentación subvenciones;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Ayudas a anothermysqldba@192.168.0.% |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PARO, PROCESO, ARCHIVO, INDEX, ALTER en * A * 'anothermysqldba'@'192.168.0.%' IDENTIFICADO POR CONTRASEÑA '* 31360D7EE84BE965C0E759179FC61B6943BCA64F'. |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Así como se puede inferir que el usuario localhost tiene la cuenta de acceso completa.

# mysql -u anothermysqldba -p
MariaDB [(ninguno)]> selecciona current_user ();
+ --------------------------- +
| Current_user () |
+ --------------------------- +
| Anothermysqldba @ localhost |
+ --------------------------- +
1 row in set (0.00 sec)

MariaDB [(ninguno)]> Presentación subvenciones;
+---------------------------------------------------------------------------------------------------------------------------------------------------+
| Ayudas a anothermysqldba @ localhost |
+---------------------------------------------------------------------------------------------------------------------------------------------------+
| OTORGAR PRIVILEGIOS EN TODOS * A * 'anothermysqldba' @ 'localhost' IDENTIFICADO POR CONTRASEÑA '* 31360D7EE84BE965C0E759179FC61B6943BCA64F' WITH GRANT OPTION. |
+---------------------------------------------------------------------------------------------------------------------------------------------------+

Ahora, como he dicho antes, es la mejor práctica para eliminar los usuarios anónimos. Usando el mysql_secure_installation para la instalación le ayudará con su también.

¿Por qué es importante?

# mysql -u anothremysqldba -p
MariaDB [(ninguno)]> selecciona current_user ();
+ ---------------- +
| Current_user () |
+ ---------------- +
|localhost |
+ ---------------- +
1 row in set (0.00

El ejemplo simple ... está por encima y sólo evitar errores simples. Un error tipográfico permitió el acceso a la base de datos, no se debe permitir esto.

Así que a continuación, eliminar y probar de nuevo.

MariaDB [(none)]> DROP USER ''@'localhost';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> DROP USER ''@'centos64';
Query OK, 0 rows affected (0.00 sec)

# Mysql-u anothremysqldba -p
Introduce el password:
ERROR 1045 (28000): Acceso denegado para el usuario 'anothremysqldba' @ 'localhost' (using password: SI

Entonces, ¿qué significa si su base de datos se crea con todo con% como los nombres de host o direcciones IP estricta y no hay comodines?

Esta sería una decisión de seguridad y los negocios de su parte. Personalmente no es una opción válida en mi opinión. Nada más que un comodín (%) permite que un punto de acceso robusto, pero si el firewall tiene un fallo también abre el acceso a distancia alejado de usuarios de la red. Una dirección IP estricta por usuario también es bastante estricto en mi opinión, pero depende del usuario. Por ejemplo, incluso con una cuenta que ha sido creado para la replicación prefiero seguir utilizando la dirección IP con un ejemplo.%: 192.168.0%. Direcciones IP cambian (incluso los cambios estáticos para los usuarios remotos la DBA a menudo no se le dice) y que a menudo resulta en la gente que viene a la DBA con quejas por falta de acceso.

Una vez trabajé con una persona que limita el acceso cada usuario bloqueado a una dirección IP estática. Esta persona tuvo que alterar constantemente las declaraciones de subvención. La gente tiene que ser capaz de trabajar con facilidad y eficacia, mientras que usted puede garantizar la seguridad en su final.