2010-04-30 17 views
5

¿Existe alguna manera de crear una nueva base de datos MySQL, un nuevo usuario de MySQL y otorgar privilegios a los nuevos usuarios en la nueva base de datos usando PHP?Crear usuario y base de datos MySQL desde PHP

EDITAR - Debe señalarse esta se ejecuta desde 1 servidor a otro, por lo que el servidor A se intenta instalar un DB/usuario en el servidor B

lo he entendido:

$con = mysql_connect("REMOTE.IP.ADDRESS","root","pass"); 
mysql_query("CREATE DATABASE ".$db."",$con)or die(mysql_error()); 
mysql_query("GRANT ALL ON ".$db.".* to ".$user." identified by '".$dbpass."'",$con) or die(mysql_error()); 

pero yo estoy recibiendo un error en la consulta subvención:

"Access denied for user 'root'@'MY.REMOTE.SERVER.HOST.NAME' to database 'dbname'" 

Respuesta

4

Esta respuesta ha sido editada en base a la nueva información proporcionada por el PO

es root realidad permitió a conectar con el servidor del host que se conecta desde? Si la cadena de error se devuelve el nombre canónico del servidor, hay una gran probabilidad de que 'localhost' no está apuntando a 127.0.0.1:

"Acceso denegado para el usuario 'root'@'MY.SERVER .HOST.NAME' a base de datos 'dbname'"

Eso debería repetir algo así como "Acceso denegado para el usuario 'root' @ localhost'", no el nombre del servidor.

Probar:

$con = mysql_connect("127.0.0.1","root","pass"); 

Editar (Después de más información proporcionada en los comentarios)

Si se está conectando desde un host totalmente diferente, usted tiene que decir a MySQL [email protected]_hostname_or_ip se le permite conectarse y tiene los privilegios apropiados para crear una base de datos y usuarios.

Usted puede hacer esto con bastante facilidad utilizando phpmyadmin (en el servidor MySQL), o una consulta como:

CREATE USER 'root'@'192.168.1.1' IDENTIFIED BY PASSWORD 'secret'; 

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.1.1' IDENTIFIED BY PASSWORD 'secret' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; 

Yo aconsejaría no nombrar a este usuario 'root', basta con crear un usuario con toda la privilegios globales necesarios. En el ejemplo, utilicé 192.168.1.1, que fácilmente podría ser un nombre de host, solo asegúrese de que DNS esté configurado apropiadamente. Especifique el host para que coincida con exactamente tal como aparece en los registros cuando se conecta al servidor remoto.

Es posible que también desee ajustar los límites al gusto. Más información sobre la sintaxis CREATE USER puede ser found here, GRANThere.

Editar

Si el uso de MySQL 4 - crear no es una opción. Usted sólo tiene que utilizar GRANT (4.1 Docs On User Management)

Editar

Si se utiliza C-Panel, simplemente use the API. Mientras que sí, tiene sus peculiaridades, es más fácil mantener cosas que lo usan en lugar de soluciones de trabajo ad-hoc. Muchas aplicaciones exitosas lo usan sin problemas. Al igual que cualquier otra API, debe estar al tanto de los cambios al usarla.

+0

Recién notado, copié mi código incorrectamente arriba. Esta secuencia de comandos se está ejecutando en 1 servidor y tratando de instalar la base de datos en otra, por lo que no se está conectando a localhost de todos modos – robjmills

+0

@snaken - Actualicé mi respuesta –

+0

en caso de que hubiera un problema con el usuario. Quité al usuario e intenté recrearlos con su código pero obtengo un error de sintaxis? – robjmills

0

creo que habría que crear una conexión (con el usuario root) a un EXI base de datos de picadura (como mysql) y luego ejecutar la consulta de creación.

0

No ve una base de datos conectarse en este ejemplo por la razón obvia: se supone que ya aprendió que cualquier acción de la base de datos requiere conectarse primero.
Es la forma en que se escriben los libros: las cosas de las lecciones anteriores se omiten en las siguientes. O cada capítulo será 2 veces más grande y nunca terminarás el libro.

así que sí, primero debe conectarse a la base de datos, usando mysql_connect().

para crear un usuario puede utilizar MySQL GRANT query

aunque nunca he terminado desde el guión, pero a partir de la cáscara única

-1

Usted tendría que conectar con el servidor SQL en primer lugar:

[email protected]_connect(DB_HOST, DB_USER, DB_PASSWORD) 
    or die("Err:Conn"); 

Luego se ejecutará la consulta. Sin embargo, muchos servidores de alojamiento compartido deshabilitan la creación de bases de datos a través de PHP.

varias veces
+0

es mejor eliminar @. y reemplazar die() con algo más confiable también –

Cuestiones relacionadas