Как мы должны захватить пользователя базы данных при использовании структуры сущностей на среднем уровне? - PullRequest
3 голосов
/ 28 июля 2010

Мы разрабатываем сервисный уровень для новой системы, которая будет обрабатывать все взаимодействия с базой данных MSSQL (2005).Мы немного озадачены тем, как собрать всю информацию «кто это сделал», которая требуется нашим пользователям, в некоторых из наших устаревших таблиц аудита.Хотя мы можем передать имя пользователя, которое модифицировало данные, и записать вызов, у нас есть несколько устаревших таблиц, которые мы будем использовать, которые имеют триггеры для захвата system_user при вставке, обновлении и удалении записи.В некоторых местах мы также применяем некоторую безопасность на уровне строк, которую мы также хотели бы использовать, не меняя код, если это возможно.Я читал, что некоторые используют contextinfo для хранения пользователя, но это кажется немного менее безопасным в этой ситуации.

Опция, которая мне нравится больше всего, - это использовать execute as user для каждого вызова хранимой процедуры

execute sp_myproc @foo as user = 'username'

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

Спасибо за любыевход.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2010
0 голосов
/ 22 октября 2010

Дуга,

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

Если вы используете проверку подлинности Windows, вам необходимо настроить делегирование. Это позволит вам выдать себя за конечного пользователя в базе данных. Вы используете аутентификацию Windows?

Erick

0 голосов
/ 15 августа 2010

«EXECUTE AS» не поддерживает вызовы процедур (это было бы в фактическом определении процедуры). Только удаленный или динамический SQL.

Параметры:

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

  • Включить делегирование сервера, чтобы каждый сервер мог проходить через учетные данные конечного пользователя. В основном "подражание" в asp.net.

  • Сначала введите отдельную команду

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