2010-04-13 4 views
0

У нас есть аудиторские столбцы, установленные триггерами. Для неясных причин безопасности, предшествующих моему владению и из-под контроля, мы входим в систему с общим пользователем и выполняем «авторизацию сеанса», чтобы изменить пользователя на пользователя db пользователя, который вошел в систему.Столбцы аудита NHibernate и SetSessionAuth

Когда мы перешли в NHibernate, он создает совершенно новую сессию и разворачивает все до , когда мы пытаемся сделать сеанс auth, поэтому мы отключили установленный сеанс auth ...

Теперь мы пытаемся выяснить способ заставить NHibernate позволить нам «установить авторизацию сеанса», не перерабатывая сеанс на нас, поэтому мы можем использовать наш существующий триггерный стол для аудита как с устаревшими приложениями, так и с нашими новыми приложениями NHibernate.

Это не идеальное решение, или лучший способ сделать это, но возможно ли это?

Я надеялся, что существует альтернативный интерфейс, который допускает такой доступ.

Кто-нибудь знает, как это сделать, или вы можете указать мне и хорошие подсказки?

Спасибо,

Eric-

ответ

1

Вы можете наследовать DriverConnectionProvider и делать все, что вам нужно при создании соединения.

Пример:

public class MyConnectionProvider : DriverConnectionProvider 
{ 
    public override IDbConnection GetConnection() 
    { 
     var connection = base.GetConnection(); 
     var sessionAuthCommand = connection.CreateCommand(); 
     sessionAuthCommand.CommandText = "set session authorization " + GetUser(); 
     sessionAuthCommand.ExecuteNonQuery(); 
     return connection; 
    } 
} 

А затем настроить NHiberate использовать это в качестве провайдера связи.

(GetUser - это метод, в котором вы укажете правильного пользователя)

+0

Это сработало! Мы были очень близки, у нас был тот же самый код, но он получил команду от драйвера вместо соединения. Но ваш путь работал, а наш не Спасибо! E- –

Смежные вопросы