我正在尝试设置用户密码,但在设置之后,我仍然无法以该用户身份登录。
$ mysql -uroot -p mydb
Enter password:
mysql> select user,host,password from mysql.user;
...
webapp | % | *.... |
mysql> show grants for webapp@'%';
GRANT USAGE ON *.* TO 'webapp'@'%' IDNETIFIED BY PASSWORD '*...'
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON 'mydb'.* TO 'webapp'@'%'
mysql> set password for webapp@'%'=PASSWORD('mypassword');
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
$ mysql -uwebapp -p mydb
Enter password:
ERROR 1045 (28000): Access denied for user 'webapp'@'localhost' (using password: YES)
我只是设置密码,它不起作用,发生了什么?
顺便说一下,用户的表只有一个名为'webapp'的条目,其主机是'%'
我正在使用mysql 5.1.67。我也试过重启mysqld,但它仍然不起作用。
答案 0 :(得分:0)
在我们对评论进行的所有测试之后,您遇到的问题是您的服务器上有skip-networking
,这使得它根本不会监听TCP / IP连接。
由于它没有收听TCP / IP连接,因此您的MySQL服务器正在使用套接字进行连接,因此当套接字使用localhost
时,您需要有一个包含localhost
的用户条目。
正如您所测试的那样,添加localhost
授权使用可以解决问题,并且它还定义了这样一个事实:无论您是否拥有localhost
这样的用户,它确实会产生影响。例如,特定的服务器配置。
在您的情况下,运行以完成localhost
授权使用的命令是:
GRANT SELECT,
INSERT,
UPDATE,
DELETE,
EXECUTE
ON 'your_database_name_here'.*
TO 'your_username_here'@'localhost'
IDNETIFIED BY 'your_password_here';
FLUSH PRIVILEGES;
正如进一步参考:
skip-networking:根本不要监听TCP / IP连接。所有与mysqld的交互必须通过Unix套接字完成。对于仅允许本地请求的系统,强烈建议使用此选项。由于您需要允许远程连接,因此应从my.cnf中删除此行或将其置于注释状态。
http://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_skip-networking