Почему GRANT не работает в MySQL?
Я почесываю голову на этом, так как вижу тонкие вспомогательные сайты, показывающие, как создавать пользователей 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';
Query OK, 0 строк (0.00 sec)
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".
Любые предложения?
Спасибо заранее.
Ответы
Ответ 1
то, что вы выбираете, - это глобальные привилегии.
вы тем не менее предоставляете конкретную привилегию базы данных (и хоста, но это не имеет значения).
GRANT INSERT
ON 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
Ответ 2
Это не то место, где хранятся большинство прав пользователя GRANTed - попробуйте
SHOW GRANTS FOR 'www'@'localhost'
чтобы увидеть разрешения для конкретной базы данных. (Грант будет отображаться только в таблице пользователя, если он был для всех баз данных.)
Здесь (довольно старая) пошаговая деталь как хранятся разрешения в MySQL - я не думаю, что все изменилось много.
Ответ 3
Вам нужно посмотреть таблицы mysql.db или mysql.tables_priv, если вам нужно выбрать Y или N, если вы пытаетесь сделать некоторые ограничения на странице, которую пользователь может редактировать или вставлять или удалять... Эти таблицы автоматически обновляются с помощью Ys и Ns, поскольку они предназначены исключительно для того, чтобы показать, какие привилегии у пользователя есть для таблиц или столбцов, а не для mysql.user, целью которых является показать, что есть определенный пользователь, который может войти (создать соединение) в базы данных.
Ответ 4
Это должно работать:
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';