24. august 2006 - 17:50Der er
46 kommentarer og 1 løsning
PhpMyadmin problem, intet login?
Hej alle sammen :-)
jeg har nu fået installeret hele min apache server, med phpmyadmin, mysql og det hele :-)
Men nu er problemet så, at når jeg går ind her: http://80.62.179.227/phpMyAdmin-2.8.2.4/ så skal jeg ikke logge ind eller noget, har også prøvet og udfylde dataerne i config filen men skal stadig ikke logge ind. Det gør den selv, og meningen er da jeg skal have flere phpmyadmin brugere med forskellige databaser, skal den ikke bare selv logge ind.
Åbn din config-fil og find den første linie der starter med $cfg['Servers'][$i]['auth_type']. Denne står til config, hvilket netop gør du automatisk bliver logget ind med foruddefinerede brugeroplysninger.
Ret den til http eller cookie - hvis du bruger den sidste skal du tilføje en ekstra linie der definerer $cfg['blowfish_secret'] til en eller anden streng du selv bestemmer - op til 46 tegn.
Der burde dog også være et tidspunkt i setup-scriptet hvor du kan udfylde dette.
Sagtens - jeg kan ikke lige huske hvordan PMA selv håndterer det med brugertilføjelse til bestemte databaser, men det kan gøres med en SQL-sætning:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON database.* TO 'brugernavn'@'localhost' IDENTIFIED BY 'kodeord';
(Bemærk at din MySQL muligvis ikke understøtter alle disse, du kan køre SHOW PRIVILEGES for at få vist de den kan og så fjerne de der mangler fra listen for oven.)
Hvis man også skal have ekstern adgang gentager du den samme sætning, men bruger % i stedet for localhost (hvis det er ligegyldigt hvorfra man connecter, ellers må du skrive et mere specifikt hostname). Det er dog normalt ikke nødvendigt, da scripts ofte køres på samme server som databasen, og man sagtens kan bruge PMA alligevel, sålænge det ligger på samme server som databasen.
Kør den som en ganske almindelig SQL-sætning - der er mig bekendt et link ovre i menuen ved dine tabeller, hvis du ikke kan bruge kommandolinieværktøjet.
Bemærk dog at du skal være logget ind som root-brugeren før du kan give privilegier videre, med mindre du direkte har tilladt det til en anden bruger (se dokumentationen, http://dev.mysql.com/doc/refman/5.0/en/grant.html).
Jeg har lavet min egen lille oprettelses form, den indsender fint de data den skal bruge, md5 krypteret pass og den har samme privilegier, som den jeg normalt logger ind med.
men kan ikke logge ind med den jeg bruger jeg opretter :/
Hvert ord efter grant giver et bestemt privilegie til brugeren. Det er beskrevet nærmere i dokumentationen hvad hver enkelt er til. Kort fortalt giver den en række privilegier til brugernavn på databasen user - disse privilegier lader ham så bruge databasen normalt.
Hasher du SELV kodeordet? Så skal du jo være opmærksom på at det er den hash den skal have som kodeord, ikke det kodeord du har givet den - den hasher selv med en speciel algoritme, så det skal være plain-tekst.
Ikke hvis vi snakker om en brugerkonto til MySQL - den bruger nemlig ikke MD5.
Når du indsætter brugeren med GRANT-kommandoen, skal du IKKE hashe kodeordet - dvs. ikke kalde MD5. Det skal blot skrives direkte ind i SQL'en på den pågældende plads (dog må du gerne sende den igennem mysql_real_escape_string, i tilfælde af at kodeordet indeholder noget den ikke må).
Er det der user-tabellen i den database der hedder mysql? Hvis det er tilfældet, griber du det forkert an - du SKAL bruge GRANT for at du ikke skal til at lave en masse ting.
Hvis du direkte manipulerer med den tabel skal du kalde SQL-funktionen PASSWORD på kodeordet når det indsættes (dvs. det skal gøres i din query), OG du skal desuden bruges FLUSH PRIVILEGES for at den bruger de nye oplysninger.
Et godt råd er helt at lade være. Det er langt, langt nemmere at bruge GRANT direkte (hvis du ikke har lov til det, så kør GRANT USAGE ON *.* TO 'dinbruger'@'localhost' WITH GRANT OPTION). Det eneste du der skal gøre er at køre den SQL-sætning jeg gav dig før - hvis du kun vil give mulighed for at connecte, skal du enten bruge GRANT USAGE ON *.* TO 'bruger'@'localhost' IDENTIFIED BY 'kodeord' eller CREATE USER user IDENTIFIED BY 'password'.
Hvis du alligevel vil manipulere med user-tabellen direkte skal du bruge INSERT INTO user (Host, User, Password) VALUES ('$host', '$user', PASSWORD('$password')), og derefter lave en ekstra query der siger FLUSH PRIVILEGES (for at fortælle MySQL at den skal genindlæse privilegiedataene). Desuden skal du så IGEN køre FLUSH PRIVILEGES når du sætter privilegierne senere hen - og derfor er det så meget nemmere bare at bruge GRANT, da du så ikke behøver at køre den ekstra kommando.
Har du tilladt anonym adgang til din MySQL? Hvis du har, er det derfor - kør REVOKE ALL PRIVILEGES FROM ''@'localhost'. Hvis du har MySQL 5.0.2 eller senere, kan du også bare køre DROP USER ''@'localhost'.
Har installeret en 2.5.6 version af phpmyadmin, da jeg ikke kunne få det andet til at virke. men har næsten fået alt dette på denne version til at virke, men den melder fejl når jeg sætter følgene kode ind:
GRANT SELECT, INSERT, UPDATE, DELETE, FILE, CREATE, ALTER, INDEX, DROP ON user.* TO 'test'@'localhost' IDENTIFIED BY 'test';
følgene fejl kommer:
Fejl
SQL-forespørgsel :
GRANT SELECT , INSERT , UPDATE , DELETE , FILE , CREATE , ALTER , INDEX , DROP ON user. * TO 'test'@ 'localhost'IDENTIFIED BY '123'
MySQL returnerede:
#1064 - You have an error in your SQL syntax near ''localhost'IDENTIFIED BY '123'' at line 1
Hva er problemet der? har tjekket privilegierne hedder det samme.
Jeg kan ikke se siden, da loginformen sender mig til localhost. Åbn lige din config-fil og find linien med $cfg['PmaAbsoluteUri']. Hvis der er en værdi, så prøv at slette den, ellers skal du sætte http://80.62.179.227/phpMyAdmin/ ind i stedet.
Jeg kan dog nok også regne det ud hvis du selv kører SHOW GRANTS mens du er logget ind som den bruger og giver mig outputtet.
Hvordan ændre jeg privilegierne for brugerne så de ikke har samme privilegier til samme databaser. Og samme måde, gør grineflippet til bruger af sine egne databaser, og ikke kan se andres?
Det første er nemt nok, hidtil har du oprettet brugerne ved at køre GRANT SELECT, INSERT, UPDATE, DELETE, FILE, CREATE, ALTER, INDEX, DROP ON user.* TO 'test'@'localhost' IDENTIFIED BY 'test';
For at give dem en anden database, skriver du blot det databasen skal hedde i stedet for user.
For at fjerne privilegierne fra grineflippet, skal du bruge REVOKE:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'grineflippet'@'localhost'
og GRANTer så de nødvendige privilegier bagefter.
MEN - da det lader til du har fjernet root-brugeren (den fremgik ikke da jeg kiggede på listen over brugere), vil det så betyde du ikke har mulighed for at oprette nye brugere. Opret derfor en root-bruger INDEN du kører REVOKE:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'kodeord' WITH GRANT OPTION;
Du må selv om hvorvidt den rent faktisk skal hedde root, men der skal altid være mindst en bruger der har adgang til det hele og kan fungere som administrator.
Apropos MySQL 5.0, så vær lige opmærksom på at MySQL 4.1 og senere som udgangspunkt ikke er kompatibel med PHP 4 - der skal du i stedet bruge PHP 5.
Efter du har oprettet den nye root-bruger kan du revoke grineflippets privilegier når du er logget på som root. Jeg mener ikke man kan revoke fra sig selv (det ville være ret risikabelt om man kunne, da man kan ende med at ingen kan oprette nye brugere).
Bemærk at der altid SKAL være en enkelt bruger der har adgang til alle databaser med fulde privilegier (inkl. GRANT OPTION), og at det er denne der skal oprette nye brugere. Dette er normalt.
At hver bruger skal have deres egen database. og ikke kunne se andre end deres egen, og grineflippet er administrator brugere. Brugeren må ik have mere end ÈN database.
Og sådan er det også nu. Hvis du logger ind som brugeren test, vil du se han kun har en database at tilgå.
Grunden til at den anden ikke-admin bruger, aaaa, ser den samme database er at du skrev samme database i deres GRANT (ON user.*, hvor user er navnet på databasen). Derfor skal du REVOKE den ene brugers privilegier og GRANTe de nye - når det er noget specifikt der skal fjernes er syntaksen den samme som for GRANT, men uden det der med IDENTIFIED BY.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.