2010-04-30 7 views
5

Est-il possible de créer une nouvelle base de données MySQL, un nouvel utilisateur MySQL et donner aux nouveaux privilèges utilisateur sur la nouvelle base de données tout en utilisant PHP?Créer un utilisateur MySQL et base de données PHP

EDIT - convient de signaler ceci est exécuté à partir de 1 serveur à un autre, de sorte que le serveur A essayer d'installer un DB/utilisateur sur le serveur B

j'ai ceci:

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

mais je reçois une erreur sur la requête de subvention:

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

Répondre

4

Cette réponse a été modifiée à plusieurs reprises sur la base de nouvelles informations fournies par l'OP

est la racine en fait a permis de se connecter au serveur de l'hôte que vous connectez à partir? Si la chaîne d'erreur retourne le nom canonique du serveur, il y a une très bonne chance que « localhost » ne pointe pas vers 127.0.0.1:

« Accès refusé pour l'utilisateur 'root'@'MY.SERVER .HOST.NAME » à base de données « nom_base » »

Cela devrait faire écho quelque chose comme « Accès refusé pour l'utilisateur « root » @ localhost ' », pas le nom du serveur.

Essayez:

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

Modifier (Après plus d'informations fournis dans les commentaires)

Si vous connectez d'un hôte totalement différent, vous devez dire MySQL [email protected]_hostname_or_ip est autorisé à se connecter, et possède les privilèges appropriés pour créer une base de données et des utilisateurs.

Vous pouvez le faire en utilisant assez facilement phpmyadmin (sur le serveur MySQL), ou une requête comme:

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 ; 

Je conseille de ne pas nommer cet utilisateur « root », il suffit de créer un utilisateur avec tous les privilèges globaux nécessaires. Dans l'exemple, j'ai utilisé 192.168.1.1, qui pourrait facilement être un nom d'hôte, assurez-vous simplement que le DNS est correctement configuré. Spécifiez l'hôte pour qu'il corresponde exactement à tel qu'il apparaît dans les journaux lorsque vous vous connectez au serveur distant.

Vous pouvez également ajuster les limites au goût. Plus d'informations sur la syntaxe CREATE USER peut être found here, GRANThere.

Modifier

Si vous utilisez MySQL 4 - CREATE est pas une option. Vous utilisez simplement GRANT (4.1 Docs On User Management)

Modifier

Si vous utilisez C-Panel, juste use the API. Bien que oui, il a ses bizarreries, il est plus facile de maintenir des choses qui l'utilisent plutôt que des contournements ad hoc. Beaucoup d'applications réussies l'utilisent sans problème. Comme toute autre API, vous devez rester au courant des changements lors de son utilisation.

+0

Juste remarqué, j'ai copié mon code faux ci-dessus. Ce script est en cours d'exécution sur 1 serveur et essaie d'installer la base de données sur un autre donc il ne se connecte pas à localhost de toute façon – robjmills

+0

@snaken - Mise à jour ma réponse –

+0

en cas de problème avec l'utilisateur J'ai retiré l'utilisateur et j'ai essayé de les recréer avec votre code, mais je reçois une erreur de syntaxe? – robjmills

0

Je crois que vous auriez à créer une connexion (avec l'utilisateur root) à un EXI Sting base de données (comme mysql), puis exécutez la requête de création.

0

Vous ne voyez pas une base de données de connexion dans cet exemple pour la raison évidente: on suppose que vous avez déjà appris que toute action de base de données nécessite d'abord vous connecter.
Il est la façon dont les livres en cours d'écriture: les choses des leçons précédentes étant omis dans les prochains. Ou chaque chapitre sera 2 fois plus grand et vous ne finirez jamais le livre.

donc oui, vous devez vous connecter à la première base de données, en utilisant mysql_connect().

pour créer un utilisateur, vous pouvez utiliser mysql GRANT query

si je suis jamais fait à partir du script, mais de la coquille ne

-1

Vous devrez vous connecter au serveur sql premier:

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

Ensuite, la requête exécutera. Cependant, beaucoup de serveurs d'hébergement mutualisés désactivent la création de bases de données via PHP.

+0

préférable de supprimer @. et remplacer die() avec quelque chose de plus fiable aussi –

Questions connexes