首先让我提一下,我已经经历了许多建议的问题,并没有找到相关答案。这就是我正在做的事情。
我已连接到我的Amazon EC2实例。我可以使用以下命令使用MySQL root登录:
mysql -u root -p
然后我使用主机%
创建了一个新的用户帐单CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
授予用户账单的所有权限:
grant all privileges on *.* to 'bill'@'%' with grant option;
然后我退出root用户并尝试使用bill:
登录mysql -u bill -p
输入正确的密码并收到此错误:
ERROR 1045(28000):用户'账单'@'localhost'拒绝访问(使用密码:是)
答案 0 :(得分:405)
您可能有匿名用户''@'localhost'
或''@'127.0.0.1'
。
根据the manual:
当可能存在多个匹配项时,服务器必须确定哪个匹配项 他们使用。它解决了这个问题如下:(...)
- 当客户端尝试连接时,服务器按排序顺序查看 [表mysql.user] 行。
- 服务器使用与客户端主机名和用户名匹配的第一行。
(...) 服务器使用排序规则来排序最具体的主机值的行。 文字主机名 [例如'localhost'] 和IP地址是最具体的。
因此,当从'[any_username]'@'%'
连接时,这样的匿名用户会“屏蔽”任何其他用户,例如localhost
。
'bill'@'localhost'
与'bill'@'%'
匹配,但会在之前匹配(例如)''@'localhost'
。
推荐的解决方案是放弃这个匿名用户(这通常是一件好事)。
以下编辑主要与主要问题无关。这些仅用于回答本主题中其他评论中提出的一些问题。
修改1
通过套接字验证为'bill'@'%'
。
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock Welcome to the MySQL monitor (...) mysql> SELECT user, host FROM mysql.user; +------+-----------+ | user | host | +------+-----------+ | bill | % | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +------+-----------+ 4 rows in set (0.00 sec) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | bill@% | +----------------+----------------+ 1 row in set (0.02 sec) mysql> SHOW VARIABLES LIKE 'skip_networking'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | skip_networking | ON | +-----------------+-------+ 1 row in set (0.00 sec)
修改2
完全相同的设置,除了我重新激活网络,我现在创建一个匿名用户''@'localhost'
。
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql Welcome to the MySQL monitor (...) mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass'; Query OK, 0 rows affected (0.00 sec) mysql> Bye root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ --socket=/tmp/mysql-5.5.sock ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -h127.0.0.1 --protocol=TCP ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -hlocalhost --protocol=TCP ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
编辑3
与编辑2中的情况相同,现在提供匿名用户的密码。
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost Welcome to the MySQL monitor (...) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | @localhost | +----------------+----------------+ 1 row in set (0.01 sec)
结论1,来自编辑1:可以通过套接字验证为'bill'@'%'
。
结论2,来自编辑2:无论是通过TCP连接还是通过套接字连接都不会对身份验证过程产生影响(除了'something'@'localhost'
通过套接字之外,其他人无法像其他任何人一样连接)。
结论3,来自编辑3:虽然我指定了-ubill
,但我被授予了匿名用户的访问权限。这是因为上面提到的“排序规则”。请注意,在大多数默认安装中,a no-password, anonymous user exists(并且应该加以保护/删除)。
答案 1 :(得分:131)
尝试:
~$ mysql -u root -p
Enter Password:
mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
答案 2 :(得分:67)
当你跑步时
mysql -u bill -p
并收到此错误
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
mysqld希望您以bill@localhost
尝试创建bill@localhost
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
如果要远程连接,则必须使用TCP / IP指定DNS名称,公共IP或127.0.0.1:
mysql -u bill -p -hmydb@mydomain.com
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP
登录后,请运行
SELECT USER(),CURRENT_USER();
USER()报告您如何尝试在MySQL中进行身份验证
CURRENT_USER()报告如何从 mysql.user 表
中允许您在MySQL中进行身份验证这将使您更好地了解允许您登录mysql的方式和原因。为什么这个观点很重要?它与用户身份验证订购协议有关。
以下是一个示例:我将在桌面MySQL上创建一个匿名用户
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| lwdba | % |
| mywife | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)
mysql> grant all on *.* to x@'%';
Query OK, 0 rows affected (0.02 sec)
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| lwdba | % |
| mywife | % |
| x | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)
mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| | % |
| lwdba | % |
| mywife | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)
mysql>
确定以匿名用户身份登录:
C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user(),current_user();
+---------------+----------------+
| user() | current_user() |
+---------------+----------------+
| rol@localhost | @% |
+---------------+----------------+
1 row in set (0.00 sec)
mysql>
身份验证排序非常严格。它从最具体到最低的检查。 I wrote about this authentiation style in the DBA StackExchange
在必要时,不要忘记显式调用TCP作为mysql客户端的协议。
答案 3 :(得分:15)
当您键入mysql -u root -p
时,您将通过本地unix套接字连接到mysql服务器。
但是,您提供的授权'bill'@'%'
只能奇怪地匹配TCP / IP连接。
如果你想授予对本地unix套接字的访问权限,你需要授予'bill'@'localhost'的权限,这与'bill'@'127.0.0.1'
有点奇怪。您还可以使用TCP / IP与mysql命令行客户端进行连接,以匹配您已授予的权限,例如:运行mysql -u root -p -h 192.168.1.123
或您的邮箱所具有的本地IP地址。
答案 4 :(得分:14)
超级晚了
我尝试了所有这些其他答案并运行了许多不同版本的mysql -u root -p
但从未运行过
mysql -u root -p
只需按[ENTER]
输入密码即可。
一旦我做到了,它就有效了。希望这有助于某人。
答案 5 :(得分:14)
如果您忘记了密码或想要修改密码。您可以按照以下步骤操作:
1:停止你的mysql
[root @maomao~] #service mysqld stop
停止MySQL:[确定]2:使用“--skip-grant-tables”重启mysql
[root @ mcy400~] #mysqld_safe --skip-grant-tables
中的数据库启动mysqld守护进程
[root @ cy400~]#用/ var / lib / mysql3:打开一个新窗口并输入mysql -u root
[root @ cy400~] #mysql -u root
欢迎使用MySQL监视器。命令以;结尾;或\ g。4:更改用户数据库
的MySQL>使用mysql
读取表信息以完成表和列名称 您可以关闭此功能以使用-A更快地启动 数据库已更改5:修改密码新密码应输入"()"
的MySQL>更新用户设置密码=密码(' root123')其中user =' root&#39 ;;
查询OK,3行受影响(0.00秒)
匹配的行数:3已更改:3警告:06:刷新
的MySQL>冲洗权限;
7:退出
的MySQL>退出 再见
8:重启mysql
[root @ cy400~] #service mysqld restart;
停止MySQL:[确定]
启动MySQL:[确定]
Bingo!您可以使用您的用户名和新密码连接数据库:
[root@cy400 ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor. Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye
答案 6 :(得分:14)
我的案例中的一个相关问题是尝试使用以下方式进行连接:
mysql -u mike -p mypass
空白显然允许在-u#uname#之间,但在-p和#password#
之间非因此需要:
mysql -u mike -pmypass
否则在-p mypass 之间有空白区域mysql将'mypass'作为 db 名称
答案 7 :(得分:14)
避免一个主要问题...你的问题可能是你错过了密码周围的引号。至少那是我的情况,绕了我3个小时。
[client]
user = myusername
password = "mypassword" # <----------------------- VERY IMPORTANT (quotes)
host = localhost
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
搜索&#34;这是一个典型的用户选项文件:&#34;并看到他们在那里陈述的例子。祝你好运,我希望能节省一些时间。
答案 8 :(得分:12)
解决方案是删除匿名(任意)用户!
我在其他人的服务器设置上也遇到了同样的问题。我通常不会在安装MySQL时选择创建匿名用户,所以没有注意到这一点。最初我以“root”用户身份登录并创建了几个“普通”用户(也就是用户只在dbs上使用其用户名作为前缀的权限),然后注销,然后继续验证第一个普通用户。我无法登录。既不通过phpMyAdmin,也不通过shell。事实证明,罪魁祸首是这个“任何”用户。
答案 9 :(得分:5)
我找到的最佳解决方案是。
我的用户是声纳,每当我尝试从外部或其他机器连接到我的数据库时,我都会收到错误
ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES)
另外,当我从另一台机器和Jenkins作业尝试这个时,我的访问URL是
alm-lt-test.xyz.com
如果您想远程连接,可以使用以下不同方式指定它:
mysql -u sonar -p -halm-lt-test.xyz.com
mysql -u sonar -p -h101.33.65.94
mysql -u sonar -p -h127.0.0.1 --protocol=TCP
mysql -u sonar -p -h172.27.59.54 --protocol=TCP
要使用URL访问它,您只需执行以下查询。
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar';
答案 10 :(得分:3)
当您的密码包含一些特殊字符(如@,$等)时,也会发生这种情况。 为避免这种情况,您可以用单引号包装密码:
$ mysql -usomeuser -p's0mep@$$w0Rd'
或者在进入时不要使用密码。将其留空,然后在终端询问时输入。这是推荐的方式。
$ mysql -usomeuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 191
Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
答案 11 :(得分:3)
只是想让你知道我收到同样错误的异常情况。也许这有助于未来的人。
我开发了一些基本视图,在开发站点创建并将它们传输到生产站点。那个星期晚些时候我改变了一个PHP脚本,突然出现了一些错误,即用户&#39; local-web-user&#39; localhost&#39;拒绝访问。数据源对象没有改变,所以我专注于MySQL中的数据库用户,同时担心有人入侵了我的网站。幸运的是,网站的其余部分似乎没有受到伤害。
后来证明这些观点是罪魁祸首。我们的对象传输是使用另一个(和远程:admin @ ip-address)用户完成的,而不是本地网站用户。因此,视图是通过&#39; admin&#39; @&#39; ip-address&#39;创建的。作为定义者。视图创建SECURITY默认为
SQL SECURITY DEFINER
当local-web-user尝试使用视图时,它会发现定义者缺少使用表的权限。安全性更改为:
SQL SECURITY INVOKER
问题已经解决。实际问题与基于错误消息的预期完全不同。
答案 12 :(得分:3)
它之间的区别是:
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
和
CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';
检查:
mysql> select user,host from mysql.user;
+---------------+----------------------------+
| user | host |
+---------------+----------------------------+
| bill | % | <=== created by first
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| bill | localhost | <=== created by second
+---------------+----------------------------+
命令
mysql -u bill -p
隐含于&#39; bill&#39; @&#39; localhost&#39;而不是&#39; bill&#39; @&#39;%&#39;。
&#39; bill&#39; @&#39; localhost&#39;
没有权限你得到错误:
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
解决问题:
CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';
grant all privileges on . to 'bill'@'localhost' with grant option;
答案 13 :(得分:3)
bind-address = 127.0.0.1
答案 14 :(得分:2)
我有一个类似的问题-第一次尝试以root身份进入MySql时,它告诉我访问被拒绝。原来我忘了使用sudo ...
因此,如果首次尝试失败,请尝试:
sudo mysql -u root -p
,然后输入密码,这应该可以。
答案 15 :(得分:2)
调试摘要
您很可能在工作中多次遇到此问题。由于输入的用户名或密码不正确,我很多时候都会遇到此问题。虽然这是其中一个原因,但还有很多机会可能会遇到这个问题。有时,它看起来非常相似,但是当你深入挖掘时,你会发现导致这个错误的多种因素。本文将详细解释大多数常见原因并解决此问题。
可能的原因:
这是此错误的最常见原因。如果您错误地输入了用户名或密码,肯定会收到此错误。
解决方案:
此类错误的解决方案非常简单。只需输入正确的用户名和密码即可。此错误将得到解决。如果您忘记了密码,可以重置用户名/密码。 如果您忘记了admin / root帐户的密码,有很多方法可以重置/重新获取root密码。如果忘记root密码,我将发布另一篇关于如何重置root密码的帖子。
MySQL为用户访问提供基于主机的限制作为安全功能。在我们的生产环境中,我们过去仅将访问请求限制为应用程序服务器。此功能在许多生产场景中非常有用。
<强>解决方案:强>
当您遇到此类问题时,请先检查mysql.user表,检查是否允许您的主机。 如果未定义,则可以将新记录更新或插入mysql.user表。 通常,由于安全问题,禁用从远程计算机以root用户身份进行访问,这不是最佳做法。 如果您有从多台计算机访问服务器的要求,请仅授予对这些计算机的访问权限。最好不要使用通配符(%)并提供通用访问。 让我更新mysql.user表,现在demouser可以从任何主机访问MySQL服务器。
当您尝试访问的用户不存在于MySQL服务器上时,会发生此类错误。
<强>解决方案:强>
当您遇到此类问题时,只需检查用户是否存在于mysql.user表中。如果记录不存在,则用户无法访问。如果要求该用户访问,请使用该用户名创建新用户。
要点
建议在定义用户主机时使用通配符,尝试使用确切的主机名。
禁用远程计算机的root登录。
使用代理用户概念。
与此主题相关的其他概念很少,并且深入了解这些主题的详细信息是本文的不同之处。我们将在以后的文章中研究以下相关主题。
我希望这篇文章能帮助您修复MySQL中用户拒绝的MySQL错误代码1045访问权限。
答案 16 :(得分:2)
不确定是否有其他人会发现这有用,但我遇到了同样的错误并搜索了所有匿名用户...而且没有任何人。问题最终是用户帐户被设置为“要求SSL” - 我在PHPMyAdmin中找到了这一点,方法是转到“用户帐户”并单击“为用户编辑权限”。一旦我取消选中此选项,一切都按预期工作!
答案 17 :(得分:2)
对我来说,这个问题是由MySQL 5.7.2的新功能引起的:如果explicit priority_queue(const Compare& x = Compare(), Container&& = Container());
字段为空,则user
条目被忽略。
将其设置为例如plugin
重新启用它们:
mysql_native_password
请参阅«身份验证说明»下的the release notes for MySQL 5.7.2。
出于某种原因(可能是因为我的4.1之前的密码哈希被删除了),UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;
脚本没有设置默认的插件值。
我在mysql_upgrade
注意到以下警告消息后发现:
[警告]用户输入'foo'@'%'的插件值为空。用户将被忽略,任何人都无法再使用此用户登录。
我在这里发布这个答案,可能会让某人像我一样使用同样荒谬的时间。
答案 18 :(得分:2)
我发现表面上出现的另一种情况是边缘情况。我可以通过SELECT INTO .. OUTFILE以root身份导出到文件系统,但不能以常规用户身份导出。尽管这可能是权限问题,但我已经看过了,没有发现特别明显的地方。我所能说的是,以对相关数据库具有所有权限的普通用户身份执行查询,将返回导致该主题的拒绝访问错误。当我在一个旧项目中找到成功使用SELECT INTO…OUTFILE的记录时,我注意到我是以root用户身份登录的。果然,当我以root身份登录时,查询按预期运行。
答案 19 :(得分:2)
现在!的解决方案:
MySQL错误1045(28000):用户'user'@'localhost'的访问被拒绝 (使用密码:是);
Wampserver 3.2.0的新安装或升级
大概xamp
使用mariaDB
作为默认值是很好的。
Wamp
服务器随附mariaDB
和mysql,并在3306端口上默认安装mariaDB
,在3307端口(有时为3308)上安装mysql。
连接到mysql
!
在安装时,它要求使用mariaDB
或MySql
,但是mariaDB被默认选中,您无法更改,请选中mysql
选项并安装。
安装完成后,两者都将在默认端口3306上运行mariaDB
,并在另一个端口3307或3308上运行mysql
。
右键单击wampserver
图标,其运行应在右下角,转到工具,然后查看正确的mysql
运行端口。
并将其包含在与以下数据库相同的数据库连接中:
$host = 'localhost';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$port = '3308';//Port
$dsn = "mysql:host=$host;dbname=$db;port=$port;charset=$charset"; //Add in connection
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
Note :
我正在使用pdo。
更多信息,请参见此处:https://sourceforge.net/projects/wampserver/
答案 20 :(得分:2)
我希望你删除mysql中的debian-sys-maint用户没有造成更多伤害
让你的mysql守护进程以正常方式运行。启动你的mysql客户端,如下所示
mysql -u debian-sys-maint -p
在另一个终端,cat
文件/etc/mysql/debian.cnf
。该文件包含密码;在提示时粘贴该密码。
答案 21 :(得分:0)
操作系统:Windows
我的错误消息是:“ MySQL错误1045(28000):用户'root'@'localhost'的访问被拒绝(使用密码:是)”
我的原因不是使用administrator permission
所以我的解决方案:使用administrator permission
打开cmd,然后它可以工作。
答案 22 :(得分:0)
所以对我来说,问题与我正在映射的端口有关。
3306 => 3306 不工作(因为我有一个本地 mysql 正在运行)
3307 => 3306 有效!
这是在建立 ssh 隧道的上下文中:
ssh -N -L 3307:rdsDns:3306 ec2User@ec2Dns -i key.pem -v
3307 是本地端口,3306 是远程端口。
答案 23 :(得分:0)
对我来说,进入mysql时没有指定 view.loadUrl ("javascript:(function() { "+"document.getElementsByClassName('body')[0].style.display='none'; "+ "document.getElementsByClassName('td-fix-index ')[0].style.display='block';"+"} )()");
参数。
-p
我没问题,但是没有密码调用mysql是错误的。
答案 24 :(得分:0)
对我来说,root用户具有默认密码
我使用ALTER USER 'root'@'localhost' IDENTIFIED BY 'new Password';
更改了密码,并且有效
答案 25 :(得分:0)
我遇到了类似的问题,因为我的密码包含“;”当我在第一时间创建密码时,char破坏了密码。谨慎行事对您有帮助。
答案 26 :(得分:0)
更新:在v8.0.15(可能是此版本)上,PASSWORD()
功能不起作用。
您必须:
sudo mysqld_safe --skip-grant-tables
mysql -u root
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
答案 27 :(得分:0)
如果MySQL在不区分大小写的* OS(例如Windows)上运行,也会发生这种情况。
例如我发现尝试使用这些凭据连接到数据库失败:
mysql>将databaseV105。*上的select授予“ s3curepa5wrd”标识的“ specialuser”;
$ mysql -specialuser'-p's3curepa5wrd'-h10.61.130.89 databaseV105
错误1045(28000):用户'specialuser'@'10.0.1.113'的访问被拒绝(使用密码:是)
但是成功了:
mysql>将数据库v105。*上的select授予由's3curepa5wrd'标识的'specialuser';
$ mysql -specialuser'-h10.300.300.400数据库V105 -p
输入密码:
答案 28 :(得分:0)
这可能只适用于极少数人,但是可以。请勿在密码中使用惊叹号(!)。我做到了,并使用MariaDB收到上述错误。当我将其简化为仅数字和字母时,它可以工作。其他字符(例如@和$)可以正常工作-我在同一实例上的其他用户中使用了这些字符。 address的第五次回应使我得以解决。
答案 29 :(得分:0)
我遇到了同样的错误。无效的设置如下:
define("HOSTNAME", "localhost");
define("HOSTUSER", "van");
define("HOSTPASS", "helsing");
define("DBNAME", "crossbow");
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);
下面经过编辑的设置可以使它起作用。注意区别吗?
define('HOSTNAME', 'localhost');
define('HOSTUSER', 'van');
define('HOSTPASS', 'helsing');
define('DBNAME', 'crossbow');
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);
区别在于双引号。与PHP相比,它们在PHP中似乎非常重要,并且在转义字符,设置URL以及现在将参数传递给函数时会产生影响。它们比较漂亮(我知道),但始终尽可能使用单引号,然后如有必要,可以将双引号嵌套在其中。
当我在Linux机器上而不是Windows环境下测试我的应用程序时出现此错误。
答案 30 :(得分:0)
在窗口中,如何解决ERROR 1045(28000):拒绝访问用户&root;&#39; @&#39; localhost&#39; (使用密码:否)
1) Uninstall mysql from control panel
2)Delete MySql folder from C:\Program Files,C:\Program Files (x86) and C:\ProgramData
3)Install mysql
答案 31 :(得分:0)
我通过删除旧的错误用户'bill'条目解决了这个问题(这是重要的部分:来自 mysql.user 和 mysql.db ),然后创建与之前悲伤的用户相同:
FLUSH PRIVILEGES;
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
FLUSH PRIVILEGES;
工作,用户正在连接。现在我将从中删除一些流行病:)
答案 32 :(得分:-1)
对于Mac用户,如果他们仍有问题(就我的情况而言),我发现此解决方案对我有用:MySQL command line '-bash command not found'
要在macbook终端上使用命令,即mysql
,您需要使用以下命令导出路径:
export PATH=$PATH:/usr/local/mysql/bin/
考虑默认安装,使用以下命令以root用户身份获取mysql提示符:
mysql -u root
否则您使用了错误的root密码。
参考:在OSX上设置MySQL root用户密码
答案 33 :(得分:-1)
当您运行mysql -u bill -p
时,localhost
已解析为您的IP,因为它是127.0.0.1并且在您的/etc/hosts
文件中,因为默认127.0.0.1 localhost
存在。因此,mysql将您解释为bill@localhost
,但未授予bill@'%'
。这就是root
查询结果中select host, user from mysql.user;
用户有2个不同记录的原因。
有两种方法可以解决此问题。
当您尝试登录时,一个是指定/etc/hosts
文件未反向解析的IP。例如,服务器的IP是10.0.0.2
。运行命令mysql -u bill -p -h 10.0.0.2
时,您将能够登录。如果您输入select user();
,则会获得bill@10.0.0.2
。当然,任何域名都不应该在/etc/hosts
文件中解析为此IP。
其次,您需要此特定域名的授予访问权限。对于bill@localhost
,您应该调用命令grant all privileges on *.* to bill@localhost identified by 'billpass';
。在这种情况下,您将能够使用命令mysql -u bill -p
登录。登录后,select user();
命令返回bill@localhost
。
但这仅限于您尝试在同一主机中登录mysql服务器。从远程主机,mysql预期行为,'%'将授予您登录。</ p>
答案 34 :(得分:-1)
确保没有其他运行使用localhost帖子的SQL实例。在我们的例子中,另一个实例在与登录冲突的localhost上运行。关闭它解决了这个问题。
答案 35 :(得分:-1)
MySQL帐户名由用户名和主机名组成,主机名中的“localhost”名称也表示本地主机您可以在主机名或IP地址值中使用通配符“%”和“_”。这些与使用LIKE运算符执行的模式匹配操作具有相同的含义。例如,主机值'%'匹配任何主机名,而值'%。mysql.com'匹配mysql.com域中的任何主机。 '192.168.1。%'匹配192.168.1 C类网络中的任何主机。
以上只是介绍:
实际上,用户'bill'@'localhost'
和'bill'@'%'
都是不同的MySQL帐户,因此两者都应该使用自己的身份验证详细信息,例如密码。
有关更多信息,请参阅http://dev.mysql.com/doc/refman//5.5/en/account-names.html
答案 36 :(得分:-1)
如果您使用的旧版MySQL UI(如SQLYoug)生成密码错误,也会出现问题。
使用SQL脚本创建用户将解决问题。
答案 37 :(得分:-1)
百分号表示所有ip,因此localhost是多余的...不需要本地主机的第二条记录。
实际上,'localhost'在mysql中是特殊的,它意味着通过unix套接字(或我认为的Windows上的命名管道)的连接,而不是TCP / IP套接字。使用%作为主机不包含'localhost'
MySQL用户帐户有两个组件:用户名和主机名。用户名标识用户,主机名指定用户可以连接的主机。组合用户名和主机名以创建用户帐户:
'<user_name>'@'<host_name>'
您可以为主机名指定特定的IP地址或地址范围,或使用百分比字符(“%”)使该用户能够从任何主机登录。
请注意,用户帐户由用户名和主机名定义。例如,'root'@'%'
是与'root'@'localhost'
不同的用户帐户。
答案 38 :(得分:-1)
我有同样的问题,但在我的情况下,解决方案是由eggyal的评论解决的。我也有一个匿名用户,但删除它并没有解决问题。 &#39; FLUSH PRIVILEGES&#39;命令虽然有效。
令我惊讶的是,我使用MySQL Workbench创建了用户,我希望能够执行所有必要的功能来完成任务。