Ситуация: Я разработал базу данных, которая сильно зависит от множества триггеров, чтобы обеспечить согласованность данных (для выполнения CFR 21 часть 11). Существует 2 таблицы для хранения пользователей: Login & User
(в пользу серверов Sql User management). Пользователи содержат статические данные входа для внешней аутентификации, а X1 содержат данные для входа в нашу систему (Fake User). Человек должен войти в нашу заявку, используя одну из данных Login
(Real User). Когда система должна взаимодействовать с внешней системой (Active Directory или FileSystem или Database), соответствующий User
(Fake User) будет выдавать себя за другое лицо.Добавить колонку тени для ввода инструкции
Для уточнения будет использоваться X1 (настоящий пользователь) для входа и X2 (поддельный пользователь) для пользователя.
Когда X2 подключен к базе данных, триггер не знает, кто такой X1.
Проблема: Триггер регистрирует каждое действие, выполняемое X2, и записывает его в журнал. Поскольку сервер только знает, что X2 подключен к базе данных, он не знает реального пользователя X1.
Заказчик также видит, кто является RealUser X1. Поскольку эта информация теряется при подключении к базе данных, у меня есть эта проблема сейчас.
Решение Попытки:
- Создать StoredProcedure, который принимает RealUser x1 в качестве аргумента. Это невозможно, поскольку старое программное обеспечение полагается на текущее значение для вставки и обновления таблицы.
- Добавить дополнительные данные в инструкцию Insert/Update (возможно, я ничего не обнаружил в связи с этим). Данные будут использоваться только триггером и не должны быть записаны в таблицу.
- Добавить информацию о текущем пользователе X1 в Connection или в общий магазин, основанный на подключении (что-то вроде этого существует в SqlServer?)
- Используйте свойство ApplicationName для «подделки» имени пользователя. Но это заставляет меня чувствовать себя как монокль. Там должна быть лучшим способом
Заранее спасибо