如何将所有权限返回给MySQL中的root用户?
我已经登录到MySQL与使用--skip-grant-tables选项。但我不知道如何将所有权限返回给root用户。如何将所有权限返回给MySQL中的root用户?
错误
SQL查询:
GRANT ALL PRIVILEGES ON *。 *到 'root'@'localhost';
MySQL表示:文件
1290 - MySQL服务器与使用--skip-grant-tables选项运行,以便
它不能执行该语句
错误
SQL查询:编辑
GRANT ALL PRIVILEGES ON *。 *到 'root'@'localhost'WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
MySQL表示:文件
1290 - MySQL服务器与使用--skip-grant-tables选项运行,以便
它不能执行该语句
当你运行MySQL使用--skip-grant-tables
MySQL将不检查任何权限。所以基本上你可以做任何事情。
要回来,你就需要在mysql
数据库运行查询像这样
select * from user where user = 'root'
的root权限只是为了检查是否root用户仍然有 如果确定:
UPDATE user SET Grant_priv = 1, Super_priv = 1 WHERE user = 'root'
你可以重启MySQL后没有--skip-grant-tables
和root用户应该能够做一些补助,以便查询应该工作
如果你无法访问mysql服务器作为根目录,你应该删除或不能恢复mysql.user表中的所有根记录,删除所有这些记录并添加一条新记录。
你应该使用mysql PASSWORD()函数来散列您的明文密码。 查看更多信息http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html
首先停止mysql服务器并使用--skip-grant-tables启动mysqld。
[[email protected] ~]# service mysqld stop; mysqld_safe --skip-grant-tables &
哈希您的明文密码。
mysql> select PASSWORD('CLEARTEXT_PASSWORD');
+-------------------------------------------+
| PASSWORD('CLEARTEXT_PASSWORD') |
+-------------------------------------------+
| *1EADAEB11872E413816FE51216C9134766DF39F9 |
+-------------------------------------------+
1 row in set (0.00 sec)
使用mysql数据库来应用更改。
mysql> use mysql;
删除所有根记录
mysql> delete from user where User='root';
添加新的记录是root用户可以从您的IP地址的所有权限访问。
mysql> insert into `user` VALUES('YOUR_IP_ADDRESS','root','*1EADAEB11872E413816FE51216C9134766DF39F9','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','');
冲洗变化。
mysql> FLUSH PRIVILEGES;
从mysql命令行退出。
mysql> exit;
重新启动mysqld服务。
[[email protected] ~]# /etc/init.d/mysqld restart
如果你运行这个mysql命令/ queries,你会得到一个新的访问mysql服务器。
如果插入操作难以匹配所需的权限列,请参阅下面的答案。复制现有行,如果您只需要一个新的Grant,例如另一个允许主机列。 – user18099 2016-11-04 09:49:04
首先,停止MySQL服务器,然后用--skip-grant-tables
选项启动它。
[[email protected] mysql5.7]# /etc/init.d/mysqld stop
[[email protected] mysql5.7]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --user=mysql
然后,连接到您的实例没有密码:
[[email protected] mysql5.7]# mysql -u root
然后,重置root用户的密码。
mysql> flush privileges;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
mysql> flush privileges;
转为的MySQL正常模式然后连接不需要密码。
如果您--skip-赠款表的目标是插入一个新的授权,可以通过插入在mysql.user行这样做(见其他答案)
如果你的挑战是在给这个新授予所有必需的特权(许多Y/N列),然后您可以复制现有的根授予。并只调整你所需要的。
CREATE TEMPORARY TABLE mysql.tmpUser SELECT * FROM mysql.user WHERE host="old" and user="root";
UPDATE mysql.tmpUser SET host="new" WHERE user = "root";
INSERT INTO mysql.user SELECT * FROM mysql.tmpUser;
人们似乎在这个问题/答案http://stackoverflow.com/questions/1709078/how-can-i-restore-the-mysql-root-users-full-privileges – 2009-11-11 03:27:29