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

Я защищаю веб-приложение ASP.NET/MVC, работающее поверх MS SQL. В рамках этого у меня есть различные соединения с базой данных, чтобы выполнять разные вещи на веб-сайте.

РЕДАКТИРОВАТЬ - Конечно, именно администраторы и администраторы должны решить, как получить доступ к данным и как размещать приложение, но они не могут многое сделать с приложением, которое недостаточно детализировано, чтобы предоставить им необходимые элементы управления. запереть вещи

Система использует только хранимые процедуры без динамического SQL. Некоторые хранимые процедуры изменяют данные, поэтому я вызываю тех, кто использует концептуально другое соединение, чем то, которое используется для доступа к другим данным, которые только читают. Ни один пользователь SQL не имеет прав доступа к любому другому объекту базы данных, кроме хранимой процедуры. Авторизация аккаунта имеет отдельное соединение. Некоторые части веб-приложения отображают платежную информацию, другие части веб-сайта - прямая оплачиваемая работа. Кажется, есть способы поставить переборки на место, которые разделяют концептуально разные вещи.

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

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

У меня есть две проблемы с этим подходом

  1. Это вряд ли "элегантно" или явно безупречно. Я едва закончил думать об этом, и это уже так много кода. Мне нужно было поставить в очередь все, что происходит с нижним соединением, и затем воспроизвести это на более высоком привилегированном соединении, что не будет реалистичным в том, как оно работает, и может вызвать странные проблемы с синхронизацией с другим кодом. Я люблю кодировать, но мне также нравится, чтобы мои тесты были надежными и легко понятными, и при этом не вводился новый набор сложностей, которые делают тесты хрупкими по-другому, чем тестируемый код. Может быть, если я полностью продублирую всю работу и все данные и запусту отдельные базы данных, но тогда сценарии сборки сервера будут кошмаром.
  2. Это вряд ли можно назвать гранулированным.

Конечно, это решенная проблема, которая только из-за неудачи или плохого гугл-фу ускользнула от моих нескольких часов поиска?

0 ответов

Другие вопросы по тегам