我创建了一个数据库和一个用户,并允许通过以下方式访问:
create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试连接到 MySQL 时,出现以下错误:
$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
如果“%”是通配符,那么它不会也启用本地主机吗?但是,如果我没有指定我想使用密码,那么我可以很好地连接到数据库,这是没有意义的,因为我在创建用户时指定了密码。
Zor*_*che 19
尝试与 mysql -u someuser -p -h 127.0.0.1.
如果您无需密码即可连接,则要么您已将凭据保存在 .my.cnf 中,要么您已创建了一个无需密码即可访问的帐户。
mysql 文档中的此评论也可能相关。
http://dev.mysql.com/doc/refman/5.1/en/access-denied.html
如果您无法弄清楚为什么会拒绝访问,请从用户表中删除所有主机值包含通配符的条目(包含“%”或“_”字符的条目)。一个非常常见的错误是插入一个新条目,其中 Host='%' 和 User='some_user',认为这允许您指定 localhost 从同一台机器连接。这不起作用的原因是默认权限包括一个带有 Host='localhost' 和 User='' 的条目。因为该条目的主机值 'localhost' 比 '%' 更具体,所以从 localhost 连接时,它优先于新条目使用!正确的步骤是插入第二个条目,其中 Host='localhost' 和 User='some_user',
小智 7
如果您无法使用 someuser@'%' 连接到 mysql,其中 '%' 是主机名的通配符,请确保您的用户表中没有 ''@localhost 条目。使用以下 SQL 语句进行确认:
mysql> SELECT * FROM user WHERE user='' AND host='localhost';
Run Code Online (Sandbox Code Playgroud)
如果 ''@localhost 存在,则通过发出以下 SQL 语句将其删除:
mysql> DELETE FROM user WHERE user='' AND host='localhost';
Run Code Online (Sandbox Code Playgroud)
然后最后
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
现在 someuser@'%' 将连接到数据库。
小智 0
flush privileges;创建用户后运行了吗?如果不这样做,则直到服务器重新启动后才会对用户/权限进行更改。
然后,检查您是否没有 '%'@'localhost' 条目。
| 归档时间: |
|
| 查看次数: |
40978 次 |
| 最近记录: |