MYSQL设置远程账户登陆总结
7.
设置用户与库的权限 4
----
作者
Attilax
,
1466519819@qq.com---
为了给MYSQL
用户设置一个远程连接权限
,
经历了很多曲折
..
特此纪录下来
..
先是玉到了
2003
错误
ERROR 2003 (HY00
原因是MySQL
考虑到安全因素,默认配置只让从本地登录
打开 /etc/mysql/my.cnf
文件,找到
bind-address = 127.0.0.1
修改为
bind-address = 0.0.0.0
重启mysql : sudo /etc/init.d/mysql restart
再次连接,
发生错误
1045
A:
原因是没有给登录用户名设置远程主机登录的权限。
还有种可能是你需要重设下密码....
可能是授权操作引起这种后遗症
..
在本地用 root
登录
: mysql -u root -p
update user set Host = '%' where User = 'username';
给这个设置权限需要ROOT
用户登录才行
.
可惜
ROOT
密码不记得了
.
取回ROOT
密码并设置远程登录
mysqld_safe --skip-grant-tables &
mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
设置 ROOT
远程连接
update user set host = '%' where user='root';
查看进程
,
可看到
MYSQLD_SAFE
与
MYSQL
进程
,
此时
MYSQL
可正常使用
,
不过查看参数
,
可看到
--skip-grant-tab
输入mysqld_safe命令行,
要立马输入
mysql -u root mysql,
不得有误
..
或者新开一个窗口也可
.
执行
UPDATE
时出现
1062
错误
RROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
如果执行
update
语句时出现
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
错误,说明有多个
ROOT
用户纪录在
USER
表中了
.
需要
select host from user where user = 'root';
查看一下
host
是否已经有了
%
这个值,有了就可以了
.
mysql> select host,user from user where user='root';
+-----------------------+------+
| host | user |
+-----------------------+------+
| % | root |
| 127.0.0.1 | root |
| ::1 | root |
| localhost.localdomain | root |
然后用
ROOT
用户登录更改用户账户的远程连接权限时
.
出现提示:
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
。
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
。
是因为
mysql
数据库的
user
表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是
root
,但实际是匿名登录的,通过错误提示里的
''@'localhost'
可以看出来,于是解决办法见
先关闭
MYSQL
进程
..
然后
# mysqld_safe --skip-grant-table
屏幕出现:
Starting demo from .....
此时要记得
,
紧接着输入
# mysql -u root mysql
mysql> delete from user where USER='';
mysql> FLUSH PRIVILEGES;
如果出现
Starting demo from ..
后
..
先输入其它命令
,
再用
mysql -u root mysql .
它又会出现这个错误了
.
然后
KILL
掉
MYSQL
进程
,..
重启正常的进程
..
设置用户远程主机连接权限
update user set host = '%' where user='fanzkcom_fanzk';
FLUSH PRIVILEGES;
但是在实际连接中,
虽然可以连接
,
但是去没有所在库的权限
,
晕
.
只好接下来设置权限
设置用户与库的权限
grant all privileges on fanzkcom_fanzk.* to fanzkcom_fanzk@'%' identified by '1234';
FLUSH PRIVILEGES;
百分号两边要有单引号
,
否则语法错误
然后连接时
,
竟然提示
1045 错误了.
晕
,,
想了半天
,
还是重设下密码试下
.
update mysql.user set password=password('XXX') where User="fanzkcom_fanzk"
flush privileges;
竟然好了
.
晕
.
也不知道为什么设置授权会改动了密码了呢
.
奇怪
..
应该是
MYSQL
的
BUG
use mysqlmysql>
select
host, user
from
user;
将相应用户数据表中的host字段改成'%';
update user
set
host=
'%'
where
user=
'root'
;
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
不予理会
flush privileges;
重新远程连接OK