Cómo otorgar privilegios de creación de bases de datos a un usuario en MySQL

11

El siguiente comando proporciona todos los privilegios en todas las bases de datos para el usuario 'admin'. Pero no permite que 'admin' cree una base de datos.

GRANT ALL ON * . * TO 'admin'@'localhost'; 

¿Cómo puedo proporcionar el acceso a 'admin' para crear una base de datos?

Cuando intento crear una base de datos, recibo el siguiente error:

ERROR 1044 (42000): acceso denegado para el usuario 'admin' @ 'localhost' a la base de datos 'newdb'

Abhishek
fuente
¿Usaste GRANT ALL ON *.* TO 'admin'@'localhost';? En su ejemplo, dice que ejecutó:, GRANT ALL ON * . * TO 'admin'@'hostname';pero hostnamees un host distinto de localhost.
oNare
hostname es 'localhost'.
Abhishek
¿Estaba conectado como "root" cuando ejecutó eso GRANT?
Rick James
Si. Estaba conectado como "root" cuando ejecuté ese GRANT.
Abhishek
¿Intentaste flush privileges;como root?
dwjv

Respuestas:

5

TODOS los privilegios incluyen "TODOS", excepto "CON LA OPCIÓN DE OTORGAMIENTO" ... Por lo tanto, el comando anterior también permitirá al usuario administrador crear la base de datos.

Es posible que desee mostrar el error que está recibiendo. Tenga en cuenta que en GRANT anterior no ha especificado la contraseña para el usuario administrador también.

Actualizar:

Debería poder hacer lo siguiente:

Inicie sesión como root y cree un usuario:

$] mysql -uroot -p
mysql> grant all privileges on *.* to 'admin'@'localhost';

iniciar sesión como administrador (sin contraseña):

$] mysql -uadmin -p
mysql> create database admin;

Cuando inicia sesión, puede verificar sus privilegios de la siguiente manera:

mysql> show grants;

o

mysql> show grants for current_user();

mysql> select current_user() le mostrará el usuario con el que inició sesión.

mysql_user
fuente
He agregado el error en mi pregunta.
Abhishek
@abhishek update answer .... por cierto, ¿qué comando está causando el error anterior? ¿Verifique qué concesiones tiene su usuario? ¿Estás seguro de que te estás conectando como usuario administrador?
mysql_user
Sí, estoy 100% seguro de que me estoy conectando como usuario administrador.
Abhishek
mysql> mostrar subvenciones; + ------------------------------------------------- ---------------------------- + | Subvenciones para admin @ localhost | + ------------------------------------------------- ---------------------------- + | OTORGAR USO . TO 'admin' @ 'localhost' IDENTIFICADO POR CONTRASEÑA <secret> | El | OTORGUE TODOS LOS PRIVILEGIOS EN newdb. * A 'admin' @ 'localhost' | + ------------------------------------------------- ---------------------------- + 2 filas en conjunto (0.00 seg)
Abhishek
Tenga en cuenta que tiene todos los privilegios solo en mbdb ... por lo que no podrá trabajar con ningún otro db.
mysql_user
0

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

Por lo tanto, debe proporcionar al usuario el acceso

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

Los asteriscos en este comando se refieren a la base de datos y la tabla (respectivamente) a las 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, asegúrese siempre de volver a cargar todos los privilegios.

FLUSH PRIVILEGES;

Ahora, todos los cambios estarían en vigor.

Mateo
fuente
No se requieren privilegios de vaciado para los comandos GRANT.
mysql_user
Sí ... estoy de acuerdo ... pero se requiere PRIVILAGES FLUSH cuando modificamos la subvención en las tablas directamente usando declaraciones como INSERT, UPDATE o DELETE ... Gracias @mysql_user
Mathew