【问题标题】:What is "declarative security"? In general什么是“声明式安全”?一般来说
【发布时间】:2009-09-09 18:23:47
【问题描述】:

这个问题的答案:Declarative Security--what's this? 并没有真正告诉我太多......根本没有告诉我任何直言不讳的事情。

我看到一篇关于 .NET 性能的博客,其中提到了这一点:

您使用声明式安全吗?

如果可能,建议您使用声明式安全而不是命令式安全检查。当前的需求实现提供了更好的性能和对当前正在构建的用于帮助安全审计的安全工具的支持。

请注意,如果您的安全检查在方法中是有条件的,那么命令式安全是您唯一的选择。

链接:http://weblogs.asp.net/sanjeevagarwal/archive/2009/09/09/net-code-performance-tips-part-1.aspx

“声明式安全”代表什么?谁能举个具体的例子?

【问题讨论】:

    标签: security


    【解决方案1】:

    声明性功能允许程序员在设计时表达意图。这些意图是由语言引擎在内部强制执行的——换句话说,我们看不到它是如何完成的。一个例子是属性:

    [RequireDeletePermission]
    public void DeleteFile( string fileName )
    {
    }
    

    声明指出,如果没有DeletePermission,就无法调用DeleteFile 方法。 (这是一个虚构的示例。)运行时将为您强制执行此规则。不再需要代码。 SQL 权限也属于这一类。

    您使用自己的代码强制执行的策略称为命令式。您可以使用任何语言机制来完成此操作,但代码本身(与内置构造相反)表达了您的意图。当没有正式约束捕获所需的确切限制时,您会在 SQL 触发器中看到这种情况。

    CREATE TRIGGER TR_UPD_fix_image_filename ON products AFTER UPDATE
    AS
    BEGIN
        UPDATE product SET image=itemnumber + '.jpg' WHERE id IN (SELECT id FROM inserted)
    END
    

    (好吧,这是一个愚蠢的例子。根据设计,大多数典型情况都可以通过约束来处理。)

    【讨论】:

      【解决方案2】:

      一般来说,它是基于注释而不是编码的安全性。例如,在 .NET 中,您可以将属性应用于导致生成的代码要求调用者具有某些权限的方法。

      这是一个具体的例子:http://www.knowdotnet.com/articles/securityattributes.html

      【讨论】:

        【解决方案3】:

        您可以查看 AOP 示例。

        通常,当实现安全性的代码与其他代码(例如业务逻辑)分离时,声明性意味着代码组织。通常所有安全工件都集中在一个地方,这简化了两个组件的开发:业务逻辑和安全性。

        【讨论】:

          猜你喜欢
          • 2020-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-27
          • 1970-01-01
          • 2010-10-19
          • 2016-01-13
          • 2019-11-24
          相关资源
          最近更新 更多