通过PrincipalPermission对服务操作的声明性安全性使用客户端传播的事务

时间:2010-05-04 13:52:41

标签: c# wcf security transactions

我正在实现一个使用事务传播的WCF服务。

带有SQL Server的ASP .nET安全模型(SqlRoleProvider)用于授权。我通过PrincipalPermission属性使用声明性安全性,如下所示。

[ServiceBehavior(TransactionIsolationLevel = IsolationLevel.Serializable)]
public class MyService : IMyService
{
    [PrincipalPermission(SecurityAction.Demand, Role = "RoleName")]
    [OperationBehavior(TransactionScopeRequired = true)]
    public void DoSomething()
    {
    }
}

以下是问题:

我看到PrincipalPermission的授权检查(IsInRole)使用传播的事务作为环境事务来访问ASP.NET安全数据库。我不希望这样,因为这会锁定ASP.NET安全数据库中的表。此外,它在概念上是错误的,因为它只是一个访问权限检查,与业务数据库中完成的修改完全无关。

我理解我可以放弃声明性安全模型并使用新的TransactionScope以编程方式进行IsInRole检查(在适当的时候使用TransactionScopeOption.Suppress或TransactionScopeOption.RequiresNew),但是可以在保留声明性安全模型的同时实现这一点吗?

1 个答案:

答案 0 :(得分:1)

解决方案:

我将'Enlist = false'添加到SQL安全数据库的连接字符串中;这样连接就不会参与事务上下文。