Hey,

Ik probeer mijn MySQL database readonly te maken voor bepaalde gebruikers. Dus wanneer een gebruiker met een bepaald id inlogt, zou een stukje PHP-code de MySQL database readonly moeten maken. Ik zocht het al op en probeerde enkele dingen, maar het lukt niet...

mysql_query("SET GLOBAL read_only = true");


mysql_query("SET GLOBAL read_only = 1");


Nu mijn vraag.. Hoe moet het wel?

[size=xsmall]Toevoeging op 01/09/2011 16:47:59:[/size]

<?php
$Userid = $_SESSION['user_id'];
if($Userid == '123'){
	mysql_query("CREATE USER '".$Userid."'@'localhost' IDENTIFIED BY 'password'");
	mysql_query("GRANT SELECT ON db.* TO '".$Userid."'@'localhost'");
}else{
	mysql_query("CREATE USER '".$Userid."'@'localhost' IDENTIFIED BY 'password'");
	mysql_query("GRANT ALL ON db.* TO '".$Userid."'@'localhost'");
}
?>


Zoiets probeerde ik ook al, maar het werkt niet. Ik vermoed dat dit iets te maken heeft met de permission 'SUPER'... Kan iemand me verderhelpen?
Heb het intussen zelf opgelost. In de DirectAdmin van mijn site kon ik een gebruiker voor de database toevoegen en daar ook permissions instellen. Bij het inloggen van de gebruiker in het beheerderspaneel kan je dan verschillende gebruikers onder verschilldende db users laten connecten met de database. Zo hebben zij verschillende permissions, waaronder eentje enkel SELECT heeft.
ja, ik wou al zeggen: in phpMyAdmin ofzo is het makkelijkst:D
Waarom doe je dit? Hebben gebruikers vrijelijk toegang tot MySQL?
Normaliter laat je alles toch verlopen via gecontroleerde querys/scripts waarop de gebruiker sowieso al geen invloed heeft?
Toch is het zeker niet onverstandig wat Ruben hier probeert te doen, erg slim zelfs. Mocht iemand toch de applicatie kunnen hacken met SQL injectie is het nog moeilijker om een database te muteren.

Mocht je het nog veiliger willen maken en zelfs bepaalde data beschermen, dan kun je views aanmaken die selecties op bepaalde tabellen doen met bepaalde criteria bijvoorbeeld en dan een bepaalde MySQL gebruiker hier alleen rechten op geven.
Het doel was eigenlijk enkel om een soort demo account te creëren dat niets kan aanpassen in de database. Enkel lezen..

Reageren