2010-04-30 25 views
5

Esiste un modo per creare un nuovo database MySQL, un nuovo utente MySQL e assegnare tutti i nuovi privilegi utente al nuovo database utilizzando PHP?Crea utente e database MySQL da PHP

EDIT - va sottolineato questo viene eseguito da 1 server a un altro, in modo da Server A si tenta di installare un DB/utente sul Server B

ho ottenuto questo:

$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()); 

ma sto ottenendo un errore sulla query concessione:

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

risposta

4

Questa risposta è stato modificato più volte sulla base di nuove informazioni fornite dal PO

è root in realtà permesso per connettersi al server dall'host che ci si connette da? Se la stringa di errore sta tornando il nome canonico del server, c'è una buona possibilità che 'localhost' non punta a 127.0.0.1:

"Accesso negato per l'utente 'root'@'MY.SERVER .HOST.NAME' a database 'dbname'"

Questo dovrebbe eco qualcosa come "Accesso negato per l'utente 'root' @ localhost'", non il nome del server.

Prova:

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

Modifica (Dopo più informazioni fornite nei commenti)

Se ci si connette da un host completamente diversa, è necessario dire a MySQL [email protected]_hostname_or_ip è consentito per la connessione, e ha i privilegi appropriati per creare un database e gli utenti.

È possibile farlo abbastanza facilmente usando phpmyadmin (sul server MySQL), o di una query come:

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 ; 

Vorrei consigliare non nominare questo utente 'root', basta creare un utente con tutti gli i privilegi globali necessari Nell'esempio, ho usato 192.168.1.1, che potrebbe facilmente essere un nome host, ma assicurati che il DNS sia impostato in modo appropriato. Specificare l'host corrispondente a esattamente come appare nei registri quando ci si connette al server remoto.

Si potrebbe anche voler regolare i limiti a piacere. Ulteriori informazioni sulla sintassi CREATE USER possono essere found here, GRANThere.

Modifica

Se si utilizza MySQL 4 - CREATE non è un'opzione. Si potrebbe semplicemente usare GRANT (4.1 Docs On User Management)

Modifica

Se si utilizza C-Panel, appena use the API. Mentre sì, ha le sue stranezze, è più facile mantenere roba che lo usa piuttosto che lavorare ad-hoc. Un sacco di applicazioni di successo lo usano senza problemi. Come qualsiasi altra API, è necessario tenere il passo con le modifiche quando lo si utilizza.

+0

Appena notato, ho copiato il mio codice errato sopra. Questo script è in realtà in esecuzione su 1 server e tenta di installare il database su un altro in modo che non si connetta a localhost in ogni caso – robjmills

+0

@snaken - Aggiornato la mia risposta –

+0

nel caso in cui ci fosse un problema con l'utente ho rimosso l'utente e ho cercato di ricrearli con il tuo codice ma sto ricevendo un errore di sintassi? – robjmills

0

credo che avrei dovuto creare una connessione (con l'utente root) ad un exi database di sting (come mysql) e quindi eseguire la query di creazione.

0

In questo esempio non si vede un collegamento di database per l'ovvia ragione: si suppone che si sia già appreso che qualsiasi azione del database richiede innanzitutto la connessione.
È il modo in cui i libri vengono scritti: le cose delle lezioni precedenti vengono omesse in quelle successive. O ogni capitolo sarà 2 volte più grande e non finirai mai di finire il libro.

quindi sì, è necessario prima connettersi al database, utilizzando mysql_connect().

per creare un utente è possibile utilizzare mysql GRANT query

se sto mai fatto dallo script ma dal guscio unico

-1

Si avrebbe bisogno di connettersi al server sql prima:

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

Quindi la query verrà eseguita. Tuttavia molti server di hosting condivisi disabilitano la creazione di database tramite PHP.

+0

meglio rimuovere @. e sostituire die() con qualcosa di più affidabile anche –