[mysql/php] Rechten om database aan te maken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RuudBurger
  • Registratie: Oktober 2003
  • Laatst online: 17-09 22:05
Ik ben op zoek naar een manier om te controleren of een mysql gebruiker de rechten heeft om een nieuwe database aan te maken, maar zonder dat hij deze echt aanmaakt.

Het is voor een installatiescript van een webapp en ik wil graag realtime informatie teruggeven tijdens het invullen van het configuratie formulier. Als een gebruiker een niet bestaande database opgeeft, wil ik graag kijken of hij de rechten heeft om deze aan te maken, zo niet, krijgt hij direct een error.

Dus simpel gecode:
PHP:
1
2
3
4
5
6
    try {
        $connection->createCommand('CREATE DATABASE \''.$db['name'].'\'')->execute();
    }
    catch (Exception $e){
        $canCreate = false;
    }
Maar dan zonder dat, ALS het lukt, hij hem niet echt aanmaakt :P
Kan iemand mij hiermee verder helpen?

Ook heb ik om te controleren of een database bestaat de volgende query:
MySQL:
1
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = \''.$db['name'].'\';
Maar heb het gevoel dat dit niet gaat werken bij gebruikers die minder rechten hebben op de gehele database connectie..
Weet iemand hier misschien een betere oplossing voor?

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Het lijkt mij dat je dit bij de rechten van de user moet kunnen vinden.

http://dev.mysql.com/doc/...ser-privileges-table.html

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 11:40
Of beter... De SHOW GRANTS query.

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • RuudBurger
  • Registratie: Oktober 2003
  • Laatst online: 17-09 22:05
Kijk zoiets zocht ik.. GRANTS/PRIVILEGES is ook niet het eerste waar je naar googled hiervoor :P

Hopen dat het hiermee lukt, zo niet, dan horen jullie nog wel van mij ^^.

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 11:40
Sillymidget schreef op vrijdag 11 september 2009 @ 14:12:
GRANTS/PRIVILEGES is ook niet het eerste waar je naar googled hiervoor :P
:?
Dat lijkt me de allereerste google term. Je hebt toch ooit een gebruiker aangemaakt in MySQL voor die PHP applicatie? Dan waren GRANTS voor jou niet onbekend, lijkt me.

Algemene tip: ga niet zelf het wiel opnieuw uitvinden met onnodige/gevaarlijke PHP code voor checks die gewoon op een heel andere laag moeten gebeuren. :) Het heeft namelijk niks met PHP te maken, die rechten.

[ Voor 21% gewijzigd door gertvdijk op 11-09-2009 14:30 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • RuudBurger
  • Registratie: Oktober 2003
  • Laatst online: 17-09 22:05
Zo lijk ik wel beetje noob ja, maar ik doe gebruikers altijd in phpMyAdmin en echt nog nooit gelet op de query welk hij dan uitvoert :P

Wat raad jij aan dan? Op welke laag zou dit dan moeten..
Ik wil ervoor zorgen dat de gebruiker niet in config filetjes moet gaan lopen kutten maar de volledige "experience" krijgt. Ik kan heel simpel de connectie starten en als die niet lukt een error terug geven, maar daar heeft de gebruiker niets aan als die error is "kan geen verbinding maken, dit kan zijn: user, password, database etc".. Hoe specifieker de error hoe beter.
En dat het dan uiteindelijk maar bij 2% van de gebruikers doet er niet toe.

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 11:40
Sillymidget schreef op vrijdag 11 september 2009 @ 14:49:
Zo lijk ik wel beetje noob ja, maar ik doe gebruikers altijd in phpMyAdmin en echt nog nooit gelet op de query welk hij dan uitvoert :P
Misschien is dat een uitgangspunt of de Reference manual om te zien wat er allemaal mogelijk is. Al is een MySQL handleiding misschien sterker aan te raden.
Sillymidget schreef op vrijdag 11 september 2009 @ 14:49:
Wat raad jij aan dan? Op welke laag zou dit dan moeten..
Wat ik al zei. Gebruik MySQL zoveel mogelijk voor de rechten in MySQL. En gebruik PHP voor de checks van rechten in je applicatie.
Sillymidget schreef op vrijdag 11 september 2009 @ 14:49:
Ik wil ervoor zorgen dat de gebruiker niet in config filetjes moet gaan lopen kutten maar de volledige "experience" krijgt. Ik kan heel simpel de connectie starten en als die niet lukt een error terug geven, maar daar heeft de gebruiker niets aan als die error is "kan geen verbinding maken, dit kan zijn: user, password, database etc".. Hoe specifieker de error hoe beter.
En dat het dan uiteindelijk maar bij 2% van de gebruikers doet er niet toe.
Kan je misschien iets meer context geven wat je aan het produceren bent en hoe je dat probeert uit te voeren? Je geeft nu 1 puzzelstukje.. en uitzoomen op het geheel verheldert het hopelijk nogal. :)

Verder is het echt not done om in je PHP applicatie read rechten te hebben op je hele INFORMATION_SCHEMA databases imo.. Groot security issue.

[ Voor 7% gewijzigd door gertvdijk op 11-09-2009 15:26 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • RuudBurger
  • Registratie: Oktober 2003
  • Laatst online: 17-09 22:05
Laten we het op een blog applicatie houden..welke mensen kunnen downloaden, op hun server gooien en klaar. De config gaat dan allemaal via de applicatie zelf.

Als je kijkt naar het "5 minute"-install van WordPress, dan krijg je een formulier voorgeschoteld waar je informatie om je database connectie op stand te brengen. Als hier iets fout gaat, is de enige melding die je krijgt dat de verbinding niet lukt. Dat wil ik voorkomen, door de gebruiker de informatie te geven waar het fout gaat zodat ze dat kunnen oplossen.

Daarbij wil ik de volgende type foutmeldingen kunnen geven: host is niet bereikbaar, database bestaat niet, user/password klopt niet, database kan niet aangemaakt worden.

En zover ik begreep heeft elke user rechten om de INFORMATION_SCHEMA uit te lezen? Maar daar weet ik dus niet genoeg vanaf, waardoor ik dus hier hulp vraag. Als het wel lukte was dit topic er niet geweest.

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 11:40
Aah yet another blog tool. :)
Sillymidget schreef op vrijdag 11 september 2009 @ 15:11:
En zover ik begreep heeft elke user rechten om de INFORMATION_SCHEMA uit te lezen? Maar daar weet ik dus niet genoeg vanaf, waardoor ik dus hier hulp vraag. Als het wel lukte was dit topic er niet geweest.
Waarschijnlijk heb ik wat over het hoofd gelezen wat betreft die "tabellen", want het zijn geen tabellen daarin, maar views blijkbaar, die afhankelijk zijn van de current user.

Maar ik hoop toch dat je niet MySQL users gaat maken voor users in je applicatie? Dat je daarvoor dat wil checken, maar voor de installer van je applicatie.

Ja, misschien kan je ze dus prima gebruiken voor de checks. :) Sorry. :P

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • RuudBurger
  • Registratie: Oktober 2003
  • Laatst online: 17-09 22:05
Er wordt niets weggeschreven aan privileges, dit is dus puur een check of de ingevulde gegevens kloppen. Als de installatie is afgerond, kan ook niemand meer bij dit script komen.

De bedoeling is trouwens dat dit niet "yet another blog tool" wordt :P. Het idee hierachter is dat veel meer te letten op de gebruiker, ipv maar functies toevoegen en ze maar ergens op de "admin pagina" flikkeren.
Het idee is ontstaan na wat blog tools gebruikt te hebben en erachter komen dat simpelen acties vaak zoveel moeite kosten... (mooi voorbeeld: WordPress -> blog toevoegen met wat plaatjes.. veel en veel te omslachtig)

Vandaar dat ik zoveel moeite doe om dit werkend te krijgen, waar veel developers de makkelijke route nemen en 1 melding geven (of helemaal geen installatie script). Het gaat uiteindelijk om de details en de volledige flow van je applicatie.
Pagina: 1