Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您将如何审核ASP.NET成员资格表,同时记录用户所做的更改?_Asp.net_Asp.net Membership_Audit Trail - Fatal编程技术网

您将如何审核ASP.NET成员资格表,同时记录用户所做的更改?

您将如何审核ASP.NET成员资格表,同时记录用户所做的更改?,asp.net,asp.net-membership,audit-trail,Asp.net,Asp.net Membership,Audit Trail,使用基于触发器的方法来审核日志记录,我正在记录对数据库中的表所做更改的历史记录。我使用的(静态sql server登录)记录用户更改的方法包括在每个数据库连接开始时运行存储过程。触发器在记录审核行时使用此用户名。(触发器由产品审计提供。) 但是,ASP.NET成员资格表主要通过成员资格API进行访问。当成员API打开其数据库连接时,我需要传入当前用户的身份。我尝试将MembershipProvider子类化,但无法访问基础数据库连接 这似乎是一个常见的问题。有人知道我们在ASP.NET成员建立数

使用基于触发器的方法来审核日志记录,我正在记录对数据库中的表所做更改的历史记录。我使用的(静态sql server登录)记录用户更改的方法包括在每个数据库连接开始时运行存储过程。触发器在记录审核行时使用此用户名。(触发器由产品审计提供。)

但是,ASP.NET成员资格表主要通过成员资格API进行访问。当成员API打开其数据库连接时,我需要传入当前用户的身份。我尝试将MembershipProvider子类化,但无法访问基础数据库连接

这似乎是一个常见的问题。有人知道我们在ASP.NET成员建立数据库连接时可以访问哪些挂钩吗?

更新2: 恐怕在AOP方面看起来不太好-看到了吗

正如在评论中提到的,最好的办法似乎是使用提供者工具包的提供者实现,并将钩子连接到
SqlConnectionHelper.GetConnection()

我使用的工具包代码,我已经清理了相当多,可靠多年没有任何问题。让我在4.0上确认一下,如果您感兴趣,请打包


更新:

好的,我想我更了解您的需要,请告诉我是否正确:

您需要提供商正在使用的实际连接吗

SqlMembershipProvider利用助手类System.Web.DataAccess.SqlConnectionHolder进行所有数据访问

我没有这样做,但从我收集的信息来看,您可以拦截使用AOP实现(如Castle DynamicProxy(或利用它的库之一))构建此对象的调用,并在那里建立连接

有经验的人能证实或否认这一点吗


原始答复:

不需要从SqlMembershipProvider派生。进去拿你需要的东西

string connectionString = 
   typeof(SqlMembershipProvider)
   .GetField("_sqlConnectionString",BindingFlags.NonPublic | BindingFlags.Instance)
   .GetValue(Membership.Provider);

谢谢,这个主意很有趣。我认为AOP方法是有意义的。但我不确定现在是否要引入对Castle之类的东西的另一种依赖。现在我正在考虑使用SqlMembershipProvider的源代码,我刚刚发现它是可用的。我担心的一点是,这段源代码是2006年的,我不知道它是否已经用后续的asp.net版本进行了更新。实际上,我还有一个关于AOP的问题,它对我们来说不太好。但是-我的下一个建议是使用基于工具包示例的自定义提供程序。这些年来,我对代码进行了很多改进,它的效果非常好。未更改任何影响该代码适用性的内容。如果你能等几天,我会把我的作品提供给你。谢谢很高兴知道MS提供的代码适合您。我确实修改了GetConnection,这很有效。我唯一担心的是,如果MS多年来一直在这个库中添加安全功能,我就不会拥有它们。到目前为止,它的工作原理与内置提供程序相同。