Строки подключения не имеют к этому никакого отношения.
пользователь запросил, чтобы у него была возможность подключиться к MS SQL Server с использованием учетной записи службы Active Directory, а не учетной записи сетевого пользователя
Это означает, что пользователь запросил ваше приложение для запуска в качестве учетной записи службы, а не в качестве текущего пользователя.Один из простых способов сделать это - просто запустить приложение под runas /netonly
:
runas /netonly /user:domain\serviceaccount MyWinFormsApp.exe
Таким образом, ваше приложение работает как учетная запись службы домена в сети и будет подключаться кSQL Server, используя учетные данные domain\serviceaccount
.Это удовлетворит требование вашего клиента, по крайней мере, на поверхностном поверхностном взгляде.
Если решение использования runas не является удовлетворительным (клиент может на законных основаниях жаловаться, что он требует, чтобы пользователи, запускающие приложение, знали домен \ serviceaccount.пароль), тогда все становится немного сложнее.Правильный способ сделать это - разделить ваше приложение на две части: приложение .exe уровня представления пользовательского интерфейса, которое запускается под учетными данными пользователя, вошедшего в систему, и компонент уровня бизнес-логики, который работает как служба, под учетными данными домена \ serviceaccount.Эти два компонента взаимодействуют, используя ваш IPC по вашему выбору (обычно WCF).Как вы, вероятно, понимаете, это требует s major переписывания вашего приложения.
Некоторые могут предложить использовать, чтобы ваше приложение имитировало домен \ serviceaccount перед открытием соединений с базой данных.Я настоятельно рекомендую это из-за беспорядка хранения / восстановления пароля учетной записи.Поскольку приложению потребуется знать пароль учетной записи службы, чтобы олицетворять его, пользователь, вошедший в систему при запуске приложения, либо узнает этот пароль, либо легко сможет его найти ( невозможно предотвратить его)Форма найти его, если приложение может найти его).Так как пароль службы домена доступен для вошедшего в систему пользователя в любом случае , он может просто использовать решение runas /netonly
.И это, наконец, объясняет, почему решение runas
является просто решением для мелкого дыма и зеркал: единственная причина, по которой ваш клиент, возможно, запросил то, что он запрашивал, состоит в том, что он хочет отделить привилегии пользователей, вошедших в систему, от привилегий приложения (т. е. не давать SQL-серверу доступ каждому сотруднику).Поскольку решение runas
(а также олицетворение в приложении) требует, чтобы вошедший в систему пользователь знал пароль учетной записи службы, разделение привилегий на самом деле не происходит, поскольку вошедший в систему пользователь может использовать любое время, когда он желает ввести пароль учетной записи службы.и повысить его привилегии для доступа к базе данных SQL Server по желанию.Поэтому единственное решение, о котором стоит поговорить, - это разделение приложения на две части.