Se pueden asignar contraseñas desde la línea de comandos usando el comando mysqladmin :
shell> mysqladmin -unombres_usuario
-hequipo
password "nuevacontr
"
La cuenta para la que este comando cambia la contraseña es la
que tiene un registro en la tabla user
que
coincida el user_name
con la columna
User
y un equipo cliente desde el
que se conecta en la columna Host
.
Otra forma de asignar una contraseña en una cuenta es con el
comando SET PASSWORD
:
mysql> SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
Sólo los usuarios tales como root
con acceso
de modificación para la base de datos mysql
puede cambiar la contraseña de otro usuario. Si no está
conectado como un usuario anónimo, puede cambiar su propia
contraseña omitiendo la cláusula FOR
:
mysql> SET PASSWORD = PASSWORD('biscuit');
Puede usar el comando GRANT USAGE
globalmente
(ON *.*
) para asignar una contraseña a una
cuenta sin afectar los permisos actuales de la cuenta:
mysql> GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
Aunque generalmente es peferible asignar contraseñas usando uno
de los métodos precedentes, puede hacerlo modificando la tabla
user
directamente:
Para establecer una contraseña al crear una nueva cuenta,
especifique un valor para la columna
Password
:
shell> mysql -u root mysql mysql> INSERT INTO user (Host,User,Password) -> VALUES('%','jeffrey',PASSWORD('biscuit')); mysql> FLUSH PRIVILEGES;
Para cambiar la contraseña en una cuenta existente, use
UPDATE
para especificar el valor de la
columna Password
:
shell> mysql -u root mysql mysql> UPDATE user SET Password = PASSWORD('bagel') -> WHERE Host = '%' AND User = 'francis'; mysql> FLUSH PRIVILEGES;
Cuando especifique una contraseña en una cuenta mediante
SET PASSWORD
, INSERT
, o
UPDATE
, debe usar la función
PASSWORD()
para encriptarlo. (La única
excepción es que no necesita usar PASSWORD()
si la contraseña está vacía .) PASSWORD()
es necesario ya que la tabla user
guarda las
contraseñas encriptadas, no en texto plano. Si olvida este
hecho, es posible que guarde contraseñas así:
shell> mysql -u root mysql mysql> INSERT INTO user (Host,User,Password) -> VALUES('%','jeffrey','biscuit'); mysql> FLUSH PRIVILEGES;
El resultado es que el valor literal
'biscuit'
se guarda como contraseña en la
tabla user
, no el valor encriptado. Cuando
jeffrey
trate de conectar al servidor usando
esta contraseña, el valor se encripta y se compara con el valor
guardado en la tabla user
. Sin embargo, el
valor guardado es la cadena de caracteres literal
'biscuit'
, así que la comparación falla y
el servidor rechaza la conexión:
shell> mysql -u jeffrey -pbiscuit test Access denied
Si inicializa la contraseña usando el comando GRANT
... IDENTIFIED BY
o mysqladmin
password , ambos encriptan la contraseña. En estos
casos, el uso de la función PASSWORD()
no es
necesario.
Nota: La encriptación de
PASSWORD()
es diferente a la encriptación de
contraseñas Unix. Consulte Sección 5.7.1, “Nombres de usuario y contraseñas de MySQL”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.