[mysql] MySQL 루트 사용자의 전체 권한을 어떻게 복원 할 수 있습니까?

테이블 변경 기능을 포함하여 MySQL 루트 사용자로부터 실수로 일부 권한을 제거했습니다. 이 사용자를 모든 권한으로 원래 상태로 복원 할 수있는 방법이 있습니까?

UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root';
# MySQL returned an empty result set (i.e. zero rows).
FLUSH PRIVILEGES ;
# MySQL returned an empty result set (i.e. zero rows).


#1045 - Access denied for user 'root'@'localhost' (using password: YES)
GRANT ALL ON *.* TO 'root'@'localhost'



답변

(가) 경우 GRANT ALL하지 작업을 수행, 시도 :

  1. 중지 mysqld하고 다시 시작하십시오.--skip-grant-tables옵션으로 .
  2. 다음 mysqld과 같이 서버에 연결합니다 mysql(예 : -p옵션 없음 , 사용자 이름이 필요하지 않을 수 있음).
  3. mysql 클라이언트에서 다음 명령을 실행하십시오.

    UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

    FLUSH PRIVILEGES;

그 후에 실행 GRANT ALL ON *.* TO 'root'@'localhost';하고 작동 시킬 수 있어야합니다 .


답변

root실수로 사용자를 삭제 한 경우 다음 중 하나를 수행 할 수 있습니다.

  1. MySQL 서비스 중지
  2. 운영 mysqld_safe --skip-grant-tables &
  3. 유형 mysql -u root -p 하고 Enter를 누르십시오.
  4. 비밀번호를 입력하세요
  5. mysql 명령 줄에 다음을 입력합니다. use mysql;

그런 다음이 쿼리를 실행합니다.

insert into `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`)
values('localhost','root','','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');

그런 다음 mysqld를 다시 시작하십시오.

수정 : 2018 년 10 월 6 일

다른 사람이이 답변을 필요로하는 경우 innodb_version 5.6.36-82.010.1.24-MariaDB를 사용하여 오늘 시도 했으며 백틱 을 제거하면 작동합니다 (작은 따옴표도없고 그냥 제거).

insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections)
values('localhost','root','','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 콘솔에 표시되지 않는 루트 및 데이터베이스의 권한을 제거하여 사용자 mysql>mysql -u 'userName' -p;및 비밀번호를 변경했습니다 .

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

FLUSH PRIVILEGES;

이 명령 후에는 모두 root에있는 데이터베이스를 보여줍니다.

감사


답변

루트에 대한 삽입 및 재로드 권한을 거부했습니다. 따라서 권한을 업데이트 한 후 FLUSH PRIVILEGES가 작동하지 않았습니다 (다시로드 권한 부족으로 인해). 그래서 우분투 16.04에서 debian-sys-maint 사용자를 사용하여 user.root 권한을 복원했습니다. 이 파일에서 user.debian-sys-maint의 비밀번호를 찾을 수 있습니다.

sudo cat /etc/mysql/debian.cnf


답변

GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;

각 암호를 사용하여 루트에서 로그인하고 사용자가 무엇이든 위의 명령을 실행하기 만하면됩니다.

예를 들면 :

GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;


답변

각 열 권한에 mysql.userY을 삽입하거나 업데이트하기 만하면 됩니다.


답변

로컬 컴퓨터 (mysql 버전 5.7.14)에서 WAMP를 사용하는 경우 1 단계 : my.ini 파일 열기 2 단계 : 세미콜론을 제거하여 ‘skip-grant-tables’줄의 주석 처리 제거 3 단계 : mysql 다시 시작 서버 4 단계 : mySQL 콘솔 시작 5 단계 :

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

6 단계 : 문제 해결 !!!!