MYSQL 失去所有权限

Posted

技术标签:

【中文标题】MYSQL 失去所有权限【英文标题】:Lost All Privileges in MYSQL 【发布时间】:2012-02-17 21:34:39 【问题描述】:

我在本网站和许多其他论坛上以多种形式看到过同样的问题。但是,我已经尝试了所有解决方案,但仍然有相同的结果。我很确定我过去曾经在这个 mysql 服务器上拥有 root 访问权限,我什至能够使用 phpMyAdmin 工具在其他查询中创建数据库。现在,当我转到 phpMyAdmin 并单击数据库时,我受到了欢迎:

如果我使用命令工具,我可以使用以下方式登录:

mysql -u root -p

系统提示我输入密码,我这样做了。当我尝试做其他事情时,说:

mysql> SELECT user, host FROM mysql.user;

I get the following:
ERROR 1142 (42000): SELECT command denied to user 'root'@'localhost' for table 'user'

我也关注了这篇文章 (http://benrobb.com/2007/01/15/howto-remote-root-access-to-mysql/),因为是的,我正在从远程机器 ssh 到这个 MySQL 服务器。同样,当我尝试时:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

以各种形式迎接我的是一个讨厌的:

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

即使我输入了与登录时相同的密码!还要提一下昨天更新了我的梨资源,不知道是不是这个乱七八糟的原因……

如果有人可以指导我,我将不胜感激。感谢您的所有时间和考虑。

艾尔莎

****更新**** 在尝试排除故障和运行 mysqld 时,我现在无法启动服务器备份!每次我跑:

/etc/init.d/mysql start
Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!

我该怎么办?

【问题讨论】:

我忘了说我也做过:mysql> SHOW GRANTS; +-------------------------------------------------- -------------------------------------------------- ----------+ |授予 root@localhost | +-------------------------------------------------- -------------------------------------------------- ----------+ |将 . 上的使用权授予 'root'@'localhost' 由密码识别 | +-------------------------------------------------- -------------------------------------------------- ----------+ 1 行在集合中(0.00 秒) 您的 MySQL 服务器是如何安装/启动的?有一个选项可以让它在启动时忽略授权表,但它有你描述的副作用...... 哎呀,不幸的是我没有安装它。无论如何,我可以获得这些信息吗?另外,我在使用命令 /etc/init.d/mysql start/stop 之前已经停止并启动了它,如果它起作用的话.. 听起来您是通过某人托管的?或许可以尝试联系您的提供商,看看他们是否能做些什么? 不,我将它托管在内部,我只是没有进行安装。我被赋予了基本上是管理员的任务,但我无法解决这个问题...... 【参考方案1】:

由于您对客户端具有本地访问权限,因此您可能会尝试使用 mysqladmin 重置 root 密码:

> mysqladmin password yournewrootpassword

如果您可以成功登录,则可能需要再次授予 root 访问权限,然后才能访问任何数据库:

GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'yournewrootpassword' WITH GRANT OPTION;

【讨论】:

感谢您的回答,但我得到:mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)' 【参考方案2】:

命令GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; 仅在您以拥有所有权限的用户身份登录时才有效...

由于您没有GRANT 的权限,在您的情况下,上述语句将不起作用...请联系管理员并获取 ACCESS 以连接...

【讨论】:

【参考方案3】:

感谢大家的反馈,我终于明白了大部分。解决问题

/etc/init.d/mysql start
Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!

我做到了:

ps aux | grep mysql

这给了我:

root     15265  0.0  0.1   3896  1284 pts/10   S    12:41   0:00 /bin/sh /usr/bin/mysqld_safe
mysql    15302  1.6  2.8 132532 29600 pts/10   Sl   12:41   0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root     15303  0.0  0.0   3008   608 pts/10   S    12:41   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     16160  0.0  0.0   3120   708 pts/10   R+   12:42   0:00 grep mysql

然后我做了:

kill -9 15265
kill -9 15302 

之后我就可以使用以下命令启动 MySQL:

/etc/init.d/mysql start

从那里我找到了这篇文章: https://help.ubuntu.com/community/MysqlPasswordReset 对我来说神奇的是:

/usr/sbin/mysqld --skip-grant-tables --skip-networking &

我能够关注该主题并且也做到了:

GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'yournewrootpassword' WITH GRANT OPTION;

唯一有点奇怪的是,除了 root 需要的其他权限之外,root 仍然无权从 phpMyAdmin 创建数据库。但是,我可以从命令行创建数据库,现在我可以忍受了!

再次感谢大家的宝贵时间和所有帮助!

【讨论】:

【参考方案4】:

停止您的 MySQL 服务(UNIX 风格):

/etc/init.d/mysqld stop 

以特权启动您的 MySQL:

/usr/bin/mysqld_safe  --skip-grant-tables

使用你的 root 用户连接到 mysql 数据库

/usr/bin/mysql -uroot -p mysql

更新root权限

update mysql.user
set Select_priv='Y',
    Insert_priv='Y',
    Update_priv='Y',
    Delete_priv='Y',
    Create_priv='Y',
    Drop_priv='Y',
    Reload_priv='Y',
    Shutdown_priv='Y',
    Process_priv='Y',
    File_priv='Y',
    Grant_priv='Y',
    References_priv='Y',
    Index_priv='Y',
    Alter_priv='Y',
    Show_db_priv='Y',
    Super_priv='Y',
    Create_tmp_table_priv='Y',
    Lock_tables_priv='Y',
    Execute_priv='Y',
    Repl_slave_priv='Y',
    Repl_client_priv='Y',
    Create_view_priv='Y',
    Show_view_priv='Y',
    Create_routine_priv='Y',
    Alter_routine_priv='Y',
    Create_user_priv='Y',
    Event_priv='Y',
    Trigger_priv='Y' 
where User='root';

之后,您只需停止 MySQL 服务并重新启动即可。

【讨论】:

以上是关于MYSQL 失去所有权限的主要内容,如果未能解决你的问题,请参考以下文章

如何设置mysql的权限为所有的用户权限

MySQL 权限问题 允许所有网络的连接

撤销 MySQL 数据库上所有用户的所有权限

mysql权限管理

MySql权限管理

为除一个/几个表之外的所有表授予 [几乎] 所有 mySQL 权限