У нас есть ситуация, когда у разработчиков нет никаких UPDATE
разрешений, НО они работают с приложениями и видят строки подключения -> они знают пароли от некоторых учетных записей SQL (пример SQLLogin1
), которые имеют разрешения UPDATE. Наши операции в настоящее время не совершенны, и иногда необходимо изменить производственные данные (пока нет графического интерфейса для этого).
Вместо того чтобы связываться с администратором базы данных и просить его изменить данные, разработчик (неправильно) использует учетную запись SQL SQLLogin1
(у которой есть разрешение на изменение данных) и подключается через SQL Server Management Studio, чтобы самому изменять данные.
Администратор базы данных не может изменить пароль, SQLLogin1
если Разработчик не увидит новую строку подключения и новый пароль, поскольку используемая строка подключения приложения SQLLogin1
поддерживается Разработчиком.
Вопрос:
Есть ли способ запретить доступ к SQLLogin1
входу в SQL, но только если он подключается через SSMS?
В то же время, если SQLLogin1
соединение через .Net SqlClient Data Provider
( program_name
в sys.dm_exec_sessions
), он должен быть разрешен для входа.
Таким образом, мы не хотим, чтобы Разработчик подключался через SSMS SQLLogin1
, в то время как приложение, которое использует SQLLogin1
, все еще сможет подключаться.
источник
Я думаю, что нет надежного решения вашей проблемы, так как он
Application Name
можетparameter
быть изменен любым пользователем.Вот как это можно изменить внутри
SSMS
:В
Connect to Database Object
диалоговом окне выберите «Параметры», откройтеAdditional Connection Parameters
и выберите любое имя,Application Name
например:Теперь
sys.dm_exec_sessions
DMV и Program_name () покажут, что вы передали в строке подключения вApplication Name
параметре:источник
Вы не можете отключить конкретного клиента, как уже подробно описано в других ответах.
Решение состоит в том, чтобы удалить права доступа к производственным системам из учетных записей разработчика.
Любое изменение должно быть записано в сценарии, и dba запустит сценарий.
Развертывание выполняется системным администратором; Разработчики создают пакет, который они дают кому-то с надлежащими привилегиями, и разработчики никогда не видят конфигурации, используемые в производственных системах.
Отладка организована в каждом конкретном случае с копией производственных данных в промежуточной среде в качестве предпочтительного решения или временной учетной записи с ограниченными привилегиями, если это необходимо.
источник
В идеальном смысле это проблема процесса / политики / управления. Даже если кто-то знает пароль, если это противоречит политике компании для любого, кроме администратора баз данных, подключаться к Production (ну, у вас может быть команда Release Engineering и / или администраторы sys и т. Д.), И существуют штрафы за нарушение правил, тогда этого должно быть достаточно (при условии соблюдения таких правил).
Попытка предотвратить подключение определенного приложения невозможна. Как показал sepupic , «название программы» довольно легко изменить. Но даже если разработчик не может понять это, существует множество других программ, которые могут подключаться к SQL Server. Большинство людей будут иметь доступ к SQLCMD.exe и даже к устаревшему OSQL.exe . Разработчик может подключиться из Visual Studio и даже может создать собственное приложение для подключения через «.Net SqlClient Data Provider». О, и теперь у нас даже есть Azure Data Studio. Это слишком много.
Тем не менее, это могло бы быть возможно, если бы мы подошли к этому с другой стороны: вместо того, чтобы препятствовать соединению приложения X, как насчет того, чтобы разрешить соединение только приложению Y? Конечно, мы снова попадаем в «имя программы», и даже «имя хоста» может быть подделано, НО, я уверен, что IP-адрес клиента не может быть подделан (по крайней мере, через ключевые слова строки подключения). Вы знаете IP-адрес сервера (ов) приложений или можете легко найти его из
sys.dm_exec_connections
DMV (вclient_net_address
поле).Начиная с триггера входа в систему, предложенного EzLo , мы можем изменить логику, которая определяет, является ли соединение действительным или нет, следующим:
В настоящее время единственным способом является либо войти на рабочий компьютер, либо заставить свою рабочую станцию подделывать IP-адрес сервера приложений. Надеюсь, разработчики не имеют никакого доступа для входа в производство. А подделка существующего IP-адреса в сети вызывает проблемы, которые могут отрицательно повлиять на производство, поэтому они не будут пытаться это делать, верно? Правильно?
источник
Ранее я работал в компании, которая имела эту проблему с одним разработчиком. Он был уволен, но мы также реализовали таблицу, в которой были LoginName и AllowedMachine (сервер приложений) через триггер входа. Это решило наши проблемы. Или, может быть, это было связано с увольнением.
источник