ejemplo - ¿Por qué GRANT no funciona en MySQL?
grant super mysql (4)
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.
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'';
Consulta OK, 0 filas afectadas (0.14 seg)
mysql> GRANT INSERT ON wordpress.* TO ''www''@''localhost'' IDENTIFIED BY ''basic'';
Consulta 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 por adelantado.
Debe buscar en las tablas mysql.db o mysql.tables_priv si necesita seleccionar Y o N si está tratando de hacer algunas restricciones desde qué página puede editar o insertar o eliminar un usuario ... Estas tablas se actualizan automáticamente con Ys y Ns, ya que están diseñados exclusivamente para mostrar qué privilegios tiene un usuario en las tablas o columnas en comparación con mysql.user, cuyo propósito es mostrar que hay un determinado usuario que puede iniciar sesión (crear una conexión) en una base de datos.
Esto debería funcionar:
GRANT ALL PRIVILEGES ON database_name.* TO ''username''@''localhost'';
No es allí donde se almacenan los derechos concedidos por el usuario. Intente
SHOW GRANTS FOR ''www''@''localhost''
para ver los permisos específicos de la base de datos en su lugar. (Una subvenció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 cómo se almacenan los permisos en MySQL. No creo que las cosas hayan cambiado mucho.
lo que está seleccionando son los privilegios globales. sin embargo, le está dando privilegios específicos a la base de datos (y al host, pero eso no importa).
GRANT INSERT
ON wordpress
.* TO ''www''@''localhost'' IDENTIFIED BY ''basic'';
estos permisos se almacenan en la tabla db
.
solo para apuntarlo en la dirección correcta:
SHOW GRANTS FOR ''www''@''localhost''