Существует множество «правильных» способов доступа к базе данных из веб-службы. Лично я часто использую ADO.NET внутри статического класса (или, точнее, класса со связкой статических методов), который обычно возвращает DataTable (заключенный в DataSet, который можно сериализовать и, таким образом, легко вернуть из веб-службы ). Вы также можете использовать ORM (например, NHibernate), хотя они неизменно имеют большие издержки, чем ADO.NET, и, следовательно, являются потенциальным источником проблем с нагрузкой на вашем сервере.
Нет особой причины не разрешать доступ на запись к вашей базе данных из вашего веб-сервиса. Если ваш дизайн приложения требует, чтобы база данных была записана (очевидно, довольно распространенное требование), то это вполне нормально сделать из веб-службы.