Database connection Access denied
Ik heb een database aan gemaakt met de naam: "testdb"
en ik heb een gebruiker toegevoegd met de naam: "test"
De gebruiker 'test' heeft alle rechten van de database 'testdb'
Ik probeer nu verbinding te krijgen met de database 'testdb' met de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$servername = "localhost";
$username = "test";
$dbname = "testdb";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
$username = "test";
$dbname = "testdb";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
Met deze code krijg ik de melding:
Connection failed: Access denied for user ''@'localhost' to database 'testdb'
Als ik de $dbname verander in 'root' en de $username in 'MySQL' zoals hieronder:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$servername = "localhost";
$username = "root";
$dbname = "MySQL";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
$username = "root";
$dbname = "MySQL";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
Dan krijg ik wel de melding 'Connected successfully'
Waarom lukt het bij de database 'MySQL' wel en niet bij de 'testdb' database?
Nog wat gegevens voor als het nodig is.
Ik gebruik:
- wampserver: Versie 3.2.0 - 32bit
- Apache Versie: 2.4.41
- phpmyadmin Versie: 4.9.2
- MySQL Versie: 5.7.28
Gewijzigd op 10/04/2020 18:29:59 door Fester Splinter
Heb je daarna ook het commando FLUSH PRIVILEGES; uitgevoerd?
Weet je zeker dat het localhost is, en niet 127.0.0.1?
Wat zeggen de volgende queries als je deze met root uitvoert:
en
?
Ik heb daarna niet het commando FLUSH PRIVILEGES; uitgevoerd maar nu alsnog gedaan en dan krijg ik deze melding:
"MySQL gaf een lege resultatenset terug (0 rijen)"
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
Bij # SELECT Host, User FROM mysql.user; krijg ik dit tabelletje:
Host | User
Localhost | mysql.session
Localhost | mysql.sys
Localhost | root
Localhost | test
Host | User
Localhost | mysql.session
Localhost | mysql.sys
Localhost | root
Localhost | test
Code (php)
1
2
3
4
5
6
2
3
4
5
6
Bij # SELECT Host, Db, User FROM mysql.db; krijg ik dit tabelletje:
Host | Db | User
Localhost | Performance_schema | mysql.session
Localhost | sys | mysql.sys
Localhost | tsetdb | test
Host | Db | User
Localhost | Performance_schema | mysql.session
Localhost | sys | mysql.sys
Localhost | tsetdb | test
Gewijzigd op 11/04/2020 03:42:12 door Fester Splinter
setdb
Tijd voor een straffe bak koffie?
tTijd voor een straffe bak koffie?
Typfoutje, maar die heb ik hier in het forum gemaakt en niet in PHPMyAdmin. Ik heb het over getypt en ben dyslectisch.(inderdaad niet altijd handig met programmeren lol)
Voor de zekerheid heb ik alles nog eens goed nagekeken maar in de code en in phpmyadmin is alles wel goed geschreven.
Ik heb de verbinding ook nog maar es weer geprobeerd maar ik krijg nog steeds dezelfde melding. Ik heb echt geen idee waarom. Misschien ligt het aan wampserver en moet ik xampp eens proberen.
Overgetypt? Hoe? En heb je als je dit direct in de mysql.* tabellen hebt gewijzigd wel op laten volgen door een FLUSH PRIVILEGES?
en
Heb ik gecopieerd en geplakt in de console van phpmyadmin terwijl ik het gebruikers account "root" had aangevinkt. Daarna heb ik
uitgevoerd.
Ik heb de querys:
en
Heb ik gecopieerd en geplakt in de console van phpmyadmin terwijl ik het gebruikers account "root" had aangevinkt. Daarna heb ik
uitgevoerd.
In de afbeeldinge zie dat alle rechten zijn toegewezen aan de gebruikers: "test" en "root"
En toch krijg ik nog steeds de melding: "Connection failed: Access denied for user ''@'localhost' to database 'testdb'"
Dit ziet er uit alsof er geen user is aangegegeven.
In je oorspronkelijke vraagstuk had je dezelfde foutmelding, maar het maken van een connectie middels root ging toen wel goed. Hoe kan dat dan foutgaan als je enkel de waarde van $username verandert, als dat daadwerkelijk het enige is wat je hebt aangepast (ik zou niet weten wat je verder zou willen veranderen)?
Ik zou voorstellen om één ding tegelijkertijd te veranderen, of in ieder geval de laatste toestand door te geven in je reacties, anders wordt het vrij onmogelijk om te analyseren wat er precies fout gaat.
NB die SELECT queries vragen enkel informatie op, deze wijzigen niets in gebruikers, databases of privileges, dit was enkel om een overzicht op te roepen van de huidige toestand hiervan en dit legde al meteen een typefout bloot. Het daarna aanroepen van FLUSH PRIVILEGES, tenzij je ondertussen inhoudelijk iets hebt verandert, heeft dan ook geen enkel effect.
Gewijzigd op 12/04/2020 13:20:32 door Thomas van den Heuvel
Quote:
In je oorspronkelijke vraagstuk had je dezelfde foutmelding, maar het maken van een connectie middels root ging toen wel goed. Hoe kan dat dan fout gaan als je enkel de waarde van $username verandert, als dat daadwerkelijk het enige is wat je hebt aangepast (ik zou niet weten wat je verder zou willen veranderen)?
Het klopt dat de connectie met root wel goed ging maar dan alleen als ik de database "MySQL" heb geselecteerd.
Ik zal hieronder precies aangeven wat wel werkt en waar ik welke foutmelding bij krijg:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$servername = "localhost";
$username = "root";
$dbname = "MySQL";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// dit werkt wel
$username = "root";
$dbname = "MySQL";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// dit werkt wel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$servername = "localhost";
$username = "test";
$dbname = "MySQL";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// Dit werkt niet en krijg ik de volgende foutmelding:
// Connection failed: Access denied for user '/* is leeg */'@'localhost' to database 'mysql'
$username = "test";
$dbname = "MySQL";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// Dit werkt niet en krijg ik de volgende foutmelding:
// Connection failed: Access denied for user '/* is leeg */'@'localhost' to database 'mysql'
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$servername = "localhost";
$username = "test";
$dbname = "testdb";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// Dit werkt ook niet en krijg ik dezelfde foutmelding:
// Connection failed: Access denied for user '/* is leeg */'@'localhost' to database 'testdb'
$username = "test";
$dbname = "testdb";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// Dit werkt ook niet en krijg ik dezelfde foutmelding:
// Connection failed: Access denied for user '/* is leeg */'@'localhost' to database 'testdb'
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$servername = "localhost";
$username = "root";
$dbname = "testdb";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// En dit werkt ook niet maar krijg nu deze foutmelding:
// Connection failed: Unknown database 'testdb'
$username = "root";
$dbname = "testdb";
$password = "";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// En dit werkt ook niet maar krijg nu deze foutmelding:
// Connection failed: Unknown database 'testdb'
Zoals jullie kunnen zien op de eerste afbeelding in mijn vorige bericht staat dat de gebruikersnamen "root" en "test" de globale rechten op "ALL PRIVILEGES" staan.
En op de tweede afbeelding is te zien dat de gebruikers die toegang hebben op de database "testdb" root en test zijn.
@- SanThe -
Het valt mij eerlijk gezegd nu pas op dat in de eerste twee foutmeldingen user '' leeg zijn. Dus waarschijnlijk heeft - SanThe - wel gelijk.
Maar ik heb nog geen idee hoe ik het moet oplossen.
Gewijzigd op 12/04/2020 15:31:04 door Fester Splinter
"mysql" is een database in de MySQL-database :).
Type maar eens in:
De "mysql" database bevat de structuur + metagegevens van alle andere databases... in de database :p.
Er is dus blijkbaar iets mis met de nieuw gecreëerde database "testdb".
Ik zag eerder trouwens Localhost staan, en niet localhost.
Dit (zowel localhost en al helemaal Localhost) is in zekere zin een specifieke hostnaam. Je zult dus aan moeten geven naar welk IP deze naam vertaald dient te worden. Dat is de reden dat ik meestal gewoon IP's gebruik (127.0.0.1) zodat je deze koppeling niet hoeft te maken, en er ook geen lookup hoeft plaats te vinden om de vertaling host -> IP te maken.
Om er zeker van te zijn dat "localhost" geconfigureerd staat zou je in je hosts bestand moeten kijken, deze staat onder: <Windows Pad>/drivers/etc/hosts (zonder extentie).
Hierin zou op zijn minst het volgende moeten staan (alle regels die beginnen met # zijn commentaar en doen niets):
Maar misschien hoeft dat tegenwoordig zelfs niet meer.
Het zou in ieder geval een stuk eenvoudiger zijn om gewoon met IP's te werken zou ik zeggen.
Maar ik ben nu ongeveer bijster hoe de toestand aan jouw kant is.
Wat geven nu de volgende twee queries terug:
en
En weet je ook zeker dat je het PHP-bestand hebt opgeslagen?
En weet je ook zeker dat je dit PHP-bestand aan het aanroepen bent, en niet per ongeluk een oude versie aan het bekijken bent ofzo?
Heb je de pagina ook echt ververst, zodat de browser je niet een gecachede variant serveert? Gebruik bijvoorbeeld eens een keer Ctrl-F5 ofzo?
Als dit alles niet werkt kan ik je een aantal queries + test script geven om alles nogmaals, maar dan zeker op de goede wijze, te testen.
Maar als dit al voor enorm veel problemen zorgt... maak dan je borst maar vast nat voor het moment dat je dat ding daadwerkelijk wilt gaan gebruiken :p.
Gewijzigd op 12/04/2020 15:40:49 door Thomas van den Heuvel
Dit bestand staat bij mij trouwens in de map: Windows/System32/drivers/etc/hosts :p
En dit is het resultaat van de eerste query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
MySQL/mysql/user/ http://localhost/phpmyadmin/server_privileges.php?flush_privileges=1&server=2
Weergave van records 0 - 3 (4 totaal, Query duurde 0,0004 seconden.)
SELECT Host, User FROM mysql.user
Host User
localhost mysql.session
localhost mysql.sys
localhost root
localhost test
Weergave van records 0 - 3 (4 totaal, Query duurde 0,0004 seconden.)
SELECT Host, User FROM mysql.user
Host User
localhost mysql.session
localhost mysql.sys
localhost root
localhost test
En dit is het resultaat van de tweede query:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
MySQL/ http://localhost/phpmyadmin/index.php?server=2
Weergave van records 0 - 2 (3 totaal, Query duurde 0,0004 seconden.)
SELECT Host, Db, User FROM mysql.db
Host Db User
localhost performance_schema mysql.session
localhost sys mysql.sys
localhost testdb test
Weergave van records 0 - 2 (3 totaal, Query duurde 0,0004 seconden.)
SELECT Host, Db, User FROM mysql.db
Host Db User
localhost performance_schema mysql.session
localhost sys mysql.sys
localhost testdb test
(deze resultaten worden bij mij trouwens niet weergegeven in de console. Zou dat niet zo moeten zijn? Ik heb ze nu gekopieerd met de optie "Kopieer naar klembord")
Ik sla altijd mijn bewerkingen altijd gelijk op en ververs altijd de webpagina met ctrl f5. Dat zijn handelingen die ingebakken zijn en ik uit automatisme doe.
Gewijzigd op 13/04/2020 05:28:35 door Fester Splinter
Wat als je gewoon eens in een DOS-prompt het volgend intypt?
Druk nogmaals op enter als je wachtwoord leeg is, en als je de database in komt:
Dat zou moeten werken als alles goed ingesteld staat?
Quote:
(deze resultaten worden bij mij trouwens niet weergegeven in de console. Zou dat niet zo moeten zijn? Ik heb ze nu gekopieerd met de optie "Kopieer naar klembord")
Hmm. Wordt phpMyAdmin standaard meegeleverd met WAMP tegenwoordig? Anders zou je een in de configuratie kunnen kijken hoe die een verbinding maakt met de database (en welke). Wordt daar bijvoorbeeld een niet-standaard poort gebruikt (default is 3306). Maar dit is mogelijk interessant om verder te onderzoeken omdat ook dit niet direct het gewenste resultaat geeft.
Gewijzigd op 13/04/2020 12:44:41 door Thomas van den Heuvel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
C:\Users\xxx>cd "C:\wamp\bin\mysql\mysql5.7.28\bin"
C:\wamp\bin\mysql\mysql5.7.28\bin>mysql -u test -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 74
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> USE testdb
Database changed
mysql>
C:\wamp\bin\mysql\mysql5.7.28\bin>mysql -u test -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 74
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> USE testdb
Database changed
mysql>
Hieronder heb ik weer aangegeven wat wel en wat niet werkt. Ik laat nu alleen de inlogegevens zien:
Code (php)
1
2
3
4
5
2
3
4
5
$servername = "localhost";
$username = "root";
$dbname = "MySQL";
// dit werkt wel
$password = "";
$username = "root";
$dbname = "MySQL";
// dit werkt wel
$password = "";
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$servername = "localhost";
$username = "root";
$dbname = "testdb";
$password = "";
Dit werkt niet en krijg ik deze melding:
(HY000/1049): Unknown database 'testdb'
$username = "root";
$dbname = "testdb";
$password = "";
Dit werkt niet en krijg ik deze melding:
(HY000/1049): Unknown database 'testdb'
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$servername = "localhost";
$username = "test";
$dbname = "testdb";
$password = "";
Dit werkt ook niet en krijg ik de volgende melding:
(HY000/1045): Access denied for user 'test'@'localhost' (using password: NO)
Het valt mij op dat user 'test' nu wel wordt gelezen.
$username = "test";
$dbname = "testdb";
$password = "";
Dit werkt ook niet en krijg ik de volgende melding:
(HY000/1045): Access denied for user 'test'@'localhost' (using password: NO)
Het valt mij op dat user 'test' nu wel wordt gelezen.
Quote:
Hmm. Wordt phpMyAdmin standaard meegeleverd met WAMP tegenwoordig?
Dat is volgens mij altijd al zo geweest. Wamp, Apache, phpmyadmin en mysql zitten altijd in één pakket.
De poort die wordt gebruikt is 3308
Ik had de database Mariadb tijdelijk uitgeschakelt en dat had ik beter niet kunnen doen want nu krijg ik de melding dat ie geen verbing kan maken met de doel computer.
Momenteel gebruikt MySQL gebruik van poort 3308 en ik lees op internet dat 3306 de standaard poort is.
Ik heb deze getest en krijg het volgende resultaat:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
***** Test which uses port 3306 *****
===== Tested by command netstat filtered on port 3306 =====
Port 3306 is not found associated with TCP protocol
Port 3306 is not found associated with TCP protocol
===== Tested by command netstat filtered on port 3306 =====
Port 3306 is not found associated with TCP protocol
Port 3306 is not found associated with TCP protocol
Pffff... het is allemaal wel erg complex hoor
Mja, probeer dan voor de gein eens te connecten via poort 3308? Want mogelijk praat je dus met de verkeerde database-server. Daarom was mijn vraag ook: met welke database-server praat phpMyAdmin, inspecteer dus de configuratie van phpMyAdmin en kijk welke poort daar staan ingesteld? Indien je communiceert via een niet-standaard poort dan zul je deze dus expliciet in moeten stellen.
Of probeer het volgende:
Code (php)
Die [end] is om te zien of je het einde van het script uberhaupt bereikt, als de pagina blank blijft voeg dan error_reporting et cetera toe.
Gewijzigd op 13/04/2020 22:43:55 door Thomas van den Heuvel
Het werkt :D
ik had dit gevonden in "config.inc.php"
Ik heb verschillende config bestanden gevonden waar de poort wordt aangeroepen. Het lijkt me beter dat ik me daar nu nog niet in ga verdiepen. Ik ga eerst weer verder met de tutorial waar ik mee bezig was.
Hartstikke bedankt voor je tijd en hulp Thomas!