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 失去所有权限的主要内容,如果未能解决你的问题,请参考以下文章