连接mysql数据库时报错:Access denied for user 'root'@'localhost' (using password: NO)

我在MyEclipse建个web工程,需要连接数据库,但是每次打开页面就出现上面的错误。我在DBBrowser里面已经通过连接,用户名和密码都是root。我在网上搜到的答... 我在MyEclipse建个web工程,需要连接数据库,但是每次打开页面就出现上面的错误。我在DB Browser里面已经通过连接,用户名和密码都是root。
我在网上搜到的答案都是改密码的,我密码没有问题。请问有啥解决途径?
展开
 我来答
jixiang_83
2017-04-11 · TA获得超过449个赞
知道小有建树答主
回答量:575
采纳率:0%
帮助的人:500万
展开全部
如果密码没有错误,那就是你没有开通访问权限,要去mysql库中的user表中增加相应的权限。
追问
你好,能具体一点吗,我是在myeclipse中用java连接的mysql数据库,是在一个注册程序中需要连接数据库,进行查询和保存数据。另我没法直接打开mysql.exe。虚心求教。
追答
能否通过进入数据库的DOS界面,或者能操作mysql数据库(数据库名是mysql).
如果能,那就在mysql库下中的user表中插入一条权限记录。

mysql>SELECT host, user, password FROM user WHERE user != 'root';
+-----------+---------+-------------------------------------------+
| HOST | USER | PASSWORD |
+-----------+---------+-------------------------------------------+
| localhost | | *A4B6157319038724E3560894F7F932C8886EBFCF |
| % | crawler | *00A51F3F48415C7D4E8908980D443C29C69B60C9|
+-----------+---------+-------------------------------------------+

1,HOST字段中通配符'%'匹配所有主机,如果HOST字段为空,等价于'%'
2,USER字段不支持通配符,但空白的USER字段匹配所有用户
3,服务器在user表中读取权限时,优先匹配最能确定具体主机的纪录,由于'%'匹配所有主机,所以localhost优先于'%'
4,有相同HOST值的记录,优先匹配具体user值的记录。

在上面的示例中,mysql未使用-h选项时,连接本地UNIX套接字(使用-h选项时,连接的是TCP/IP套接字,也就是IP加端口),HOST匹配localhost:
由于用户crawler在user表中,没有host值为localhost的记录,所以优先匹配记录为"所有从localhost登录的用户"在本例中
AnyUser@localhost优先级高于crawler@%,故使用crawler@%的密码在本机无法登录。

当使用'mysql -u crawler -pXXX DBNAME -h 10.10.10.11'时,匹配crawler@%,密码有效。

细心的兄弟可能已经注意到了:

127.0.0.1和localhost是同一台机器,为什么'mysql -u crawler -pXXX DBNAME -h 127.0.0.1'却可以成功登录呢?

更细心的兄弟可能已经猜到答案了:

我启动mysqld时使用了'--skip-name-resolve'参数,此种情况下由于不做域名解析,127.0.0.1和localhost对mysql数据库来讲,是不同的主机,与AnyUser@localhost并不匹配。(所以一般使用'--skip-name-resolve'参数启动mysql数据库时,HOST字段一般使用IP地址)

问题的原因已经找到,要解决这个问题,下面三种方法选一种即可:
1、将AnyUser@localhost记录删除
2、添加一条crawler@localhost记录
3、使用时-h选项指定主机
ksmjava
2017-08-24
知道答主
回答量:26
采纳率:0%
帮助的人:1.2万
展开全部
几个可能:
1. 用户名、密码错误,所以无法访问
2. 数据库端设置了IP访问权限,不能用localhost访问。换成具体的IP地址试试。
3. 数据库端设置了相关操作权限,该用户没有create权限。

mysql -u root -p
mysql>use mysql;
mysql>select 'host' from user where user='root';
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;
mysql>select 'host' from user where user='root';
第一句是以权限用户root登录
第二句:选择mysql库
第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)
第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第五句:刷新MySQL的系统权限相关表
第六句:再重新查看user表时,有修改。。
重起mysql服务即可完成。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
majiguang
2011-04-19 · TA获得超过757个赞
知道小有建树答主
回答量:1024
采纳率:0%
帮助的人:1320万
展开全部
错误提示的信息显示你连接数据库的帐号没有密码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
彼岸花MissLI
2018-01-02
知道答主
回答量:6
采纳率:100%
帮助的人:3.3万
展开全部
如果你的账号和密码都没有错的话,你应该把你报错的那个数据库删除连接,然后在重新新建连接,输入正确的密码就好了。我也遇到此问题,已解决
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式