2009-03-04 6 views
2

Certains hébergeurs autorisent votre script CREATE DATABASE, d'autres non, et vous obligent à utiliser leurs panneaux de contrôle à la place. Comment puis-je vérifier si la base de données me permet d'exécuter cette requête avec un utilisateur/mot de passe donné sans créer de base de données? Parce que si je n'ai pas assez de droits, je veux juste cacher complètement le bouton "Créer une base de données" de l'interface utilisateur. J'utilise PHP et MySQL. Merci.Vérification des droits d'utilisateur avant de tenter de CRÉER UNE BASE DE DONNÉES

Répondre

5

Vous pouvez obtenir des droits avec:

SHOW GRANTS FOR CURRENT_USER; 
+1

Ça a l'air cool, merci. Et comment vérifier si CREATE DATABASE est autorisé? Actuellement, il retourne: GRANT ALL PRIVILEGES ON *. * TO 'root' @ 'localhost' AVEC OPTION GRANT. À quoi d'autre peut-il ressembler? –

+1

Il s'agit soit de ALL PRIVILEGES, soit d'une liste de privilèges séparés par des virgules tels que définis ici http://dev.mysql.com/doc/refman/5.1/en/grant.html – vartec

+0

Dans la liste, il y a une ligne CREATE - Activer la base de données et création de table. Mais ma tâche consiste à "attraper" une situation où vous êtes * autorisé * à créer des tables, mais * pas * des bases de données. Je suppose, dans ce cas, CREATE ne sera pas accordé sur *. *, Mais seulement sur SomeDB. *, Non? –

1

il suffit de créer un script de test

<?php 
mysql_connect(...); 
$result = mysql_query('CREATE DATABASE testDB'); 
if (!$result) 
{ 
    //Failed 
} 
else 
{ 
    mysql_query('DROP DATABASE testDB'); 
} 
mysql_close(); 
?> 

Vous pouvez définir une variable dans le SI puis écrire que dans un fichier de configuration.

+0

je rédigeais un installateur qui avait besoin de vérifier la même chose, ce qui est la meilleure solution que je suis avec aussi. J'ai ajouté un hachage à la fin du nom de la table, de sorte qu'il était encore moins susceptible d'entrer en conflit avec une table existante. – thomasrutter

+0

Ou vous pouvez ajouter une vérification supplémentaire pour voir si testDB existe déjà, pour éviter de jeter dans la base de données de test de quelqu'un d'autre (notez la faute de frappe dans la deuxième commande SQL). – thomasrutter

+0

Ajouter une chaîne aléatoire peut ne pas être une mauvaise idée, si votre code sera utilisé sur d'autres serveurs. – UnkwnTech

3

Comme l'a dit Vartec, SHOW GRANTS FOR CURRENT_USER est le chemin à parcourir. Je suis juste cette réponse à ajoutais montrer la sortie de cette déclaration lorsque vous ne disposez pas de plein droit:

GRANT USAGE ON *.* TO 'myusername'@'%' IDENTIFIED BY PASSWORD '*8D4A4D198E31D6EA9D7997F7B29A2BCA254178B6' 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb1`.* TO 'myusername'@'%' 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb2`.* TO 'myusername'@'%' 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb3`.* TO 'myusername'@'%' 
Questions connexes