2011-05-04 81 views
2

我试图运行一个GRANT ALL声明:我如何在MySQL中以root @ localhost权限运行?

GRANT ALL ON daisyrepository.* TO [email protected] IDENTIFIED BY 'password_here'; 

我已经跑了使用使用远程桌面服务器本身的这种说法:

  • 的phpMyAdmin
  • MySQL管理
  • 命令行客户端

每次我运行这个语句时,我都会等了以下错误:

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

的信息的比特有关权限的:

根@%

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 

根@本地

ALL PRIVILEGES 

如果我理解正确的话,即使我在服务器上连接,MySQL正在处理我的声明,就像我是从远程位置来的N +

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

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

+0

其中是mysql服务器?在本地主机上?我的意思是,在同一台机器上? – jotapdiez 2011-05-04 15:00:02

+0

是的,我正在使用远程桌面到运行MySQL的服务器。 – TekiusFanatikus 2011-05-04 15:59:34

+0

如果您尝试以root身份执行此操作,会发生什么情况:'将*。*全部授予根'@ root_password'所标识的root @ localhost;'(请确保您输入正确的密码) – 2011-05-04 16:02:43

回答

4

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

如果可以,请从ini文件中删除skip_name_resolve,并确保Abe Petrillo提到您的hosts文件中包含“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文件。

+0

这是否意味着我将拥有3组权限:%,127.0.0.1和localhost?这是规范吗?我应该运行没有skip_name_resolved? – TekiusFanatikus 2011-05-09 11:43:17

+0

--skip-name-resolve:在检查客户端连接时不要解析主机名。只使用IP地址。如果使用此选项,授予表中的所有主机列值必须为IP地址或本地主机。我觉得我应该尝试调查为什么我不能使用命名管道进行连接? – TekiusFanatikus 2011-05-09 12:26:25

+0

@TekiusFanatikus我通常不会有'root'@'%'。如果其他服务器需要连接,请让特定用户拥有锁定的权限。 'root'@'localhost'我们倾向于离开(只要它有一个强密码),因为如果出现任何错误,它是默认的方式。 'root'@'127.0.0.1'仅在您选择保留skip_name_resolve时才需要。我们已经使用和没有服务器。解决ips意味着我们可以将客户端服务器移动到其他ips,而无需更新权限,但是如果本地DNS服务器存在问题,可以阻止某些连接。 – JohnC 2011-05-09 12:31:29