Можно ли запретить доступ к SQL Server из определенных программ? - PullRequest
6 голосов
/ 19 мая 2010

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

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

Ответы [ 6 ]

12 голосов
/ 19 мая 2010

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

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

Так что, пока вы опускаете планку и удаляете термины как «запретить доступ» из вашего вопроса, это возможно Триггер входа в систему , который проверяет 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;

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

6 голосов
/ 19 мая 2010

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

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

-Krip

4 голосов
/ 19 мая 2010

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

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

3 голосов
/ 19 мая 2010

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

0 голосов
/ 19 мая 2010

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

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

0 голосов
/ 19 мая 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...