什么是“声明性安全”?一般来说

时间:2009-09-09 18:23:48

标签: security

这个问题的答案:Declarative Security--what's this? 真的没有告诉我多少......根本没有告诉我什么是直言不讳。

我遇到了一篇关于.NET性能的博客,它提到了这个:

您使用声明式安全性吗?

在可能的情况下,建议您使用声明式安全性而不是强制性安全性检查。当前的需求实施为目前正在构建的安全工具提供了更好的性能和支持,以帮助进行安全审计。

请注意,如果您的安全检查在某种方法中是有条件的,则必须采用强制性安全措施。

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

“声明性安全”代表什么?有人可以给出一个具体的例子吗?

3 个答案:

答案 0 :(得分:9)

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

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

声明指出,如果没有DeleteFile,则无法调用DeletePermission方法。 (这是一个简单的示例。)运行时将为您强制执行此规则。不再需要代码。 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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

您可以查看AOP示例。

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