I can believe fly.

Wednesday, October 13, 2010

mysql连接,访问拒绝

错误信息:Access denied for user 'kscm'@WIN-WP4X5EPPTIO'(useing password:YES)

情景A:
  1. 明明本机上的客户端可以正常连接数据库,但程序部署起来还是报错.
  2. 明明本机的电脑名称WIN-WP4X5EPPTIO已改名了,也重启了电脑,但是连接时还是显示旧的信息..

解答A:
  1. 程序部署连接数据库的账号信息有误
  2. 在my.ini文件中找到[mysqld],在此段的配置信息中添加skip-name-resolve,这样客户端请求连接时就会用IP地址了.


情景B:

用新创建的用户执行一些SQL脚本(仓库新数据库及表),但执行失效,反应过来估计权限不够,应该用root账号.

然后重新想用root账号连接,却怎么也连不上去了.前几分钟还连过一次,现怎么不行了.
解答B:
原以为是像上次出现密码有问题??因此按照以下步骤进行了密码更新:
  1. 首先,在my.ini文件中的[mysqld]段配置信息内加上skip-grant-tables
  2. 重启mysql服务
  3. 来到mysql安装目录下的bin,打开cmd,执行mysql -u root,这时候要你输入密码,回车即可
  4. 在mysql>环境下执行以下几条命令:

mysql>use mysql;

mysql>UPDATE user SET password=PASSWORD("5688") WHERE user='root';

mysql>FLUSH PRIVILEGES;


结果,重新登录仍然无效.
同事说,其实密码是已经改了,大部分跟授权有关.
因此,他按照以下步骤进行了处理:
  1. 首先,在my.ini文件中的[mysqld]段配置信息内加上skip-grant-tables
  2. 重启mysql服务
  3. 来到mysql安装目录下的bin,打开cmd,执行mysql -u root,这时候要你输入密码,回车即可
  4. 在mysql>环境下执行以下命令,目的是让111.111.111.158机子可以用root账号登录

mysql>use mysql;
mysql>update user set host = '111.111.111.158' where user = 'root';
  1. 利用111.111.111.158机子的客户端,竟然可以正常连接.且继续执行以下命令,目的是让本机可以连接

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.111.111.160' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9';
  1. 结果无效,不死心的参考资料继续执行:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD'*00A51F3F48415C7D4E8908980D443C29C69B60C9';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'dubabuild' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9';
  1. 回到本机,执行以下命令行,都一样报"Access denied"的错误信息

mysql -u root -h 10.20.239.160
mysql -u root -h 127.0.0.1
mysql -u root -h localhost
  1. 继续在网络上查找解决的方法,看到一则信息后改变了连接方式即执行mysql -u root -p,

这里候要求你输入密码,直接输入新密码,登录成功.
  1. 回到mysql administrator工具,利用root账号采用新的密码,一样登录成功了.
  2. 然后,利用mysql admini工具,保留%/localhost的授权连接,退出再重新登录正常了.


总结:如果出现类似这样的问题,一检查账号密码是否有误,二检查援权问题.

No comments: