Доступ запрещен для пользователя 'root' @ 'localhost' при попытке предоставить привилегии. Как я могу предоставить привилегии? - PullRequest
157 голосов
/ 13 декабря 2011

Я посмотрел на несколько похожих вопросов и поэтому демонстрирую, что проверил основы.Хотя, конечно, это не значит, что я не пропустил что-то совершенно очевидное.: -)

Мой вопрос таков: почему мне отказано в доступе к пользователю с привилегиями делать то, что я пытаюсь сделать, и где я уже набрал пароль и получил доступ?(Для полноты картины я попытался ввести неправильный пароль, чтобы убедиться, что клиент MySQL запретит мне доступ при запуске программы.)

Справочная информация:

Выполнено вход в оболочкумашина, на которой работает сервер MySQL через ssh, я вхожу в систему как root:

[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> 

Awesome.Мое прочтение ответов на подобные вопросы говорит о том, что я должен убедиться, что привилегии соответствуют текущим в таблицах грантов

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 со всеми привилегиями, это здорово, и я подумаю над этим, когда смогу дать другому пользователю некоторые привилегии.

Спасибо!

Ответы [ 12 ]

1 голос
/ 29 января 2018

У меня была та же самая проблема, и мне потребовалось много времени для чтения сообщений SO и документации Google.Я наконец нашел это в Cloud SQL FAQ :

Google Cloud SQL не поддерживает привилегии SUPER, что означает, что операторы GRANT ALL PRIVILEGES не будут работать.В качестве альтернативы вы можете использовать GRANT ALL ON `%`.*

1 голос
/ 03 апреля 2015

Для тех, кто все еще сталкивается с этим, как я, стоит проверить, чтобы убедиться, что попытка GRANT уже не существует:

SHOW GRANTS FOR username;

В моем случае, ошибка не была на самом деле, потому что тамбыла ошибка разрешения, но потому что GRANT уже существовал.

...