代码演示ADO.NET CAS权限访问

开发 后端
这里就ADO.NET CAS权限的使用做出详细的介绍,CAS权限在ADO.NET中是很重要的,希望大家通过看本文会更了解CAS权限。

随着ADO.NET的发展,我们运用起来也非常紧张,这里就使用ADO.NET CAS权限验证代码。这里我们就详细的分析一下吧。对于部分信任方案,可以通过指定SqlClientPermissionAttribute来要求代码中的特定方法具有CAS特权。如果当前受限制的安全策略不允许该权限,在运行代码之前将引发异常。有关安全策略的更多信息,请参见安全策略管理和安全策略最佳实施策略。

#T#在设计ADO.NET CAS权限时,正确的模式是以限制性最强的情况开始(无任何权限),然后添加代码执行特定任务所需的特定权限。相反的模式是一开始就授予所有权限,然后拒绝特定权限,这样做是不安全的,因为表达同一连接字符串可以有许多方式。例如,如果一开始就授予所有权限,然后尝试拒绝使用连接字符串“server=someserver”,则仍将允许使用“server=someserver.mycompany.com”。通过在开始时始终不授予任何权限,可以降低权限集中存在漏洞的几率。

下面的代码演示SqlClient如何执行安全请求,如果没有相应的ADO.NET CAS权限,将引发SecurityException。控制台窗口中显示SecurityException输出。

  1. PrivateSubTestCAS(ByValconnectString1AsString,ByValconnectString2AsString)  
  2. 'SimulateremovingSqlClientpermissions.  
  3. DimpermissionAsNewSqlClientPermission(PermissionState.Unrestricted)  
  4. permission.Deny()  
  5.  
  6. 'Trytoopenaconnection.  
  7. Try  
  8. UsingconnectionAsNewSqlConnection(connectString1)  
  9. connection.Open()  
  10. Console.WriteLine("Connectionopened,unexpected.")  
  11. EndUsing  
  12.  
  13. CatchexAsSystem.Security.SecurityException  
  14. Console.WriteLine("Failed,asexpected:{0}",_  
  15. ex.FirstPermissionThatFailed)  
  16.  
  17. 'UncommentthefollowinglinetoseeExceptiondetails.  
  18. 'Console.WriteLine("BaseException:{0}",ex.GetBaseException())  
  19. EndTry  
  20.  
  21. SqlClientPermission.RevertAll()  
  22.  
  23. 'Addpermissionforaspecificconnectionstring.  
  24. 'Thiswouldtypicallybeachievedbytheadministrator  
  25. 'deployingaCASpolicy,notinyourcode.  
  26. permission=NewSqlClientPermission(PermissionState.None)  
  27. permission.Add(connectString1,"",KeyRestrictionBehavior.AllowOnly)  
  28.  
  29. permission.PermitOnly()  
  30.  
  31. 'Tryagain,itshouldsucceednow.  
  32. Try  
  33. UsingconnectionAsNewSqlConnection(connectString1)  
  34. connection.Open()  
  35. Console.WriteLine("Connectionopened,asexpected.")  
  36. EndUsing  
  37.  
  38. CatchexAsSystem.Security.SecurityException  
  39. Console.WriteLine("Unexpectedfailure:{0}",ex.Message)  
  40. EndTry  
  41.  
  42. 'Tryadifferentconnectionstring.Thisshouldfail.  
  43. Try  
  44. UsingconnectionAsNewSqlConnection(connectString2)  
  45. connection.Open()  
  46. Console.WriteLine("Connectionopened,unexpected.")  
  47. EndUsing  
  48.  
  49. CatchexAsSystem.Security.SecurityException  
  50. Console.WriteLine("Failed,asexpected:{0}",ex.Message)  
  51. EndTry  
  52. EndSub  

在控制台窗口中应看到以下输出:

  1. Failed,asexpected:<IPermissionclassIPermissionclass="System.Data.SqlClient.  
  2. SqlClientPermission,System.Data,Version=2.0.0.0,  
  3. Culture=neutral,PublicKeyToken=b77a5c561934e089"version="1"  
  4. AllowBlankPassword="False"> 
  5. <addConnectionStringaddConnectionString="DataSource=(local);InitialCatalog=  
  6. Northwind;IntegratedSecurity=SSPI"KeyRestrictions=""  
  7. KeyRestrictionBehavior="AllowOnly"/> 
  8. </IPermission> 
  9.  
  10. Connectionopened,asexpected.  
  11. Failed,asexpected:Requestfailed.  
责任编辑:田树 来源: 博客
相关推荐

2009-11-04 09:02:34

ADO.NET _C

2009-11-12 09:51:59

ADO.NET结构

2009-11-04 11:30:35

ADO.NET Dat

2009-12-21 16:53:06

ADO.NET使用说明

2009-11-13 09:39:48

2009-11-13 09:53:47

ADO.NET权限集

2009-11-11 13:59:15

ADO.NET与ADO

2009-10-29 10:00:53

ADO.NET数据集

2009-11-11 11:19:57

ADO.NET使用

2009-11-04 17:22:30

ADO.NET数据访问

2009-12-28 14:54:48

ADO.NET语句

2009-12-23 17:54:01

ADO.NET 2.0

2009-11-13 14:22:11

ADO.NET Dat

2009-12-31 09:54:04

ADO.NET数据访问

2009-12-22 16:23:26

ADO.NET访问

2009-11-12 15:00:03

ADO.NET实体数据

2009-12-30 15:21:55

ADO.NET访问

2009-11-13 09:24:17

2009-08-20 16:07:39

C#和ADO.NET访

2009-11-11 11:00:38

ADO.NET结果集
点赞
收藏

51CTO技术栈公众号