2010-10-07 11 views
30

Podrapałam się w tę stronę, ponieważ widzę mnóstwo witryn pomocniczych, pokazujących, jak tworzyć użytkowników MySQL i przyznać im przywileje, ale z jakiegoś powodu po prostu to nie działa. Próbowałem na laptopie WinXP i MacBook Pro z zainstalowaną najnowszą wersją MySQL.Dlaczego GRANT nie działa w MySQL?

Poniższy przykład to przykład pracy z WordPress. Rzeczywista baza danych to coś innego, ale te same problemy.

Oto kroki:

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

Query OK, 0 rows affected (0.14 sec)

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

Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES; 

Zapytanie OK, dotknięte 0 wierszy (0,03 s)

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> 

Jak widać "Insert_priv: N" powinno być "Y".

Wszelkie sugestie?

Z góry dziękuję.

Odpowiedz

28

to, co wybierasz, to globalne uprawnienia. podajesz jednak bazy danych (i hosta, ale to nie ma znaczenia) konkretne uprawnienia.

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

theese uprawnienia są przechowywane w tabeli db.

tylko do punktu, w dobrym kierunku:

SHOW GRANTS FOR 'www'@'localhost' 

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

7

to nie gdzie większość użytkowników przyznanego prawa są przechowywane - spróbuj

SHOW GRANTS FOR 'www'@'localhost' 

uprawnień, aby zobaczyć specyficzne dla bazy danych zamiast. (Przyznanie pojawi się tylko w tabeli użytkownika, jeśli dotyczy wszystkich baz danych.)

Oto (raczej stary) szczegół w postaci krok po kroku how permissions are stored w MySQL - Nie sądzę, aby wiele się zmieniło.

+0

Thanks Martin. Zastanawiam się jednak, do czego służy ten stół? Myślałbym, że powinni być konsekwentni? Oto jeden z wielu linków wskazujących, że pola powinny być "Y": http://kb.mediatemple.net/questions/788/HOWTO%3A+GRANT+privileges+w+MySQL – Christopher

+0

Wygląda na to, że odpowiedź RTFM jest tutaj: http : //dev.mysql.com/doc/refman/5.0/en/show-grants.html – Christopher

+0

@ Christopher - Dodałem link, który daje dyskursywne wprowadzenie, hth. –

1

Trzeba spojrzeć na mysql.db lub mysql.tables_priv tabelach jeśli trzeba wybrać Y lub N, jeśli jesteś próba wprowadzenia pewnych ograniczeń od strony, którą użytkownik może edytować lub wstawić lub usunąć ... Te tabele są automatycznie aktualizowane za pomocą znaków Y i N, ponieważ są zaprojektowane wyłącznie w celu pokazania, jakie uprawnienia ma użytkownik w tabelach lub kolumnach, w przeciwieństwie do mysql .user, którego celem jest pokazanie, że istnieje pewien użytkownik, który może się zalogować (utworzyć połączenie) z bazą danych.

0

To powinno działać:

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';