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
Vous pouvez obtenir des droits avec:
SHOW GRANTS FOR CURRENT_USER;
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.
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
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
Ajouter une chaîne aléatoire peut ne pas être une mauvaise idée, si votre code sera utilisé sur d'autres serveurs. – UnkwnTech
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'@'%'
- 1. Vérification des données utilisateur avant chaque action
- 2. comment créer une nouvelle base de données avant l'exécution des tests?
- 3. créer une base de données d'adresses
- 4. Vérification de l'autorisation sp_send_email avant l'exécution
- 5. Créer une base de données dans QT
- 6. Vérification de la restauration de la base de données terminée
- 7. Comment créer une couche de base de données appropriée?
- 8. Comment créer les migrations pour une base de données existante?
- 9. Créer une base de données avec un emplacement de données spécifique dans MySQL pour une base de données
- 10. Une manière simple de créer une ERD pour une revue de conception de base de données
- 11. Concevoir une base de données
- 12. Créer une base de données à partir du projet db
- 13. Comment obtenir des données d'une base de données vers une autre base de données?
- 14. Sur Facebook, dois-je vérifier les autorisations avant de tenter un e-mail?
- 15. Conception d'application pour le traitement des données avant la base de données
- 16. Solution de vérification des liens
- 17. AASM: Vérification de l'identité objet se déplace un état avant
- 18. comment publier des données dans une base de données de site dans une application iphone?
- 19. Créer une base de données SQL à partir d'un jeu de données typé ADO.NET
- 20. Création d'une structure de base de données d'appartenance ASP.Net dans une base de données existante
- 21. Dois-je créer plusieurs petites bases de données d'applications ou une grande base de données?
- 22. Lorsque vous travaillez avec NHibernate, devriez-vous créer vos tables de base de données avant vos fichiers de carte?
- 23. Comment stocker des données modifiées dans une base de données?
- 24. Augmentation des droits d'utilisation de mach_inject
- 25. Comment créer une procédure stockée pour créer une base de données
- 26. Droits d'accès pour l'accès SQL à la base de données pour l'application ASP.Net
- 27. créer des onglets jquery selon les données de la base de données
- 28. Synchronisation des données de base
- 29. Restrictions sur une base de données des journaux de transaction
- 30. Fournir des données de base pour l'application de données de base?
Ç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? –
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
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? –