Мое приложение должно аутентифицировать весь сеанс в БД с помощью доверенной процедуры (которая устанавливает некоторые значения в контексте сеанса).В настоящее время эта процедура вызывается для каждого нового сеанса сразу после его открытия.
Теперь я хотел бы улучшить это, удалив ненужные обходы.Соединения из пула соединений, которые использовались (и аутентифицировались) ранее, не требуют повторного вызова процедуры, потому что переменные контекста сеанса все еще установлены на сервере.
Но я не могу найти способ идентифицироватьповторно используемые соединения.Есть ли какой-либо способ (который, конечно, тоже не нуждается в передаче туда и обратно)?
Архитектура: несколько клиентских приложений используют одну и ту же учетную запись БД (учетная запись только для чтения с синонимами к реальной схеме) для подключения,После подключения требуется, чтобы каждый новый сеанс вызывал процедуру аутентификации для установки некоторых переменных контекста сеанса.Эти контекстные переменные проверяются при выборе / вставке / обновлении / удалении Oracle FGAC (виртуальная частная база данных).
Мой код:
OracleConnection conn = new OracleConnection();
conn.ConnectionString = _connectionString;
conn.Open();
if (true) { // TODO: Identify not yet authenticated connections.
using (OracleCommand cmd = new OracleCommand("authentication.login", conn)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("i_user_id", OracleDbType.Int64).Value = _userId;
cmd.Parameters.Add("i_role_id", OracleDbType.Int64).Value = _roleId;
cmd.ExecuteNonQuery();
}
}