source

권한을 부여하는 동안 사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다.특권을 부여하려면 어떻게 해야 합니까?

gigabyte 2022. 11. 18. 21:26
반응형

권한을 부여하는 동안 사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다.특권을 부여하려면 어떻게 해야 합니까?

저는 비슷한 질문을 여러 번 봤기 때문에 기본을 확인했다는 것을 증명하고 있습니다.물론, 그렇다고 해서, 확실한 것을 빠뜨리지 않은 것은 아닙니다. :-)

질문입니다.왜 내가 하려고 하는 일을 할 수 있는 권한을 가진 사용자에 대한 액세스가 거부되고, 내가 이미 비밀번호를 입력하고 접근권을 부여받았을까요? (완전성을 위해 MySQL 클라이언트가 프로그램 시작 시 접근을 거부하도록 하기 위해 잘못된 비밀번호를 입력하려고 했습니다.)

배경:

ssh를 통해 MySQL 서버를 실행하는 시스템의 셸에 로그인한 후 루트로 로그인합니다.

[myname@host ~]$ mysql -u root -p -hlocalhost
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 62396
Server version: 5.5.18-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

아주 좋아요.유사한 질문에 대한 답변을 읽은 결과 권한이 부여 표에 있는 권한과 일치하는지 확인해야 합니다.

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> 

다음으로 내가 누구라고 생각하는지를 확인합니다.

mysql> SELECT user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

...그리고 정말 확실하게 해야 합니다:

mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

mysql> 

아직까지는 좋아.이제 내게 어떤 특권이 주어지나요?

mysql> SHOW GRANTS FOR 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                                                                                                                                                                                                                                                                                                                        |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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 ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[OBSCURED]' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

읽기 어렵기 때문에 다음과 같이 해 보겠습니다(로컬호스트가 아닌 'root' 사용자가 있는 것도 알 수 있습니다).

mysql> SELECT * FROM mysql.user WHERE User='root'\G
*************************** 1. row ***************************
                 Host: localhost
                 User: root
             Password: *[OBSCURED]
          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
             ssl_type: 
           ssl_cipher: 
          x509_issuer: 
         x509_subject: 
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
*************************** 2. row ***************************
                 Host: [HOSTNAME].com
                 User: root
             Password: *[OBSCURED]
          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
             ssl_type: 
           ssl_cipher: 
          x509_issuer: 
         x509_subject: 
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
 2 rows in set (0.00 sec)

아주 좋아요!MySQL은 내가 root@localhost이고 root@localhost가 이러한 모든 권한을 가지고 있다고 생각합니다.그 말은 내가 원하는 걸 할 수 있어야 한다는 거지?

mysql> GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

내가 어떻게 이렇게 기본적인 걸 망칠 수 있지?

주의: 모든 권한을 가진 root라는 이름의 사용자가 없는 것을 제안하고 싶은 분에게는 매우 도움이 됩니다.다른 사용자에게 권한을 부여할 수 있는 경우, 그것을 검토해 보겠습니다.

감사해요!

MySQL 5.1에서 MySQL 5.5로 업그레이드한 후 Windows에서도 같은 문제가 발생하였습니다.여기, 여기, 여기, 여기, 여기에 기재되어 있는 패스워드의 변경, 작성, 리셋은 이미 시도하고 있습니다만, 전혀 모릅니다.같은 에러가 아직 표시된다.

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

정상적으로 접속할 수 있고, 모든 데이터베이스를 표시할 수 있으며, 선택과 삽입을 할 수 있으며, 사용자를 생성하고 추가할 수 있지만, GRANT에 관한 한 망했습니다.이러한 액세스 거부 에러가 다시 표시됩니다.

문제를 해결하기 위해 MySQL 서버 bin/디렉토리에서 다음과 같은 명령어로 권한을 수정했습니다.

C:\MySQL Server 5.5\bin> mysql_upgrade

그 후, 문제는 없어졌습니다.MySQL은 보통 Linux와 Windows 모두에서 동일한 명령을 제공하므로 Linux에서도 이 솔루션이 작동했으면 합니다.

mysql.users 테이블은 루트가 아닌 다른 사용자의 출입이 금지된 것으로 간주되기 때문에 모든 테이블의 모든 권한을 다른 사용자에게 부여하려고 할 때 이 문제가 발생할 수 있습니다.

다만, 다음의 것이 기능합니다.

GRANT ALL PRIVILEGES ON `%`.* TO '[user]'@'[hostname]' IDENTIFIED BY '[password]' WITH GRANT OPTION;

「%」를 사용하고 있는 것에 주의해 주세요.* 대신 **

의 출력에 주의해 주세요.

SHOW GRANTS FOR 'root'@'localhost';

님은 '모든 특권'이라고 말하지 않았지만 root@localhost의 내용을 설명해야 했습니다.

GRANT ALL PRIVALES는 실패합니다.사용자는 자신이 가지고 있지 않은 것을 부여할 수 없고 서버는 여기에 뭔가가 없다고 생각하기 때문입니다.

자, 그럼 뭐가 빠졌지?

시스템에서 다음 메시지가 나타납니다.

mysql> select version();
+------------+
| version()  |
+------------+
| 5.5.21-log |
+------------+
1 row in set (0.00 sec)

mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM mysql.user WHERE User='root' and Host='localhost'\G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
              Password: 
           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
Create_tablespace_priv: Y <----------------------------- new column in 5.5
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: <------------------------------- new column in 5.5
 authentication_string: <------------------------------- new column in 5.5
1 row in set (0.00 sec)

5.5에는 mysql.proxies_user와 같은 새로운 테이블도 있습니다.그 테이블이 있는 것을 확인해 주세요.

새로운 mysql 서버 인스턴스를 설치할 때 설치 스크립트에 의해 모든 mysql이 생성됩니다.* 적절한 구조를 가진 테이블.

이전 버전에서 업그레이드하는 경우 적절한 업그레이드 절차(mysql_upgrade)를 사용하여 누락된 테이블/열을 추가하십시오.

추측에 불과하지만 이 인스턴스에서는 mysql_upgrade가 수행되지 않은 것으로 보여 동작이 나타납니다.

저와 같은 MySQL 버전 8을 설치한 상태에서 이 질문에 답했지만 만족스러운 답변을 찾지 못했을 수 있습니다.버전 8에서는 다음과 같은 사용자를 생성할 수 없습니다.

GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;

다음과 같습니다.「 환 the음음음 」ERROR 1410 (42000): You are not allowed to create a user with GRANT

버전 8에서 사용자를 작성하려면 다음 2단계로 작성해야 합니다.

CREATE USER 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]';
GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' WITH GRANT OPTION;

에 따라 도 있습니다.GRANT ALL PRIVILEGESGRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER

배포판보다 높은 버전의 MySQL을 설치하려고 했을 때 이 문제가 발생했습니다.

이전 버전을 지우고 새 버전을 설치했습니다(rpm -e ...그리고 rpm -i MySQL-server*). 그러나 /var/lib/mysql의 파일이 이전 버전(Marc Alff에 의해 설명되었듯이 차이점 있음)인 줄은 몰랐습니다.-감사합니다.

mysql_upgrade를 할 수도 있었지만 처음부터 시작하고 싶었기 때문에 다음과 같이 했습니다.

# su - mysql
$ rm -rf /var/lib/mysql/*
$ mysql_install_db
# /etc/init.d/mysql start

다음으로 루트 패스워드(/usr/bin/mysqladmin -u root password)를 설정하고 모든 것이 GRANT 명령에서 예상대로 작동합니다.

루트에 대해 부여된 모든 권한과 같은 문제가 있었습니다.

SHOW GRANTS FOR 'root'@'localhost'\G
*************************** 1. row ***************************
Grants for root@localhost: GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*[blabla]' WITH GRANT OPTION

...하지만 여전히 테이블을 만들 수 없습니다.

 create table t3(id int, txt varchar(50), primary key(id));
ERROR 1142 (42000): CREATE command denied to user 'root'@'localhost' for table 't3'

음, 짜증나는 사용자 실수 때문에 그런거야.데이터베이스를 선택하지 않았습니다.USE dbname 발행 후 정상적으로 동작하였습니다.

기본적으로 이 에러는 패스워드를 지정하지 않은 경우에 발생합니다.이는 일부 옵션파일에 잘못된 패스워드가 리스트 되어 있습니다.

계정에 비밀번호를 할당하고 관리하는 방법에 대한 자세한 내용은 이 DOC를 참조하십시오.

또한 폴더에 대한 권한이 있는지 확인합니다./var/lib/mysql/mysql711인지 아닌지 확인합니다.

MySQL 5.5.40을 탑재한 Debian(Wheezy, 7.8)에서SELECT * FROM mysql.user WHERE User='root'\G표시했다Event_priv및 'Trigger_priv' 필드있었지만 Y로 설정되지 않았습니다.

입니다.mysql_upgrade(유무에 관계없이)--force)에서는 차이가 없었습니다.매뉴얼이 필요했습니다.

update user set Event_priv = 'Y',Trigger_priv = 'Y' where user = 'root'

마지막으로 다음을 사용할 수 있습니다.

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

…개별 데이터베이스/사용자 계정에서 보다 정확하게 사용할 수 있습니다.

저도 같은 문제가 있어서 SO 포스트와 구글 문서를 읽는데 많은 시간이 걸렸습니다.클라우드 SQL FAQ에서 드디어 다음을 발견했습니다.

Google Cloud SQL은 SUPER 권한을 지원하지 않습니다. 즉,GRANT ALL PRIVILEGES스테이트먼트는 기능하지 않습니다.다른 방법으로는GRANT ALL ON `%`.*

타자 치기SHOW GRANTS FOR 'root'@'localhost';불분명한 패스워드를 표시했기 때문에 다른 시스템에서 HeidiSQL을 사용하여 해당 시스템의 mysql에 로그인했습니다(사용).root사용자명과 대응하는 패스워드로)를 입력해 주세요.
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'thepassword' WITH GRANT OPTION;

다시 시스템으로 돌아가 로그인 했을 때
mysql -uroot -pthepassword;

performance_transactions(mysql bug http://bugs.mysql.com/bug.php?id=44898)에 권한을 추가하려고 할 때 이 작업을 수행합니다(단일 트랜잭션 추가 회피책).

mysql "access denied" 오류가 발생했을 때 항상 기능하는 하나의 간단한 솔루션: usesudo.

sudo mysql -u root

그러면 필요한 권한이 존재합니다.GRANT명령어를 지정합니다.

나처럼 아직도 이걸 우연히 발견하는 사람들을 위해, 미수된 것들이 있는지 확인해 볼 필요가 있다.GRANT가 아직 존재하지 않습니다.

SHOW GRANTS FOR username;

제 경우, 이 오류는 실제로는 권한 오류가 있어서가 아니라GRANT이미 존재했습니다.

언급URL : https://stackoverflow.com/questions/8484722/access-denied-for-user-rootlocalhost-while-attempting-to-grant-privileges

반응형