2010-06-16 42 views
16

¿Cómo puedo verificar si existe un usuario?Comprobando si el usuario de mysql existe

Im haciendo un instalador para una base de datos mysql, y necesito comprobar si un usuario sale, si no crear usuario, si es así eliminar usuario y crearlo de nuevo.

esto para que pueda ejecutar el script sin preocupaciones.

gracias.

Respuesta

5

Si de todos modos está eliminando el usuario de MySQL, entonces realmente no es necesario verificar si existe primero. MySQL no arrojará ningún error si no hay nada para eliminar:

DELETE FROM mysql.user WHERE User = 'username'; 
+0

+1 para pensar un paso adelante .. Me gusta –

+6

Esto eliminará al usuario de la tabla de usuario, si toma este enfoque, debe eliminar también de mysql.columns_priv, mysql.db, mysql.tables_priv . Además, esta lista de tablas puede cambiar en futuras versiones de MySQL. – stivlo

+0

Nunca, nunca, elimine un usuario de esta manera. Use el comando 'DROP USER'. –

49

MySQL almacena datos de usuario en una tabla llamada user en una base de datos llamada mysql (de forma predeterminada). La siguiente consulta devolverá 1 si existe un usuario con el nombre de usuario especificado, 0 de lo contrario.

SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username') 
0

MySQL carece de DROP USER SI EXISTE construir.

Una buena solución es otorgar un privilegio inofensivo al usuario antes de soltarlo. Este creará el usuario si no existe, por lo que se puede quitar con seguridad, así:

GRANT USAGE ON *.* TO 'username'@'localhost'; 
DROP USER 'username'@'localhost'; 
FLUSH PRIVILEGES; 

USO realidad significa ningún privilegio.

Fuente: http://bugs.mysql.com/bug.php?id=19166

+2

Para la posteridad, esta solución ya no funciona. Citando el comentario de otra respuesta: "Esto ya no es una opción. :(La versión actual de MySQL ya no crea un nuevo usuario para la declaración GRANT. Era una" Característica "que ellos agregaron.;)" Para referencia original, ver: http://stackoverflow.com/a/3241918/656243 –

0

Esta es la forma en que era capaz de hacerlo:

#!/usr/bin/env bash 

set -o errexit 
set -o nounset 

# Create credentials file 
echo -e "[client]\nuser=root\npassword=${MYSQL_ROOT_PASSWORD}" > ~/.my.cnf 

# Create standard user and grant permissions 
if ! echo "SELECT COUNT(*) FROM mysql.user WHERE user = 'myuser';" | mysql | grep 1 &> /dev/null; then 
    echo "Creating database user ..." 
    echo "CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; 
      GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost'; 
      FLUSH PRIVILEGES;" | mysql 
else 
    echo "Database user already created. Continue ..." 
fi 

Cambio myuser, mydatabase y mypassword en consecuencia.

+0

Esto no funciona bien si el nombre de usuario contiene el dígito 1. Esto puede causar dificultades. – Joachim

+0

@Joachim acaba de probarlo con un usuario con un 1 en su nombre de usuario, y funciona perfectamente. ¿Estás seguro? ¿Por qué no debería funcionar para un usuario con un 1? – Havok

Cuestiones relacionadas