【问题标题】:Why do I get "Access denied for user 'root'@'localhost'"?为什么我会收到“用户 'root'@'localhost' 的访问被拒绝”?
【发布时间】:2013-08-26 23:33:53
【问题描述】:

我正在使用此代码连接到 MySQL 数据库:

username="root"
password="admin"
host="localhost"
db="one"
Mysql.new(host,username,password,db)

执行代码时出现此错误:

Access denied for user 'root'@'localhost' (using password: YES)

如果我使用Mysql.new('localhost','root','admin','one'),那么它工作正常。

当我打印所有变量时,会打印正确的值。

请帮我找出问题所在。

【问题讨论】:

  • 我不明白为什么这是一个 Sinatra 或 Ruby 问题。看起来您的 MySQL 数据库密码与您认为的不同。除非您要向我们展示您的 root 帐户的配置及其在数据库中的密码,以便我们可以将其与您发送的内容进行比较,否则我们真的无法为您提供很多帮助。我建议仔细阅读MySQL account management documentation;在管理帐户方面,MySQL 并不是最直接的 DBM。
  • 我在 ruby​​ 中使用此代码。 no mysql 数据库密码不一样。如果我使用 Mysql.new('localhost','root','admin','one') 那么它工作正常。
  • 这闻起来很像:stackoverflow.com/questions/6081339/… 阅读右侧的“相关”问题。

标签: mysql ruby sinatra


【解决方案1】:

基本故障排除 101:

如果文字字符串有效,而变量赋值无效,则怀疑您的变量赋值;其中一个可能有问题,例如隐形字符。

试试:

vars = ('localhost','root','admin','one')
Mysql.new(*vars)

那就试试吧:

vars = %w(localhost root admin one)
Mysql.new(*vars)

或:

host, username, password, db = %w(localhost root admin one)
Mysql.new(host, username, password, db)

或:

host, username, password, db = 'localhost','root','admin','one'
Mysql.new(host, username, password, db)

这个想法是从你知道有效的开始,然后向后工作,直到分配给变量有效,否则它会中断。那时你要么解决了问题(可能不知道为什么),要么你已经知道是什么破坏了它。无论哪种方式,你都领先。

你说:

当我打印所有变量时,会打印正确的值。

你是如何打印变量的?我们看不到您的终端,您也没有向我们提供该信息。如果它是一个不可见的字符,这是复制和粘贴文本时的常见罪魁祸首,它可能不会在打印时出现。检查变量应该会有所帮助,因为它们应该显示为转义值:

password = "root\u00a0"

puts password
# >> root 

puts password.inspect
# >> "root "

puts password.chars
# >> r
# >> o
# >> o
# >> t
# >>  

puts password.unpack('C*').map{ |s| s.to_s(16) }
# >> 72
# >> 6f
# >> 6f
# >> 74
# >> c2
# >> a0

否则,我回到我原来的评论,这是您如何设置 MySQL 根帐户的问题,您应该阅读“Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)”。

【讨论】:

  • 哦,是的,当我执行下面的语句 puts password.inspect 我得到了 "admin\n" 。你能告诉我如何删除 \n 吗?多谢。你已经给出了这么棒的调试技巧:)
  • 是的,我得到了 password.gsub("\n",'')。这个声明解决了我的问题。谢谢哥们!
  • 如果您包含一小段代码准确重现了问题,我们可以在一分钟内解决问题。听起来您正在使用gets 从键盘读取信息,或者错误地读取文件。要么是一个微不足道的修复。
  • 你是 ri8。我必须放一段代码。是的,我正在从配置文件中读取用户名和密码。
猜你喜欢
  • 2013-07-28
  • 2023-03-20
  • 2017-10-04
  • 2013-08-22
  • 2015-07-04
  • 2017-03-14
  • 1970-01-01
相关资源
最近更新 更多