MS SQL Server. First time I've touched one in years.
Install a test server on my local PC. Fine.
Run the app that needs the database. It connects, builds all the tables it needs etc.
SQL Server Management Studio connects, and I can poke the tables manually, run queries etc.
All seems fine.
Cannot connect from external machine.
My firewall settings seem fine.
1) Turns out the SQL server is not an , er, server by default.
It's configured itself for 'Shared Memory' connections only, which only work from apps on the local machine.
Poke TCP/IP on.
2) The server runs on Dynamic Ports when installed with default options!
In order for a client to find it you need to start up the SQL Server Browser Service, which associates a server instance name with a port. Or nail it's port number down manually. Or both.
Finally working, but that was way more hassle than I needed.