Как мне работать со строками подключения в приложении Click-Once? - PullRequest
0 голосов
/ 15 марта 2010

Я подумываю о создании приложения Click-Once и пытаюсь обдумать, как справиться со всей проблемой строки подключения. Проблема заключается в следующем:

Я хочу использовать EF для получения данных непосредственно от каждого клиента, поэтому для каждого клиента требуется настроить строку подключения (это не проблема). Как мне работать с клиентами, которые не находятся в одном домене с запрашиваемым SQL Server? Другими словами, если я пытаюсь запустить свое приложение из дома, а не с работы, как должна выглядеть строка подключения? Должен ли я настроить свой SQL Server по-другому, чтобы разрешить этот сценарий?

Заранее спасибо!

Ответы [ 5 ]

3 голосов
/ 15 марта 2010

Эта проблема выходит за рамки ClickOnce, это общая проблема с сетью.

Первый вопрос: можно ли вообще добраться до SQL Server из дома?

Скорее всего, ответ «нет», если SQL Server находится во внутренней сети компании. Вам нужно будет настроить VPN для доступа к серверу. Если вы настроите VPN, то вы сможете использовать ту же самую строку подключения из дома, если полностью укажете имена серверов, то есть SqlServer.mycompany.local, а не SqlServer. Скорее всего, вы будете подключаться к VPN с использованием учетных данных домена, поэтому вы сможете использовать те же строки подключения.

Но еще лучше было бы использовать оболочку, такую ​​как WCF Data Services . Это предоставит данные через веб-сервис (WCF) и предоставит вам множество функциональных возможностей - вы можете написать Linq против всего этого. В долгосрочной перспективе с этим, вероятно, будет легче работать, если вы ожидаете, что приложение будет использоваться удаленно.

В нашем случае у нас на самом деле есть бизнес-сервисы - довольно большой API, который предоставляет бизнес-логику через веб-сервисы, а не просто упаковывает таблицы базы данных (назовите его SOA, если хотите). В сверхдолгосрочной перспективе это вариант best , поскольку он абстрагирует логический API, а не от базы данных, но если вы ищете быстрое решение, то службы данных WCF могут быть подходящим вариантом. .

1 голос
/ 15 марта 2010

Как вы планируете аутентифицировать домашних пользователей? Внутри домена вы можете проверить разрешения учетных записей пользователей, используя встроенную аутентификацию, поэтому сама строка соединения не содержит учетных данных. Для пользователей за пределами домена я не думаю, что это возможно.

Я бы подумал, что вам нужно обернуть вашу базу данных за веб-сервисом, с веб-сервисом, поддерживающим не доменную схему аутентификации. Удаленные пользователи получают доступ к этой базе данных, а не к базе данных.

0 голосов
/ 15 марта 2010

Если SQL Server маршрутизируется на одно и то же имя хоста, независимо от того, где находится клиент (т. Е. Ваш дом, офисы клиента) - я предполагаю, что у вас настроена какая-то VPN или DMZ, чтобы ваш SQL-сервер был доступен за пределами вашего офисного здания - тогда вы можете оставить строку подключения в вашем приложении и использовать аутентификацию SQL (то есть имя пользователя / пароль против аутентификации Windows.)

Если вашему SQL-серверу требуется другая строка соединения (например, на работе к нему обращаются в sql.internal.domain.com, вне работы в sql.external.domain.com), вам понадобится какой-то механизм выбора, где пользователь сможет выбрать, какое соединение использовать перед входом в систему - иметь все возможные строки подключения в вашем приложении.

Вы также можете сделать такие вещи, как использование IP-адреса, чтобы определить, какую строку подключения использовать (например, если текущий IP-адрес ПК находится в диапазоне 172.40.10.1 - 172.40.10.254), затем подключиться к sql.internal.domain.com, в противном случае sql.external.domain.com. Конечно, это сложнее поддерживать.

EDIT

Как и другие предлагали, веб-сервис может также выплачивать дивиденды здесь.

0 голосов
/ 15 марта 2010

Несмотря на то, что аутентификация SQL будет работать, вам потребуется отдельная комбинация пользователя / пароля, настроенная для каждого пользователя вашего приложения на сервере SQL. Не идеальная или простая в обслуживании ситуация.

Лучше всего вообще не подключаться к базе данных. Вместо этого создайте безопасный веб-сервис, который ваше приложение вызывает для получения своих данных. Затем эта веб-служба может быть защищена с помощью Windows или аутентификации по имени пользователя / паролю (которая может быть проверена в домене AD).

0 голосов
/ 15 марта 2010

Использовать аутентификацию SQL. Это будет работать в разных доменах.

...