Sybase позволяет приложению передавать данные "контекста" - например, имя конечного пользователя приложения и т. Д. - в сеанс подключения к базе данных.Контекстные данные - это просто набор пар ключ-значение, которые сохраняются / извлекаются с помощью set_appcontext
/ get_appcontext
сохраненных процедур.
ВОПРОС :
Имеют ли другие основные серверы БД (MSSQL / Oracle / MySQL) средство для передачи контекста приложения в сеанс, аналогичный Sybase set_appcontext
?
Подробности :
Одним конкретным практическим использованием контекста приложения является случай, когда у вас есть приложение со средним уровнем, подключающееся к базе данных в качестве очень специфического универсального пользователя базы данных (примеры включают «webuser» / «http» для серверной части веб-приложения, работающей в сети)пользователь сервера или «myappserver» для сервера приложений).
Когда это произойдет, мы все же хотим, чтобы сеанс базы данных знал, кто является конечным пользователем (например, фактическим пользователем, использующим клиент приложения), либо для контроля доступа, либо (более актуально для моих интересов), для аудитаТриггер / history, чтобы иметь возможность определить, какой конечный пользователь внес изменение, и записать информацию о конечном пользователе в таблицу аудита.
Обратите внимание, что информация установлена на уровне сеанса, что означает, что любые вставки / обновления/ delete, выполненные в этом сеансе, могут использовать данные контекста, не передавая их в каждый отдельный оператор SQL - это ОЧЕНЬ важно, скажем, для триггера.
В качестве очень конкретного примера того, почему это полезно,допустим, у вас есть сервер приложений, запускающий сеанс БД от имени клиента, в который вы вставляете / обновляете / удаляете строки в 5 различных таблицах.Вы хотите иметь контрольные таблицы для каждой из этих 5 таблиц, которые включают информацию «какой конечный пользователь внес каждое изменение».
Используя данные контекста, вы можете просто извлечь данные «конечного пользователя» из контекста приложения, используя триггер, и сохранить их как часть записи таблицы аудита.Без использования контекста приложения вам необходимо будет (1) добавить столбец «конечный пользователь» в каждую из этих 5 таблиц (а не только в таблицы аудита) и (2) изменить сервер приложений для вставки или установки при обновлениизначение этого столбца в КАЖДОМ SQL-выражении, которое выдает сервер приложений.О, и это даже не касается того, как это можно сделать, если вы удаляете строку.