My company is using a weird database setup and I can't really figure what it is adding in term of security.
Outside World [Firewall] DMZ – Web Server [Firewall] External Database [Firewall] Internal Database
- The web server can only communicate with the External Database.
- The External Database cannot be accessed from the outside. For example, I cannot access it from my home even if I know the address and have valid username/password.
- The Internal Database cannot be accessed from the outside too.
So, the only difference between the External and the Internal Database is that the web server can access the External but not the internal.
Our data flow
When a user enters some information on our website, that information is sent to our webserver. The webserver then insert that information into the External Database. Then a job will run periodically and will take the new data on the External Database and insert it into the Internal Database. Then, employee can modify the data in the internal database and these modifications will be synchronized back into the External Database.
What does it add from a security point of view to have an External and an Internal Database?
It would make sense if one database was accessible from the outside but since they are both behind the firewall what does it changes if we insert directly into the Internal Database. Anyway, if we insert something on the External Database, it will get synchronized to the Internal Database as well.
We dug ourselves in a complicated synchronization mess with jobs running everywhere, data duplicated everywhere and with that come the traditional errors. Some jobs are not updated when we update the schema, the data is no longer the same between all the databases and we end up with a ton of data that we no longer knows if it’s the most recent copy or not and which one is valid and etc. I see all those problems as a big waste of time and money.
Now, the big reason why we made it so complicated is because: “It’s more secure”. Is it really the case because I don’t see the difference between the web server inserting the data directly into one database and using multiple jobs to synchronize that data everywhere?