2012-03-29 27 views
10

¿Es posible que un usuario que no sea el usuario root cree una base de datos?¿Qué permiso se requiere para que un usuario de MySQL cree una base de datos?

GRANT SELECT, CREATE ON *.* TO 'myguy'@'thatmachine' IDENTIFIED BY PASSWORD '*12057DFA2BFBD8760D4788735B1C3E26889D7ECE' | 
GRANT ALL PRIVILEGES ON `db1`.* TO 'myguy'@'thatmachine' 
GRANT ALL PRIVILEGES ON `db2`.* TO 'myguy'@'thatmachine' 

Me pregunto qué privilegio falta aquí? Además, ¿por qué la primera línea tiene una contraseña adjunta?

ACTUALIZACIÓN

quiero aclarar aún más lo que el punto de mi pregunta es. Tengo dos máquinas de base de datos, fuente y destino. Hay muchas bases de datos de clientes en la máquina fuente. Necesito mover esas bases de datos de origen a la otra máquina de destino.

Las bases de datos están en forma de archivos mysqldump'ed .sql, que se envían desde el origen al destino. El usuario objetivo, no el usuario root, debe recrear las bases de datos localmente desde cada archivo .sql, realizar algunas acciones y soltar la base de datos.

No puedo encontrar una forma de otorgar estos privilegios al usuario de destino sin otorgarle privilegios globales en *.*, lo que hace que ese usuario sea tan peligroso como root.

+1

Interesante. Ok, aquí hay un pensamiento. En lugar de usar mysql en la máquina de destino, use una base de datos alternativa específicamente para esta transacción. SQLite, o algo por el estilo. De esta forma, sus permisos no tienen nada que ver con ninguna base de datos totalmente operativa, solo pueden usarse con y para la base de datos temporal y las acciones. Puede que tenga que cambiar algunos scripts, o lo que no, pero estará mucho más seguro de esta manera. Haga un pequeño bolsillo de control, para esta hazaña específica, y luego anule cuando termine. Puede ser un trabajo extra, pero solucionará el problema. –

Respuesta

7
+4

En una cadena de eventos realmente desafortunada, el usuario 'myguy' tiene permitido crear bases de datos. Él simplemente no puede destruirlos. Y, sin embargo, no quiero que ese usuario pueda destruir las bases de datos que no creó, así que ¿qué privilegio le doy? ¿Por qué es tan difícil? – AKWF

+0

@AKWF: Hmph. Eso es de hecho ... desafortunado. Es posible que desee otorgarle específicamente el privilegio 'DROP' para las bases de datos que creó, justo después de que él las cree; AFAIK esto no es posible hacerlo automáticamente en MySQL. ¿Está creando las bases de datos a través de un script, o no tienes control sobre sus acciones? – Piskvor

+0

Lo que debe hacer es decidir qué desea exactamente que este usuario en particular pueda hacer y luego otorgarle esos permisos. Por ejemplo, según esto, tiene todos los privilegios en db1 y db2 y puede seleccionar y crear en TODAS las bases de datos, pero aparentemente no puede actualizar o insertar ... una configuración extraña, diría yo. Pero si solo quiere que haya leído y actualizado solo, entonces haría algo como esto: GRANT SELECT, ACTUALIZACIÓN EN *. * A 'myguy' @ 'thatmachine' IDENTIFICADO POR CONTRASEÑA '* 12057DFA2BFBD8760D4788735B1C3E26889D7ECE' –

0

El campo de contraseña es la contraseña de ese usuario en particular al iniciar sesión en MySQL. No estoy exactamente seguro de a qué te refieres cuando dices que te preguntas qué privilegios se están perdiendo. ¿Qué estás tratando de hacer exactamente?

+0

Tengo un usuario que debe descargar .sql db volcados y restaurarlos en un sistema local. No sé cuáles van a ser los nombres de esas bases de datos por adelantado, así que tuve que dar "create on *. *" Al usuario. Pensé que sería de sentido común que un usuario que creara una base de datos podría dejarla caer, pero no tuvo tanta suerte. No me atrevo a darle al usuario "drop on *. *", Esta es una aplicación web por el bien de Pete. Solo quiero asegurar este usuario de la base de datos y permitirles hacer algunas cosas, pero limitar cualquier daño potencial si el usuario alguna vez fue secuestrado. – AKWF

+0

Para las aplicaciones web, es una buena práctica no permitir la creación o el abandono de algo a menos que sepa que esa persona sabe exactamente lo que está haciendo, por ejemplo, en el uso de PHPMyAdmin. Además, es posible que desee considerar un esquema de base de datos en el que no sea necesaria la creación de bases de datos completas. Veo muy pocos ejemplos donde un usuario final necesita poder crear una base de datos completa. –

+0

Incluso en eso ... realmente ... nunca deberías soltar/eliminar nada, solo usa un campo booleano 'eliminado'. –

Cuestiones relacionadas