【问题标题】:Declarative security on service operation via PrincipalPermission uses client propagated transaction通过 PrincipalPermission 的服务操作的声明性安全性使用客户端传播的事务
【发布时间】:2010-05-04 13:52:40
【问题描述】:

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

带有 SQL Server (SqlRoleProvider) 的 ASP .nET 安全模型用于授权。我正在通过 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),但是否可以在保留声明性安全模型的同时实现这一点?

【问题讨论】:

    标签: c# wcf security transactions


    【解决方案1】:

    解决方案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多