본문 바로가기

프로그램언어/Mysql

Mysql root 에 권한이 부족하다?

반응형

이래저래 하다가..
나는 root 계정인데..
CREATE 명령어가 안되네?
내가 망가뜨렸으니 고쳐야지ㅎㅎ
MacOS 기준으로 작성된 글입니다.

에러 상황

root 계정으로 CREATE TABLE 명령어가 잘 안되어서 (굉장히 이상한 상황;) grant 를 슬쩍 손대어 봅니다.

mysql> show grants;
+-------------------------------------------------------------------+
| Grants for root@localhost                                         |
+-------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO `root`@`localhost` |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> GRANT CREATE ON *.* TO `root`@`localhost`;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

root 계정에게 CREATE 에 대한 권한이 없는 것을 확인했고, GRANT 명령어 또한 실패하네요.

FIX

출처

  1. 우선 mysql 서버를 재시동하여 grant 에 대한 설정을 off 시킵니다.
mysql.server stop
mysql.server start --skip-grant-tables
  1. root 계정의 권한 설정을 mysql.user 테이블을 통해 UPDATE 합니다.
mysql> UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL ON *.* TO 'root'@'localhost';
Query OK, 0 rows affected (0.01 sec)

여기서 조마조마했던 부분이 --skip-grant-tables 옵션으로 접속했을 때 실행되지 않는 쿼리가 존재합니다!!
다행이 PASS

  1. 실패했던 CREATE 명령어가 성공한 것을 확인했고, 확인자 grants 테이블을 조회해봤습니다.
mysql> show grants;

| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`localhost` WITH GRANT OPTION                                                                                                                                                                                                                                                                                                                               |
| GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ABORT_EXEMPT,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,GROUP_REPLICATION_STREAM,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SENSITIVE_VARIABLES_OBSERVER,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `root`@`localhost` |

끝!

반응형

'프로그램언어 > Mysql' 카테고리의 다른 글

MySQL root 비밀번호를 잃었을 때  (1) 2022.07.18