Database connection Access denied

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Coenie

Mark Coenie

10/04/2020 18:26:51
Quote Anchor link
Hi, Ik ben geen backend developer maar ik ben me er in aan het verdiepen omdat het zoveel meer mogelijkheden geeft.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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";

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)
PHP script in nieuw venster Selecteer het PHP script
1
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";

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 Mark Coenie
 
PHP hulp

PHP hulp

26/05/2020 10:43:12
 
Thomas van den Heuvel

Thomas van den Heuvel

10/04/2020 20:45:37
Quote Anchor link
Hoe heb je deze database aangemaakt? Met PHPMyAdmin, via de prompt, iets anders? Hoe luiden de precieze commando's als je deze zelf hebt ingeklopt?
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
# SELECT Host, User FROM mysql.user;

en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
# SELECT Host, Db, User FROM mysql.db;

?
 
Mark Coenie

Mark Coenie

11/04/2020 03:35:11
Quote Anchor link
Ik heb de database aangemaakt met PHPMyAdmin.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 11/04/2020 03:42:12 door Mark Coenie
 
Thomas van den Heuvel

Thomas van den Heuvel

11/04/2020 15:13:54
Quote Anchor link
tsetdb

Tijd voor een straffe bak koffie?
 
Mark Coenie

Mark Coenie

11/04/2020 17:19:09
Quote Anchor link
Hahaha!!

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

11/04/2020 21:26:51
Quote Anchor link
Overgetypt? Hoe? En heb je als je dit direct in de mysql.* tabellen hebt gewijzigd wel op laten volgen door een FLUSH PRIVILEGES?
 
Mark Coenie

Mark Coenie

12/04/2020 12:40:40
Quote Anchor link
Ik heb de querys:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
# SELECT Host, User FROM mysql.user;

en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
# SELECT Host, Db, User FROM mysql.db;

Heb ik gecopieerd en geplakt in de console van phpmyadmin terwijl ik het gebruikers account "root" had aangevinkt. Daarna heb ik
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
FLUSH PRIVILEGES;

uitgevoerd.

Wrong image
Ik heb de querys:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
# SELECT Host, User FROM mysql.user;

en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
# SELECT Host, Db, User FROM mysql.db;

Heb ik gecopieerd en geplakt in de console van phpmyadmin terwijl ik het gebruikers account "root" had aangevinkt. Daarna heb ik
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
FLUSH PRIVILEGES;

uitgevoerd.

In de afbeeldinge zie dat alle rechten zijn toegewezen aan de gebruikers: "test" en "root"
https://markcoenraads.com/tijdelijke-map/gebruikers.png
https://markcoenraads.com/tijdelijke-map/databases.png

En toch krijg ik nog steeds de melding: "Connection failed: Access denied for user ''@'localhost' to database 'testdb'"
 
- SanThe -

- SanThe -

12/04/2020 13:06:24
Quote Anchor link
Access denied for user ''@'localhost' to database 'testdb'

Dit ziet er uit alsof er geen user is aangegegeven.
 
Thomas van den Heuvel

Thomas van den Heuvel

12/04/2020 13:16:52
Quote Anchor link
Geen idee wat je aan het doen bent, hoe luidt de code om een connectie te maken nu dan?

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
 
Mark Coenie

Mark Coenie

12/04/2020 14:47:34
Quote Anchor link
@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)
PHP script in nieuw venster Selecteer het PHP script
1
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'


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 Mark Coenie
 
Thomas van den Heuvel

Thomas van den Heuvel

12/04/2020 15:38:32
Quote Anchor link
Dit klopt? de user "test" heeft geen toegang tot de database "mysql".

"mysql" is een database in de MySQL-database :).

Type maar eens in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
# SHOW DATABASES;


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):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
# localhost name resolution is handled within DNS itself.
#    127.0.0.1       localhost

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT Host, User FROM mysql.user;

en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT Host, Db, User FROM mysql.db;


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
 
Mark Coenie

Mark Coenie

13/04/2020 05:19:35
Quote Anchor link
Dit staat in mijn hosts bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
127.0.0.1 localhost
::1 localhost

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)
PHP script in nieuw venster Selecteer het PHP script
1
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    

En dit is het resultaat van de tweede query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


(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 Mark Coenie
 
Thomas van den Heuvel

Thomas van den Heuvel

13/04/2020 12:43:13
Quote Anchor link
Zijn er mogelijk meerdere MySQL-varianten actief (bijvoorbeeld MySQL, MariaDB), die op verschillende poorten werken ofzo?

Wat als je gewoon eens in een DOS-prompt het volgend intypt?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysql -u test -p

Druk nogmaals op enter als je wachtwoord leeg is, en als je de database in komt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
USE testdb

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
 
Mark Coenie

Mark Coenie

13/04/2020 21:06:39
Quote Anchor link
Ik heb het volgende gedaan in opdrachtprompt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>

Hieronder heb ik weer aangegeven wat wel en wat niet werkt. Ik laat nu alleen de inlogegevens zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$servername = "localhost";
$username = "root";
$dbname = "MySQL";
// dit werkt wel
$password = "";

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.


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)
PHP script in nieuw venster Selecteer het PHP script
1
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

Pffff... het is allemaal wel erg complex hoor
 
Thomas van den Heuvel

Thomas van den Heuvel

13/04/2020 22:41:08
Quote Anchor link
Niet echt, de default instellingen van WAMP en dat soort pakketten zijn vaak compleet ruk.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$db
= new mysqli('localhost', 'test', '', 'testdb', '3308');
if ($db->connect_error === NULL) {
    echo 'connectie gelukt :)';
}
else {
    echo 'connectie mislukt :(';
}

?>
[end]

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
 
Mark Coenie

Mark Coenie

14/04/2020 10:20:36
Quote Anchor link
Tijd voor een feestje!
Het werkt :D

ik had dit gevonden in "config.inc.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$cfg['Servers'][$i]['port'] = $wampConf['mysqlPortUsed'];

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!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.