Ik probeer het mogelijk te maken dat een website die zich elders bevindt bepaalde gegevens uit mijn database kan ophalen, tot nu toe zonder het gewenste resultaat want de website kan geen verbinding maken ( Can't connect to MySQL server)

Dit is wat ik heb gedaan:
1.
 
 mysql> GRANT SELECT ON mijndatabase.mijntabel TO nieuwegebruiker@’ipadres-van-externe-website’ IDENTIFIED BY ‘wachtwoord’; 


2. open port 3306 mysql


sudo iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d ipadresexternewebsite --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -s ipexterneadreswebsite --sport 3306 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT


config van *.php pagina op de externe website die contact gaat maken met mijn server

$host = "ipadres van mijn server";
$user ="nieuwegebruiker";
$passwd = "wachtwoord"';
$db = "mijndatabase";


Vergeet ik iets of wat doe ik verkeerd?
Ik heb achter het ipnummer een willekeurig portnumner gezet :

123.123.123.123:24356

In de router portforwarding van 24356 naar 3306.

Vervolgens in MySQL een unieke gebruiker met het remote ipadress aangemaakt voor alleen die verbinding.

Ik gebruik adminer.php vvor het beheren van de database.
kun je vanaf de server van de remote website wel de server met de database bereiken op poort 3306?

Eerste probleem dat je zou kunnen hebben: de server met de website moet verkeer naar buiten over poort 3306 toestaan.

Dan moet de ontvangende server (met de db) poort 3306 open hebben staan. Dat doe je met iptables;

Dan moet mysqld ook nog verkeer van buiten aankunnen:
https://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html
zie my.cnf

En tenslotte moet inderdaad met GRANT een zekere user toestemming krijgen om te connecten (vanaf het ip van de website)

--
Wat als je met telnet probeert vanbuiten de database te benaderen?

$ telnet ipvandatabaseserver 3306

Het mysql proces mysqld "luistert" default alleen op localhost 127.0.0.1 is wat Ivo bedoelt en dat is waarschijnlijk dat wat je nog moet configureren. De kans bestaat dat je dan ook je eigen php scripts waarin "localhost" staat ook aan moet passen. Gebruik daarvoor in de plaats nu het ipnummer van de server en dus niet het ipnummer van buiten tenzij de server direct aan internet hangt uiteraard (zonder NAT dus). Na het aanpassen moet je de mysqld herstarten. Zie ook de telnet-tip van Ivo.
Het is gelukt, na een herstart en in my.cnf heb ik de de localhostip weggehaald.
Uit interesse, waarom zijn de SQL-database en de website beide op een gescheiden netwerk? Of is het zo dat je externe personen/bedrijven toegang verschaft tot je database?
Beiden. Er is een website op dezelfde server als de database die er gebruik van maakt en er is extern een website (een proefopzetje).
Als je externe personen toegang verschaft, zou ik eerder een op maat gemaakte API maken die alleen de data verschaft die ze nodig hebben. Het zou rot zijn als ze bijvoorbeeld toegang hadden tot (gehashte) wachtwoorden of financiële gegevens.
Ik heb alleen GRANT SELECT ON toegestaan,daarmee kunnen ze toch geen wachtwoorden opvragen?
Ik ben wel geinteresseerd om een api te maken maar hpoe doe je dat, waar begin ik? (ik had eerst wat gestoeid met curl) maar mijn website heeft auth. en ik kreeg het niet voor elkaar.
Ze kunnen dan gewoon je hele database doorspitten. En dat is niet waar je op staat te wachten.

Hoe je dat kan bouwen? Gewoon in PHP, en de output bijvoorbeeld in XML of JSON teruggeven.

Reageren