Действительно ли возможно запретить доступа к SQL Server из определенных программ?

В настоящее время к одной из наших баз данных (SQL Server 2008) получают доступ с помощью многих различных механизмов:.Net SqlClient Data Provider; Studio управления SQL Server; различные приложения .NET и Система Microsoft Office 2007 года (в основном Excel).

Я вижу, что в sys.dm_exec_sessions DMV возможно видеть название программы программы, получающей доступ к базе данных для текущих сессий. Мой вопрос: для одного действительно ли возможно запретить доступа из конкретной именованной программы? Первый приз был бы то, если бы это могло бы быть сделано для какой-либо именованной программы, но мы получили бы большую выгоду от способности запретить доступа к этой определенной базе данных из всех приложений Microsoft Office (особенно Excel).

6
задан Paul McLoughlin 19 May 2010 в 15:43
поделиться

6 ответов

Это НЕ возможно, и все утверждения об обратном являются змеиным маслом.

Хотя это правда, что вы можете проверить имя приложения и создать триггеры входа, которые запрещают входы на основе этого свойства, имя приложения не является безопасным свойством и может быть легко подделано кем угодно. Полагаться на него для безопасности (т.е. отказ в входе в систему) #fail.

Поэтому, пока вы опускаете планку и удаляете из своего вопроса термины «запретить доступ», можно предоставить Logon Trigger, который проверяет program_name сеанса в sys.dm_exec_sessions:

CREATE TRIGGER application_limit_trigger
ON ALL SERVER WITH EXECUTE AS '...'
FOR LOGON
AS
BEGIN
IF EXISTS (SELECT *
   FROM sys.dm_exec_sessions
   WHERE session_id = @@SPID
   AND program_name IN (N'Bad Program', N'Worse Program', N'Unmentionable')
    ROLLBACK;
END;

Program_name устанавливается некоторыми приложениями, я не знаю, устанавливает ли пакет Office это свойство на что-то полезное или оставляет его по умолчанию. И вы должны понимать, что это может быть обойдено кем угодно, просто изменив свойство ApplicationName в строке подключения.

13
ответ дан 8 December 2019 в 04:07
поделиться

Обычно вы идете наоборот. Создайте набор учетных записей с определенными правами доступа, а затем используйте эти учетные записи в соответствующих приложениях.

Если у вас есть только один логин, который используется совместно ... ну, это не очень безопасная среда, и в итоге у всех есть доступ для выполнения любых действий.

4
ответ дан 8 December 2019 в 04:07
поделиться

Просто любопытно ... почему бы вам не выдать разные идентификаторы пользователей и пароли для каждого приложения и таким образом ограничить доступ ? Я знаю, что это не совсем ответ на ваш вопрос, но я думаю, что это предпочтительный подход.

3
ответ дан 8 December 2019 в 04:07
поделиться

Возможно, будет полезно узнать, почему вы хотите это сделать. Я предполагаю, что это не из соображений безопасности, поскольку любую такую ​​схему довольно легко обойти.

Вы обеспокоены тем, что Excel и другие приложения потребляют непропорционально много ресурсов сервера? Если это так, обратите внимание на функцию Resource Governor , добавленную в SQL Server 2008. Основная идея состоит в том, что вы создаете функцию для классификации новых сеансов по группам, а затем связываете эти группы с пулами ресурсов, где память или Использование ЦП (или и то, и другое) можно регулировать при возникновении конфликта.

0
ответ дан 8 December 2019 в 04:07
поделиться

Если вы хотите ограничить доступ пользователя через приложение, используйте SSPI.

Если вы хотите ограничить только приложение, используйте олицетворение SQL Server и создайте учетную запись для этого самого приложения.

Таким образом, как только вы больше не хотите, чтобы это приложение было иметь доступ к вашему серверу,вы просто удаляете его из роли.

Предполагая, что вы создаете роль, специфичную для приложений и т. Д.

0
ответ дан 8 December 2019 в 04:07
поделиться

Для этого можно использовать механизм «Роли приложения». При подключении из приложения вы принимаете на себя определенную роль, и этой роли предоставляются привилегии. Таким образом, все приложения подключаются через этот механизм и не выдают логины SQL или NT для несанкционированного использования.

См. http://technet.microsoft.com/en-us/library/ms190998.aspx

-Krip

6
ответ дан 8 December 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: