Определите «безопасный». Очевидно, вы хотите ограничить доступ к данным для пользователей, которые действительно нуждаются в этих данных. Тем не менее, требуется больше информации об архитектуре; это собственное приложение, которое когда-либо будет использоваться только в (защищенной) локальной сети, VPN или размещенной среде? Или это приложение используется на компьютерах, которые вы не контролируете, которые будут передавать данные через Интернет? Какой уровень безопасности вам нужен, зависит от того, какие пользователи будут использовать программное обеспечение, откуда и насколько конфиденциальны данные.
MSS имеет довольно хорошую встроенную защиту. Вы можете привязать пользователей SQL к учетным записям домена Windows, вы можете ограничить «защищаемые» (таблицы, представления, SP и т. Д.) Множеством способов в зависимости от пользователя или роли и т. Д. И т. Д. Сначала я рассмотрю эти возможности и серьезно рассмотрю вопрос об использовании из них в вашем плане безопасности. Один пользователь SQL, определенный для использования любым пользователем определенного программного обеспечения, который имеет полномочия делать все, что может потребоваться программному обеспечению, является простым, обычным и крайне небезопасным.
Если этого недостаточно, или вы хотите полностью абстрагировать свой уровень данных (например, если вам нужно, чтобы программное обеспечение могло указывать на любой тип БД от MSS до Oracle и MySql), то это может быть Хорошая идея реализовать модель репозитория с сервисным прокси. Как и Брайан, я призываю вас взглянуть на WCF. Служба WCF легко настраивается и может обеспечивать независимую аутентификацию и шифрование. Хорошо продуманный сервис WCF действительно будет очень безопасным.
За служением вы можете реализовать шаблон Repository, который абстрагирует детали того, как данные извлекаются из хранилища данных, и предоставляет простые методы, которые возвращают объекты, содержащие данные, которые вы хотите, в готовой к использованию форме. Теперь ваши сервисные методы будут просто отображать 1: 1 в методы репозитория, возможно, с некоторым переводом в объекты DataContract-serializable вместо более богатой модели предметной области, доступной по обе стороны сервиса.