Мне задали задачу написать веб-интерфейс для устаревшей базы данных, где у всех пользователей есть учетные записи баз данных и соответственно назначены роли (у нас есть триггеры по всему месту записи, когда пользователи делают определенные вещи, все на основе user_name()
).
Чтобы использовать что-нибудь удаленно современное и чтобы не хранить пароль пользователя в текстовом формате, я подключаюсь к учетной записи уровня App, у которой есть привилегии олицетворения для каждого пользователя, и я пытаюсь запустить Execute As [email protected]
и Revert
установить и reset контекст выполнения до и после запуска любого SQL.
К сожалению, вызов пула соединений reset_connection
отключает w/my Connection, и он задерживает выбросы некоторых неприятных ошибок в отношении физического подключения, которое недействительно...
Я могу обойти эту ошибку, не используя пул соединений. Но тогда мой пользователь приложения нуждается в безумном количестве привилегий, чтобы фактически выполнить олицетворение. Кроме того, уничтожение пула соединений является обломком...
Как я могу сделать это без ущерба для безопасности или производительности? Имейте в виду, что я не могу изменить тот факт, что у моих пользователей есть логины базы данных, и я действительно не в восторге от того, что пользовательские пароли восстанавливаются. Является ли мой единственный вариант обхода пула соединений, чтобы я мог выдавать себя (и использовать пользователя sa, чтобы у меня было достаточно прав для фактического олицетворения кого-то)?