一般来说,它的安全性基于注释而不是编码。例如,在.NET中,您可以将属性应用于导致生成的代码要求调用者具有某些权限的方法。
这是一个具体的例子: http://www.knowdotnet.com/articles/securityattributes.html
你可以看看AOP的例子。
通常,声明性意味着当实现安全性的代码与其他代码(例如来自业务逻辑)分离时代码组织。通常,所有安全工件都集中在一个地方,这简化了两个组件的开发:业务逻辑和安全性。
的 陈述 强> 功能允许程序员在设计时表达意图。这些意图在语言的引擎内部强制执行,换句话说,我们看不到它是如何完成的。一个例子是属性:
[RequireDeletePermission] public void DeleteFile( string fileName ) { }
这个 宣言 声明说 DeleteFile 没有这个方法就无法调用 DeletePermission 。 (这是一个简单的示例。)运行时将为您强制执行此规则。不再需要代码。 SQL权限也适合此类别。
DeleteFile
DeletePermission
将调用您使用自己的代码强制执行的策略 的 势在必行 强> 。您可以使用任何语言机制来完成此任务,但代码本身(与内置构造相对)表达了您的意图。当没有正式约束捕获所需的确切限制时,您将在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
(好吧,所以这是一个愚蠢的例子。通过设计,大多数典型案例都可以通过约束来处理。)