数据层组件设计与数据传递14

时间:2010-02-01 10:02:34  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:组件可以依赖于由调用程序设置的安全性环境。然而,有些情况下数据访问逻辑组件必须执行自己的授权检查,以确定是否允许当事人执行所请求的操作。授权在身份验证后进行,并使用当事人身份标识与角色等有关信息来确定该当事人可以访问的资源。        在以下情况下,应在数据访问逻辑组件层次上执行授权检查:      需...
  正文:数据访问逻辑组件中的安全性建议
    数据访问逻辑组件的设计目的是供其他应用程序组件使用,它也是您的应用程序代码中在调用程序可以访问数据之前实现安全性的最后一个地方。
  
    通常,数据访问逻辑组件可以依赖于由调用程序设置的安全性环境。然而,有些情况下数据访问逻辑组件必须执行自己的授权检查,以确定是否允许当事人执行所请求的操作。授权在身份验证后进行,并使用当事人身份标识与角色等有关信息来确定该当事人可以访问的资源。
  
    在以下情况下,应在数据访问逻辑组件层次上执行授权检查:
  
  需要与不完全信任的业务过程开发人员共享数据访问逻辑组件
  需要保护对数据存储提供的强大功能的访问
    在定义了 Identity 对象和 Principal 对象后,可以用三种方式执行基于角色的安全性检查:
  
  使用 PrincipalPermission 对象执行强制性安全性检查。
  使用 PrincipalPermissionAttribute 属性执行说明性安全性检查。
  使用 Principal 对象中的属性和 IsInRole 方法执行显式安全性检查。
    以下代码示例显示了如何使用 PrincipalPermissionAttribute 为数据访问逻辑组件类中的方法指定基于角色的声明性安全性检查:
  
  using System;
  using System.Security.Permissions;
  public class CustomerDALC
  {
  
  public CustomerDALC()
  {
  }
  
  // 使用 PrincipalPermissionAttribute 要求此方法的调用程序
  // 具有一个名为“MyUser”的身份标识,并且属于角色“Administrator”。
  [PrincipalPermissionAttribute(SecurityAction.Demand,
  Name="MyUser", Role="Administrator")]
  public void DeleteCustomer(string customerID)
  {
  // 在此处删除客户代码
  }
  }
  
  
    以下代码显示了如何创建具有所需身份标识和角色的 Principal 对象,以便对 CustomerDALC 对象调用 DeleteCustomer 方法:
  
  using System;
  using System.Security.Principal;
  using System.Threading;
  
  public class MainClass
  {
  public static int Main(string[] args)
  {
  Console.Write("用户名:");
  string UserName = Console.ReadLine();
  
  Console.Write("密码:");
  string Password = Console.ReadLine();
  
  if (Password == "password" && UserName == "MyUser")
  {
  // 创建一个名为“MyUser”的通用身份标识
  GenericIdentity MyIdentity = new GenericIdentity("MyUser");
  
  // 创建角色
  String[] MyString = {"Administrator", "User"};
  
  // 创建一个通用当事人
  GenericPrincipal MyPrincipal = new GenericPrincipal(MyIdentity,
  MyString);
  
  // 设置此线程的当前当事人,以用于基于角色的安全性
  Thread.CurrentPrincipal = MyPrincipal;
  }
  
  // 创建一个 CustomerDALC 对象,并尝试调用它的 DeleteCustomer 方法。
  // 仅在当前当事人的身份标识和角色合格时这一步骤才能成功。
  CustomerDALC c = new CustomerDALC();
  c.DeleteCustomer("VINET");
  }
  }
  
    Windows 身份验证   
    理想情况下,在连接数据库时应使用 Windows 身份验证而不是 SQL Server 身份验证。然而,应使用服务帐户并避免模拟连接到数据库,因为它会妨碍连接池。连接池需要相同的连接字符串;如果尝试使用不同的连接字符串打开数据库,就会创建单独的连接池,而这将限制可缩放性。 《数据层组件设计与数据传递14》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12706.html


关键字:

关于《数据层组件设计与数据传递14》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td