2010-10-07 10 views
30

Me estoy rascando la cabeza en este caso ya que veo un montón de sitios web de ayuda que muestran cómo crear usuarios de MySQL y otorgar privilegios, pero por alguna razón simplemente no funciona para mí. Probé tanto en WinXP como en una computadora portátil MacBook Pro con la última versión de MySQL instalada.¿Por qué GRANT no funciona en MySQL?

El siguiente es solo un ejemplo de cuando trabajé con WordPress. La base de datos real es algo diferente pero los mismos problemas.

Estos son los pasos:

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

Query OK, 0 filas afectadas (0,14 seg)

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

Query OK, 0 filas afectadas (0,00 seg)

mysql> FLUSH PRIVILEGES; 

Consulta OK, 0 filas afectadas (0.03 seg)

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> 

Como puede ver "Insert_priv: N" debe ser "Y".

¿Alguna sugerencia?

Gracias de antemano.

Respuesta

28

lo que está seleccionando son los privilegios globales. , sin embargo, está dando privilegios específicos a la base de datos (y al host, pero eso no importa).

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

permisos theese se almacenan en la tabla db.

acaba de apuntar en la dirección correcta:

SHOW GRANTS FOR 'www'@'localhost' 

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

7

eso no es donde se almacenan los derechos más utilización concedida - tratar

SHOW GRANTS FOR 'www'@'localhost' 

para ver permisos de base de datos específica en su lugar. (Una concesión solo aparecería en la tabla de usuarios si fuera para todas las bases de datos.)

Aquí hay un detalle (bastante antiguo) paso a paso de how permissions are stored en MySQL - No creo que las cosas hayan cambiado mucho.

+0

Gracias Martin. Sin embargo, me pregunto para qué es esta mesa para entonces. ¿Pensaría que deberían ser consistentes? Aquí hay uno de muchos enlaces que muestran que los campos deben ser 'Y': http://kb.mediatemple.net/questions/788/HOWTO%3A+GRANT+privileges+in+MySQL – Christopher

+0

Parece que RTFM es la respuesta aquí: http : //dev.mysql.com/doc/refman/5.0/en/show-grants.html – Christopher

+0

@Christopher - Agregué un enlace que da una introducción discursiva, hth. –

1

Usted tiene que mirar en las mesas o mysql.db mysql.tables_priv si es necesario seleccionar la Y o N si está tratando de hacer algunas restricciones desde qué página puede editar o insertar o borrar un usuario ... Estas tablas se actualizan automáticamente con Ys y Ns ya que están diseñadas exclusivamente para mostrar qué privilegios tiene un usuario en tablas o columnas en lugar de mysql .user cuyo objetivo es mostrar que hay un determinado usuario que puede iniciar sesión (crear conexión) a una base de datos.

0

Esto debería funcionar:

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