Pregunta MySQL: otorga ** privilegios ** a la base de datos


Creé una base de datos, por ejemplo 'mydb'.

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

Ahora puedo iniciar sesión en la base de datos desde cualquier lugar, pero no puedo crear tablas.

Cómo otorgar todos los privilegios en esa base de datos y (en el futuro) tablas. No puedo crear tablas en la base de datos 'mydb'. Siempre obtengo:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

543
2018-02-16 12:38


origen


Respuestas:


GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

Así es como creo mis privilegios de "Superusuario" (aunque normalmente especificaría un host).

NOTA IMPORTANTE

Si bien esta respuesta puede resolver el problema del acceso, WITH GRANT OPTION crea un usuario de MySQL que puede editar los permisos de otros usuarios.

El privilegio GRANT OPTION le permite otorgar a otros usuarios o eliminar de otros usuarios los privilegios que usted posee.

Por razones de seguridad, no debe usar este tipo de cuenta de usuario para ningún proceso al que el público tenga acceso (es decir, un sitio web). Se recomienda que crear un usuario con solo privilegios de base de datos para ese tipo de uso.


816
2018-02-16 12:45



Esta es una vieja pregunta, pero no creo que la respuesta aceptada sea segura. Es bueno para crear un súper usuario pero no es bueno si desea otorgar privilegios en una sola base de datos.

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

% parece no cubrir las comunicaciones de socket, que el localhost es para. WITH GRANT OPTION solo es bueno para el súper usuario, de lo contrario, suele ser un riesgo de seguridad.

Espero que esto ayude.


477
2018-03-29 16:56



Esto será útil para algunas personas:

Desde la línea de comandos de MySQL:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Lamentablemente, en este punto el usuario nuevo no tiene permisos para hacer nada con las bases de datos. De hecho, si el usuario nuevo incluso intenta iniciar sesión (con la contraseña, la contraseña), no podrá acceder al shell de MySQL.

Por lo tanto, lo primero que debe hacer es brindarle al usuario acceso a la información que necesitará.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Los asteriscos en este comando hacen referencia a la base de datos y la tabla (respectivamente) a los que pueden acceder: este comando específico permite al usuario leer, editar, ejecutar y realizar todas las tareas en todas las bases de datos y tablas.

Una vez que haya finalizado los permisos que desea configurar para sus nuevos usuarios, siempre asegúrese de volver a cargar todos los privilegios.

FLUSH PRIVILEGES;

Tus cambios ahora estarán en efecto.

Para más información: http://dev.mysql.com/doc/refman/5.6/en/grant.html

Si no se siente cómodo con la línea de comando, puede usar un cliente como Banco de trabajo MySQL, Navicat o SQLyog


101
2017-11-19 11:26



1. Crea la base de datos

CREATE DATABASE db_name;

2. Crea el nombre de usuario para la base de datos db_name

GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';

3. Usa la base de datos

USE db_name;

4. Finalmente, está en la base de datos db_name y luego ejecuta los comandos como crear, seleccionar e insertar operaciones.


28
2018-03-20 05:13



Este SQL otorga en todas las bases de datos, pero solo privilegios básicos. Son suficientes para Drupal o Wordpress y, como algo bueno, permiten una cuenta de desarrollador para proyectos locales.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

19
2017-12-09 00:37



Hola, usé este código para tener el superusuario en mysql

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

y entonces

FLUSH PRIVILEGES;

12
2017-10-07 19:53



Pude hacer que funcione solo al agregar GRANT OPTION, sin eso siempre recibes permiso denegado error

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;

12
2017-10-25 14:49



GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

Funciona para privilegios en el esquema :)

Opcional: después mypasswd puedes añadir WITH GRANT OPTION


12
2018-06-07 08:21



Para acceder solo desde el servidor remoto a la base de datos mydb

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

Para acceder desde el servidor remoto a todas las bases de datos.

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';

5
2018-06-25 11:32