Почему GRANT не работает в MySQL? - PullRequest
41 голосов
/ 08 октября 2010

Я ломаю голову над этим, поскольку вижу множество вспомогательных веб-сайтов, показывающих, как создавать пользователей MySQL и предоставлять привилегии, но по некоторым причинам это просто не работает для меня.Я пробовал и на WinXP, и на ноутбуке MacBook Pro с последней установленной версией MySQL.

Ниже приведен лишь пример, когда я работал с WordPress.Фактическая база данных - это что-то другое, но те же проблемы.

Вот шаги:

mysql> mysql -uroot -p<password>
mysql> CREATE DATABASE wwordpress;
mysql> CREATE USER 'www'@'localhost' IDENTIFIED BY 'basic';

Запрос в порядке, затронуто 0 строк (0,14 секунды)

mysql> GRANT INSERT ON wordpress.* TO 'www'@'localhost' IDENTIFIED BY 'basic';

ЗапросОК, затронуто 0 строк (0,00 с)

mysql> FLUSH PRIVILEGES;

Запрос ОК, затронуто 0 строк (0,03 с)

mysql> SELECT * FROM mysql.user WHERE User='www' \G
*************************** 1. row ***************************
                 Host: localhost
                 User: www
             Password: *E85C94AF0F09C892339D31CF7570A970BCDC5805
          Select_priv: N
          Insert_priv: N
          Update_priv: N
          Delete_priv: N
          Create_priv: N
            Drop_priv: N
          Reload_priv: N
        Shutdown_priv: N
         Process_priv: N
            File_priv: N
           Grant_priv: N
      References_priv: N
           Index_priv: N
           Alter_priv: N
         Show_db_priv: N
           Super_priv: N
Create_tmp_table_priv: N
     Lock_tables_priv: N
         Execute_priv: N
      Repl_slave_priv: N
     Repl_client_priv: N
     Create_view_priv: N
       Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
     Create_user_priv: N
           Event_priv: N
         Trigger_priv: N
             ssl_type:
           ssl_cipher:
          x509_issuer:
         x509_subject:
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
1 row in set (0.00 sec)

mysql>

Как видно, "Insert_priv: N" долженбыть "Y".

Есть предложения?

Заранее спасибо.

Ответы [ 4 ]

39 голосов
/ 08 октября 2010

то, что вы выбираете, является глобальными привилегиями.однако вы даете базе данных (и хосту, но это не имеет значения) определенные привилегии.

GRANT INSERTON wordpress.* TO 'www'@'localhost' IDENTIFIED BY 'basic';

эти разрешения хранятся вdb таблица.

просто чтобы указать вам правильное направление:

SHOW GRANTS FOR 'www'@'localhost'

http://dev.mysql.com/doc/refman/5.0/en/show-grants.html

11 голосов
/ 08 октября 2010

Это не то место, где хранятся большинство предоставленных пользователю прав - попробуйте

SHOW GRANTS FOR 'www'@'localhost'

для просмотра разрешений для базы данных. (Грант будет отображаться только в пользовательской таблице, если он будет для всех баз данных.)

Вот (довольно старая) пошаговая инструкция как хранятся разрешения в MySQL - я не думаю, что что-то сильно изменилось.

2 голосов
/ 05 июля 2017

Это должно работать:

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
1 голос
/ 26 марта 2012

Вам нужно взглянуть на таблицы mysql.db или mysql.tables_priv, если вам нужно выбрать Y или N, если вы пытаетесь установить некоторые ограничения на странице, которую пользователь может редактировать, вставлять или удалять ... Эти таблицыавтоматически обновляются с Y и N, поскольку они предназначены исключительно для показа того, какие привилегии пользователь имеет для таблиц или столбцов, в отличие от mysql.user, целью которого является показать, что есть определенный пользователь, который может войти (создать соединение) вбазы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...