Frage

I'm trying to make the mysql client connect to a mysql server without requiring the password to be given interactively. Steps taken:

1) First create a mylogin.cnf file

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) File created successfully:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) Connect using mysql client

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Is there a default value/configuration somewhere that makes the client ignore the password in mylogin.cnf? The user and host properties were read correctly from the file.

I am able to connect just fine if I provide the password on the command line:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

MySQL client version is 5.6.22, MySQL Server version is 5.6.22, both on Oracle Linux 6. Client and server are on different hosts.

Thanks

War es hilfreich?

Lösung

Any way you do this, you're probably going to have a password saved somewhere. Even MySQL 5.6 login-path is easily decryptable by anyone with the motivation. That warning said, this would be an easy solution.

In your environment script (eg ~/.profile or ~/.bashrc), set

alias mysql='mysql -uUser -pPasswd -hHostname'

(putting in your desired User, Passwd, and Hostname, of course.)

After shell relogin, you should be able to simply do

mysql

... which will use your alias and connect to the DB and ignore any passwords in .my.cnf files.

Security note: If there are other users on your server, you might want to chmod 700 your profile script so the password is not as easily accessed by others. Any admin with root or sudo will be able to see it still; no way around that.

Andere Tipps

use following command to set login path first

mysql_config_editor set --login-path=lgpath --user=root -p
password

and then use below command to login mysql

mysql --login-path=lgpath

Help about mysql login path options can bee seen by

mysql_config_editor set --help

I had the same issue as OP, but the answers in this thread confused me. Vinay Mandala's link actually worked for me. Reposted here for clarity.

My issue:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

It proves that mysql_config_editor does not handle special characters in the password properly.

Solution:

When mysql_config_editor prompts you for the password, make sure that you surround the password in double quotes ("). Afterwards, you can login just fine.

I was getting this error, except it said (using password: YES)

The reason as mentioned by Giovanni was because of a "#" in the password. I found that a workaround is to insert quotes around your password when prompted. The same restriction exists with plain-text passwords using .my.cnf.

The Nawaz answer is correct. I have little to add. I suggest you do some attempts with the environment variable MYSQL_TEST_LOGIN_FILE to crate a new configuration file, just in case the default file is corrupt. Use also --no-defaults to skip .cnf files. If the password contains the char #, mysql login-path doesn't work.

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test

I am encountering a similar issue as the original poster. I suspect it has to do with characters in the password which do not get encrypted/decrypted properly.

To confirm try changing the password to something simple and see if this issue goes away.

I had this problem with a shell script. My script was changing the $HOME value and this caused the --login-path=*** to appear to be ignored. When I stopped changing the $HOME value then it started working.

NOTE if you are trying to run the pathunder the linux user root -- You cannot simply use sudo. You must log in as root IE

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

Also as mentioned in other posts here .. You must use double quotes around your mysql password if it contains anything other than alphanumeric characters.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top