0

我们有触发器设置的审计列。由于在我任职之前和我无法控制的模糊安全原因,我们使用通用用户登录,并执行“设置会话授权”以将用户更改为登录用户的 db 用户。

当我们转换为 NHibernate 时,它​​会创建一个全新的会话并在我们尝试执行 set session auth 时将所有内容都插入,因此我们关闭了 set session auth ...

现在我们正在尝试找到一种方法让 NHibernate 让我们在不回收会话的情况下进行“设置会话授权”,这样我们就可以将现有的基于触发器的审计列内容用于旧应用程序和新的 NHibernate 应用程序。

这不是一个理想的解决方案,也不是最好的方法,但有可能吗?

我希望有一个允许这种访问的备用界面。

有谁知道怎么做,或者你能指出我的方向和好的提示吗?

谢谢,

埃里克-

4

1 回答 1

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;
    }
}

然后将 NIBerate 配置为将其用作连接提供程序。

(GetUser 是您提供正确用户的方法)

于 2010-04-14T03:17:46.760 回答