SET PASSWORD [FOR user] = password_option

password_option: {
  | OLD_PASSWORD('auth_string')
  | 'hash_string'

The SET PASSWORD statement assigns a password to a MySQL user account:

  • With no FOR user clause, this statement sets the password for the current user:

    SET PASSWORD = password_option;

    Any client who connects to the server using a nonanonymous account can change the password for that account. To see which account the server authenticated you as, invoke the CURRENT_USER() function:


    Permitted old_passwords values are described later in this section.

  • With a FOR user clause, this statement sets the password for the named account, which must exist:

    SET PASSWORD FOR 'jeffrey'@'localhost' = password_option;

    In this case, you must have the UPDATE privilege for the mysql database.

In MySQL 5.1 and later, when the read_only system variable is enabled, SET PASSWORD requires the SUPER privilege in addition to any other required privileges.

If a FOR user clause is given, the account name uses the format described in Section 6.2.3, “Specifying Account Names”. The user value should be given as 'user_name'@'host_name', where 'user_name' and 'host_name' are exactly as listed in the User and Host columns of the account's mysql.user table row. If you specify only a user name, a host name of '%' is used. For example, to set the password for an account with User and Host column values of 'bob' and '%.example.org', write the statement like this:

SET PASSWORD FOR 'bob'@'%.example.org' = PASSWORD('cleartext password');

The password can be specified in these ways:

  • Using the PASSWORD() function

    The 'auth_string' function argument is the cleartext (unencrypted) password. PASSWORD() hashes the password and returns the encrypted password string for storage in the mysql.user account row.

    The old_passwords system variable value determines the hashing method used by PASSWORD(). For descriptions of the permitted values, see Section 5.1.4, “Server System Variables”.

  • Using the OLD_PASSWORD() function:

    The 'auth_string' function argument is the cleartext (unencrypted) password. OLD_PASSWORD() hashes the password using pre-4.1 hashing and returns the encrypted password string for storage in the mysql.user account row.

  • Using an already encrypted password string

    The password is specified as a string literal. It must represent the already encrypted password value, in the hash format required by the authentication method used for the account.

For more information about setting passwords, see Section 6.3.5, “Assigning Account Passwords”


SET PASSWORD may be recorded in server logs or on the client side in a history file such as ~/.mysql_history, which means that cleartext passwords may be read by anyone having read access to that information. For information about password logging in the server logs, see Section, “Passwords and Logging”. For similar information about client-side logging, see Section, “mysql Logging”.


If you are connecting to a MySQL 4.1 or later server using a pre-4.1 client program, do not change your password without first reading Section, “Password Hashing in MySQL”. The default password hashing format changed in MySQL 4.1, and if you change your password, it might be stored using a hashing format that pre-4.1 clients cannot generate, thus preventing you from connecting to the server afterward.

If you are using MySQL Replication, be aware that, currently, a password used by a replication slave as part of a CHANGE MASTER TO statement is effectively limited to 32 characters in length; if the password is longer, any excess characters are truncated. This is not due to any limit imposed by the MySQL Server generally, but rather is an issue specific to MySQL Replication. (For more information, see Bug #43439.)

Download this Manual
User Comments
Sign Up Login You must be logged in to post a comment.