【问题标题】:How can I run with root@localhost privileges in MySQL?如何在 MySQL 中以 root@localhost 权限运行?
【发布时间】:2011-05-04 14:54:36
【问题描述】:

我正在尝试运行 GRANT ALL 语句:

GRANT ALL ON daisyrepository.* TO daisy@localhost IDENTIFIED BY 'password_here';

我已经使用远程桌面在服务器本身上运行了这个语句:

  • PHPMyAdmin
  • MySQL 管理员
  • 命令行客户端

每次运行此语句时,都会出现以下错误:

ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'daisyrepository'

关于特权的一些信息:

root@%

SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, EXECUTE 

root@localhost

ALL PRIVILEGES 

如果我理解正确,即使我已连接到服务器,MySQL 也会将我的语句视为来自远程位置?

编辑#1 分类:我连接的服务器也是运行 MySQL 的地方。

编辑#2 进入 RDP 后,我使用命令行登录 MySQL。如果我运行 select current_user(),我会得到 root@127.0.0.1。 my.ini 文件中也有 skip_name_resolve。

【问题讨论】:

  • mysql服务器在哪里?在本地主机上?我的意思是,在同一台机器上?
  • 是的,我使用远程桌面连接到运行 MySQL 的服务器。
  • 如果你尝试以 root 身份运行会发生什么:GRANT ALL on *.* to root@localhost identified by '$roots_password';(确保输入正确的密码)
  • #1045 - 用户 'root'@'%' 的访问被拒绝(使用密码:YES)
  • 服务器是否有多个网卡(多个IP)。另外,如果您使用 Windows,请确保您的主机文件具有 127.0.0.1 localhost

标签: mysql privileges mysql-error-1044


【解决方案1】:

您似乎总是通过 TCP 连接(而不是 Linux 上的 Unix 套接字或 Windows 上的命名管道)。因为您的 ini 文件中有 skip_name_resolve,服务器不会将 ip 127.0.0.1 反向 DNS 回 localhost,因此您显示的用户是 root@127.0.0.1,而不是 root@localhost。

如果可以,请从 ini 文件中删除 skip_name_resolve 并确保 Abe Petrillo 提到您的主机文件中有“127.0.0.1 localhost”。这应该允许您以 root@localhost 身份连接。如果您需要将 skip_name_resolve 放回去,请确保您运行,

GRANT ALL on *.* to 'root'@'127.0.0.1' identified by '$roots_password' WITH GRANT OPTION;

这应该允许您将 skip_name_resolve 添加回您的 ini 文件。

【讨论】:

  • 这是否意味着我将拥有 3 组权限:%、127.0.0.1 和 localhost?这是常态吗?我应该在没有skip_name_resolved的情况下运行吗?
  • --skip-name-resolve:检查客户端连接时不解析主机名。仅使用 IP 地址。如果使用此选项,授权表中的所有主机列值都必须是 IP 地址或 localhost。我觉得我应该尝试调查为什么我无法使用命名管道进行连接?
  • @TekiusFanatikus 我通常不会有'root'@'%'。如果其他服务器需要连接,请让特定用户具有锁定权限。我们倾向于离开'root'@'localhost'(只要它有一个强密码),因为如果出现任何问题,它是默认的方式。仅当您选择保留 skip_name_resolve 时才需要“root”@“127.0.0.1”。我们已经使用了有和没有的服务器。解析 ips 意味着我们可以将客户端服务器移动到其他 ips 而无需更新权限,但如果本地 DNS 服务器出现问题,则可以阻止某些连接。
  • 当我在运行 MySQL 的机器上进行 RDP 时,我仍然很难理解为什么我无法访问 root@localhost。如果您查看有关 skip-name-resolve (dev.mysql.com/doc/refman/5.1/en/…) 的文档,它会显示 IPs 或 localhost。就我而言,我有一个通配符和本地主机。摆脱通配符可以让我访问本地主机吗?如果我查看dev.mysql.com/doc/refman/5.0/en/connection-access.html,它首先对通配符进行排序,然后是 localhost……所以也许我应该去掉 root@%??
  • @TekiusFanatikus:dev.mysql.com/doc/refman/5.0/en/connection-access.html 说它在任何通配符之前对特定主机进行排序,因此您不必删除 root@ %。问题是 skip_name_resolve 意味着 127.0.0.1 的 TCP 连接永远不会反向 DNS 到 localhost。我们倾向于在 linux 上使用 MySQL,默认情况下在运行本地客户端时使用 unix 套接字。这将用户名设置为@'localhost',因此保留@localhost 条目的原因。我不确定 Windows 在连接命名管道时是否将主机名设置为 localhost,因为我们不以这种方式使用它。
猜你喜欢
  • 2016-12-07
  • 2011-09-01
  • 2011-12-22
  • 2020-10-02
  • 1970-01-01
  • 2010-09-28
  • 2012-12-11
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多