随笔 - 33  文章 - 0  评论 - 9 
  2010年5月19日

Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。

一、 导出/导入(Export/Import)

利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。

1、 简单导出数据(Export)和导入数据(Import)

Oracle支持三种方式类型的输出:

(1)、表方式(T方式),将指定表的数据导出。

(2)、用户方式(U方式),将指定用户的所有对象及数据导出。

(3)、全库方式(Full方式),瘵数据库中的所有对象导出。

数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。

2、 增量导出/导入

增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。

增量导出包括三种类型:

(1)、“完全”增量导出(Complete)

即备份三个数据库,比如:

exp system/manager inctype=complete file=040731.dmp

(2)、“增量型”增量导出

备份上一次备份后改变的数据,比如:

exp system/manager inctype=incremental file=040731.dmp

(3)、“累积型”增量导出

累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:

exp system/manager inctype=cumulative file=040731.dmp

数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。

比如数据库的被封任务可以做如下安排:

星期一:完全备份(A)

星期二:增量导出(B)

星期三:增量导出(C)

星期四:增量导出(D)

星期五:累计导出(E)

星期六:增量导出(F)

星期日:增量导出(G)

如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:

第一步:用命令CREATE DATABASE重新生成数据库结构;

第二步:创建一个足够大的附加回滚。

第三步:完全增量导入A:

imp system/manager inctype=RESTORE FULL=y FILE=A

第四步:累计增量导入E:

imp system/manager inctype=RESTORE FULL=Y FILE=E

第五步:最近增量导入F:

imp system/manager inctype=RESTORE FULL=Y FILE=F

二、 冷备份

冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份时最快和最安全的方法。冷备份的优点是:

1、 是非常快速的备份方法(只需拷文件)

2、 容易归档(简单拷贝即可)

3、 容易恢复到某个时间点上(只需将文件再拷贝回去)

4、 能与归档方法相结合,做数据库“最佳状态”的恢复。

5、 低度维护,高度安全。

但冷备份也有如下不足:

1、 单独使用时,只能提供到“某一时间点上”的恢复。

2、 再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。

3、 若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。

4、 不能按表或按用户恢复。

如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括:

1、 所有数据文件

2、 所有控制文件

3、 所有联机REDO LOG文件

4、 Init.ora文件(可选)

值得注意的使冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。

下面是作冷备份的完整例子。

(1) 关闭数据库

sqlplus /nolog

sql>connect /as sysdba

sql>shutdown normal;

(2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件

sql>cp

(3) 重启Oracle数据库

sql>startup

三、 热备份

热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成:

1. 数据文件一个表空间一个表空间的备份。

(1) 设置表空间为备份状态

(2) 备份表空间的数据文件

(3) 回复表空间为正常状态

2. 备份归档log文件

(1) 临时停止归档进程

(2) log下那些在archive rede log目标目录中的文件

(3) 重新启动archive进程

(4) 备份归档的redo log文件

3. 用alter database bachup controlfile命令来备份控制文件

热备份的优点是:

1. 可在表空间或数据库文件级备份,备份的时间短。

2. 备份时数据库仍可使用。

3. 可达到秒级恢复(恢复到某一时间点上)。

4. 可对几乎所有数据库实体做恢复

5. 恢复是快速的,在大多数情况下爱数据库仍工作时恢复。

热备份的不足是:

1. 不能出错,否则后果严重

2. 若热备份不成功,所得结果不可用于时间点的恢复

3. 因难于维护,所以要特别仔细小心,不允许“以失败告终”。

详细出处参考:http://antonioluckyjeery.spaces.live.com/blog/cns!8A49A89D19056DB2!336.entry

http://technet.microsoft.com/zh-cn/library/ms186289.aspx

 

更多资料请参考:

oracle 数据库备份方案
http://dava.itpub.net/post/2653/279019
sql server数据库备份方案
http://www.winu.cn/space-14160-do-blog-id-4732.html
SQL Server数据库两种备份方式讲解
http://www.xjcncn.com/school/data/mssql/200706/1360.html
一套实现Oracle异地数据自动备份方案
http://9host.cn/oracle/200742218400413089.html
企业级数据库备份方案完全攻略
http://storage.it168.com/s/2007-07-30/200707301050937_3.shtml
oracle数据库备份方法大比拼
http://www.eubase.cn/news/comments/2010/0224/201.html
MySQL平台数据库备份方案详细说明
http://netsecurity.51cto.com/art/200602/20285.htm
sql server 数据库备份方案
http://www.cnblogs.com/sanle/archive/2008/01/20/1046460.html

 

posted @ 2010-05-19 11:08 赛纳行星 阅读(4094) 评论(0) 编辑
  2009年11月20日

在我们实际运用中,加密是保证数据安全的重要手段。以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密。因此需要解密数据的场合,这两种方法就不太适合了。当然你也可以自己编写适用的加密和解密程序,不过这对编写者的数学水平有很高的要求,一般人是很难做到的。
现在,随着ASP.Net的推出,彻底改变了以前ASP下的编程模式。我们能够利用.Net Framework中的类提供的加密服务来保证数据安全。目前应用较为广泛的加密方法是使用RSA算法进行加密。在.Net Framework中与RSA加密算法相关的类主要有两个:RSA 类和RSACryptoServiceProvider 类。按照MSDN的说法RSA 类是“表示 RSA 算法的所有实现均从中继承的基类”,而RSACryptoServiceProvider 类是“使用加密服务提供程序 (CSP) 提供的 RSA 算法的实现执行不对称加密和解密”。另外,“表示 RSA 算法的标准参数”的RSAParameters 结构也是很重要的,它保存了RSA算法的参数。
由于介绍RSA算法原理的文章或书籍比较多,大家可以参阅一下,在此就不复述了。下面着重介绍一下如何在ASP.Net中实现RSA加密。
RSA参数的产生:RSA参数的类型就是上面提到的RSAParameters 结构,查阅MSDN可知其包含了D、DP、DQ、Exponent、InverseQ、Modulus、P、Q八个字段。加密时仅需要Exponent和Modulus两个值,可看成公钥。解密时所有字段都需要,可看成私钥。下面这段程序显示了如何产生RSA两个参数:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAParameters rsaParamsExcludePrivate=rsa.ExportParameters(false);
RSAParameters rsaParamsIncludePrivate=rsa.ExportParameters(true);
RSACryptoServiceProvider类的ExportParameters(bool)方法用于导出RSA参数,true表示导出上述八个字段的“私钥”,false表示导出“公钥”。
使用RSA参数进行加密解密:这一步需要把上面两个参数导入到RSACryptoServiceProvider类对象中,再用它对数据进行加密。如下面的代码所示,我们可以写一个函数来完成加密过程:
Public byte [ ] RSAEncrypt ( byte [ ] b)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaParamsExcludePrivate); //导入公钥
byte [] EncryptedData=rsa.Encrypt(DataToEncrypt,false);
return EncryptedData;
}
解密时只要把rsa.ImportParameters(rsaParamsExcludePrivate)换成rsa.ImportParameters(rsaParamsExcludePrivate),再把Encrypt换成Decrypt就行了。
保存和加载RSA参数:RSA参数可以保存为XML格式,下面代码说明了如何保存和加载(只列出了关键部分)
保存:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
StreamWriter writer=new StreamWriter(@"d:\PublicAndPrivateKey.xml");
string PPKeyXml=rsa.ToXmlString(true); //保存私钥
writer.Write(PPKeyXml);
writer.Close();
writer=new StreamWriter(@"d:\PublicKey.xml");
string PKeyXml=rsa.ToXmlString(false); //保存公钥
writer.Write(PKeyXml);
writer.Close();
读取:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
StreamReader reader=new StreamReader(@"d:\PublicKey.xml");
string PKey=reader.ReadToEnd();
rsa.FromXmlString(PKey);
reader.Close();
StreamReader reader=new StreamReader(@"d:\PublicAndPrivateKey.xml");
string PPKey=reader.ReadToEnd();
reader.Close();
ToXmlString和ExportParameters方法类似,false表示保存“公钥”,true表示保存“私钥”。
以上就是在ASP.Net中实现RSA加密的主要方法。


转自:http://hi.baidu.com/tang818/blog/item/a12e1f3d8df6c3ec3c6d975d.html

实例 :http://www.fly010.net/new265.html

 .NET下对二进制文件进行加密解密(C#)

http://blog.csdn.net/veryhappy/archive/2006/01/09/574152.aspx

如何使用 Visual C# 加密和解密文件

http://support.microsoft.com/kb/307010/zh-cn

http://topic.csdn.net/t/20060225/15/4576960.html

winform xml 加密

一个.net 加密类

posted @ 2009-11-20 14:08 赛纳行星 阅读(175) 评论(0) 编辑
  2009年11月18日

1.概念
         索引是在数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度(简单理解)。
         索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单(深刻理解)。

         按照存储方式分为:聚集与非聚集索引(需要重视和区别的概念,后面详解)
         按照维护与管理索引角度分为:唯一索引、复合索引和系统自动创建的索引(相对简单,如下解释:)
         1).唯一索引:惟一索引可以确保索引列不包含重复的值.
         可以用多个列,但是索引可以确保索引列中每个值组合都是唯一的,
         即下面的姓不能有重复,同时名也不能有重复:
                                             姓      名
                                             李      二
                                             张      三
                                             王      五
          语法: create unique index idxempid on emp(姓,名)

          2).复合索引:如果在两上以上的列上创建一个索引,则称为复合索引。
          那么,不可能有两行的姓和名是重复的,即上面的表没有两行其姓和名的组合是一样的。
          语法: create index indxfullname on emp(姓,名)

          3).系统自建的索引:在使用T_sql语句创建表的时候使用PRIMARY KEY或UNIQUE约束时,会在表上
          自动创建一个惟一索引,自动创建的索引是无法删除的。
           语法:
                   create table ABC
                   ( empID int PRIMARY KEY,
                      firstname varchar(50) UNIQUE,
                      lastname  varchar(50) UNIQUE,
                     )    /*这样的结果就出来了三个索引,但只有一个聚集索引empID*/

         索引的结构是由:根节点--->非叶节点--->非叶节点--->叶节点(注意索引在数据库引擎中所用的
         内部数据结构一般是B+树,参考后文)

          聚集索引和非聚集索引——  
         用一个现实中的例子说明以助理解。我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“

an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那

么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,

您不需要再去查其他目录来找到您需要找的内容。
  我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

  如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根

据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法

,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390

页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引

中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。
        我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

         2.性质及使用方法
         1)聚集索引:表中存储的数据按照索引的顺序存储,检索效率比普通索引高,索引占用硬盘
          存储空间小(1%左右),但对数据新增/修改/删除的速度影响比较大(降低)。
          特点:
                  (1) 无索引,数据无序
                  (2) 有索引,数据与索引同序
                  (3) 数据会根据索引键的顺序重新排列数据
                  (4) 一个表只能有一个索引
                  (5) 叶节点的指针指向的数据也在同一位置存储
         语法:create CLUSTERED INDEX idxempID ON emp(empID)

         2)非聚集索引:不影响表中的数据存储顺序,检索效率比聚集索引低,索引占用硬盘存储
         空间大(30%~40%),对数据新增/修改/删除的影响很少。
         特点:
               (1) 一个表可以最多可以创建249个非聚集索引
               (2) 先建聚集索引才能创建非聚集索引
               (3) 非聚集索引数据与索引不同序
               (4) 数据与非聚集索引在不同位置
               (5) 非聚集索引在叶节点上存储,在叶节点上有一个“指针”直接指向要查询的数据区域
               (6) 数据不会根据非聚集索引键的顺序重新排列数据
         语法:create NONCLUSTERED INDEX idximpID ON emp(empID)
        
         创建索引的方法:
         1)企业管理器中
               (1)右击某个表,所有任务---管理索引,打开管理索引,单击“新建”就可以创建索引
               (2)在设计表中进行设计表,管理索引/键
               (3)在关系图中,添加表后右击关系图中的某个表,就有“索引/键”
               (4)通过向导,数据库---创建索引向导
               (5)通过T-SQL语句
         2)能过“索引优化向导”来优化索引的向导,通过它可以决定选择哪些列做为索引列    
              
 动作描述/是否应该     使用聚集索引           使用非聚集索引
 
 列经常被分组排序   应   应

 返回某范围内的数据   应         不应

 一个或极少不同值         不应         不应

 小数目的不同值    应         不应
 
 大数目的不同值          不应   应
 
 频繁更新的列          不应   应
 
 外键列     应   应
 
 主键列     应   应
 
 频繁修改索引列          不应         不应
 
 

         3.数据库引擎中索引的内部结构
         有必要先说明一下数据库引擎,
         这部分是较深的内容,需要有一定的数据库理论知识和数据结构与算法知识,数据结构和算法告诉我们,对索引关键字进行快速查找时要使用树形数据结构,在数据库引

擎中,索引通常用B+树来表示,google发现这方面的文章较少,后面找到相关详细资料会补充。

         4.主键、索引、聚集索引和非聚集索引
         1)主键   (PK)  
                唯一标识表中的所有行的一个列或一组列。主键不允许空值。不能存在具有相同的主键值的两个
         行,因此主键值总是唯一标识单个行。表中可以有不止一个键唯一标识行,每个键都称作候选键。只有
         一个候选键可以选作表的主键,所有其它候选键称作备用键。尽管表不要求具有主键,但定义主键是很
         好的做法。   在规范化的表中,每行中的所有数据值都完全依赖于主键。例如,在以   EmployeeID   作为
         主键的规范化的   employee   表中,所有列都应包含与某个特定职员相关的数据。该表不具有  
         DepartmentName 列,因为部门的名称依赖于部门   ID,而不是职员   ID。  

         2)索引  
               关系数据库中基于键值提供对表的行中数据的快速访问的数据库对象。索引还可以在表的行上强制唯
         一性。SQL   Server   支持聚集索引和非聚集索引。对表的主键自动进行索引。在全文搜索中,全文索引
         存储关于重要词和这些词在给定列中的位置的信息。  
               如果某列有多行包含   NULL   值,则不能在该列上创建唯一索引。同样,如果列的组合中有多行包
         含   NULL   值,则不能在多个列上创建唯一索引。在创建索引时,这些被视为重复的值。  

        3)聚集索引  
               在创建聚集索引时,将会对表进行复制,对表中的数据进行排序,然后删除原始的表。因此,数据库
         上必须有足够的空闲空间,以容纳数据复本。默认情况下,表中的数据在创建索引时排序。但是,如果
         因聚集索引已经存在,且正在使用同一名称和列重新创建,而数据已经排序,则会重建索引,而不是从
         头创建该索引,以自动跳过排序操作。重建操作会检查行是否在生成索引时进行了排序。如果有任何行
         排序不正确,即会取消操作,不创建索引。  

         4)非聚集索引  
               非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向
         数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚
         集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。

         打开设计表界面里面有个钥匙就是主键的意思,当你声明一列为主键的时候数据库实际上就是生成一个
唯一的索引,查询优化器实际上是根据列上有没有唯一索引来保证列的唯一性而不是根据列是否被声明为主键。  
         聚集索引一个表只有一个,实际上它的叶子节点就是数据页,比非聚集索引速度快,占用的空间小,大概只有表的1%左右。如果在声明的时候没有选择UNIQUE选项,则

在插入数据的时候会自动生成一个唯一标示符。  
         非聚集索引一个表可以有多个,一个3层的非聚簇索引要查询6次才可以找到真实数据,因为其叶子节点并不是真实数据,而是标识(如果表上有聚集索引则为聚集索引,

如没有,则为实际数据的页号),非聚集索引通常占用空间比较大,表的30-40%。  

转载:http://blog.csdn.net/cqf7174/archive/2009/05/08/4159398.aspx

SQL 索引结构与使用:http://www.cnblogs.com/tintown/archive/2005/04/25/145137.html

SQL查询优化--索引:http://www.cnitblog.com/liangchao/archive/2006/07/26/14242.html

http://blog.csdn.net/htl258/archive/2009/03/07/3967321.aspx 

SQL 全文索引详解

http://blog.csdn.net/wufeng4552/archive/2009/10/14/4667405.aspx

posted @ 2009-11-18 10:57 赛纳行星 阅读(149) 评论(0) 编辑
  2009年7月28日

打开.Net Framework附带的SDK命令提示符。

加密命令:
aspnet_regiis -pe "connectionStrings" -app "/encrypttest"
-pe开关用来指定web.config中需要加密的节(Web.Config文件中的connectionStrings配置节)。
-app开关用来指定IIS里面的虚拟目录,如果为根目录网站,为"/".

解密命令:
aspnet_regiis -pd "connectionStrings" -app "/encrypttest"
唯一的区别就是,我们用-pd开关代替了-pe开关。

 

 

1、加密EncryptWebConfig.bat

@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef  "connectionStrings"  "D:\Program Files\Microsoft.NET\ Pet Shop 4.0Web"
PAUSE

2、解密DecryptWebConfig.bat

@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "D:\Program Files\Microsoft.NET\ Pet Shop 4.0Web"
PAUSE

 

解决方法是:
 进dos运行:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
  如果运行出错,需要把目录 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 放入环境变量path中。
  此时就可以成功访问网站了。
  同样可以通过命令行来实现“RSAProtectedConfigurationProvider”加密


现在把找到文件附在下面:

我们如果想对web.config的数据库连接字符串进行加密的话,那么这里提供了两个方法。

方法一、

    使用“DataProtectionConfigurationProvider”形式加密,创建test.aspx文件,代码如下:

 需要添加引用

 using System.Web.Configuration;

 using System.IO;

 //加密

 protected void Button1_Click(object sender, EventArgs e)

    {

        Configuration config =  WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

        ConfigurationSection section = config.GetSection("connectionStrings");

       

        if (section != null && !section.SectionInformation.IsProtected)

        {

            section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");

            config.Save();

        }

    }

 //解密

    protected void Button2_Click(object sender, EventArgs e)

    {

        Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

        ConfigurationSection section = config.GetSection("connectionStrings");

        if (section != null && section.SectionInformation.IsProtected)

        {

            section.SectionInformation.UnprotectSection();

            config.Save();

        }

    }

总结:此方法很方便,并且很简单,但安全性没有密钥加密高。

方法二、

 使用“RSAProtectedConfigurationProvider”形式来加密

 test.aspx程序文件基本如上,

 把

 section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");

 改成

 section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");

 但这个时候你访问网站的时候很有可能会出现

 说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。

 分析器错误信息: 未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。

 

 这样的错误,解决方法是:

 进dos运行:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

  如果运行出错,需要把目录 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 放入环境变量path中。

  此时就可以成功访问网站了。

  同样可以通过命令行来实现“RSAProtectedConfigurationProvider”加密


  注意:你也可以不运行 aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"命令来注册默认的 RsaProtectedConfigurationProvider 的RSA 密钥容器

        方法如下:

        1)创建一个可导出的rsa密钥容器,命名为Key

aspnet_regiis -pc "Key" -exp

2)在你要加密的信息前面指定密钥容器,如:

<configProtectedData>

        <providers>

            <clear />

            <add name="KeyProvider"

        type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"

        keyContainerName="Key"

        useMachineContainer="true"/>

        </providers>

</configProtectedData>

<connectionStrings>

        <add name="SQLConnString" connectionString="Data Source=yourIP;Initial Catalog=test;User Id=yourID;Password=yourPassword;"

         providerName="System.Data.SqlClient" />

</connectionStrings>

并且确保在configuration节的xmlns属性有如下值:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

3)对配置文件进行加密

aspnet_regiis -pef "connectionStrings" "E:\project\Test" -prov "KeyProvider"

参数分别为:需要加密的配置节、项目所在目录的物理路径、加密所使用的密钥容器名称

再看web.config文件,就会发现connectionStrings节已经被加密了,但是运行程序会发现程序仍然可以正确访问数据库。

此时,只需运行:

aspnet_regiis -pdf "connectionStrings" "E:\project\Test"

就可以对web.config文件进行解密。

(注意,如果还是有错误,那可能是您没有给生成的密匙文件足够的权限,去到 C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys 目录下,

  找到刚生成的密匙文件,把network service用户的读取权限赋予给它,就可以了,直接用命令的话也可以:命令如下 aspnet_regiis -pa "Key" "NT AUTHORITY\NETWORK SERVICE" ,可能需要重新启动iis)

4)把密钥容器导出为xml文件

aspnet_regiis -px "Key" "e:\Key.xml"

这个命令只导出公钥,因此以后只能用于加密,而无法解密。

aspnet_regiis -px "Key" "e:\Keys.xml" -pri

这个则连私钥一起导出了,所以我们要用这个。

5)把密钥容器删除

aspnet_regiis -pz "Key"

删除后再运行程序,会提示出错:

分析器错误信息: 未能使用提供程序“KeyProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。

同理可以证明,在任何一台未安装正确的密钥容器Key的机器上,程序都无法对connectionStrings节进行解密,因此也就无法正常运行。

6)导入key.xml文件

aspnet_regiis -pi "Key" "e:\Keys.xml"

此时,再运行程序会发现又可以解密了。证明加密与解密机制运行正常。

最后说一下这个机制所提供的安全性保障可以运用在什么方面:

对winform程序的app.config进行加密实际意义并不大,因为无论如何,客户机都可以通过运行aspnet_regiis -pdf 来对配置文件进行解密,从而暴露敏感信息。

对于web.config进行加密的意义也仅限于,当web.config文件不小心泄露时,不会同时泄露敏感信息,如果恶意攻击者已经取得了在服务器上运行程序的权限,那么同app.config一样,可以很容易通过通过运行aspnet_regiis -pdf 获取明文了。

还有,通过aspnet_regiis -pa "Key" "NT AUTHORITY\NETWORK SERVICE"控制对不同用户对密钥容器的访问权限,应该还可以进一步获取一些安全性,比如可以控制某些用户即使登录到服务器上,也无法用aspnet_regiis -pdf对配置文件进行解密。

 

posted @ 2009-07-28 15:49 赛纳行星 阅读(394) 评论(0) 编辑
  2009年5月21日

想看更多的C#操作Excel开发报表的文章,点击这里

C#调用Excel来生成统计图(Chart)的以及Chart图中各部分控制的一些方法

添加引用:在“com选项卡”中选择“misrosoft office 12.0 object library”

先添加Excel的引用
using Microsoft.Office.Interop.Excel;
//定义所要使用的Excel对象
    Application ThisApplication = null;
    Workbooks m_objBooks = null;
    _Workbook ThisWorkbook = null;
    Worksheet xlSheet = null;

    /// <summary>
    /// 删除多余的Sheet
    /// </summary>
    private void DeleteSheet()
    {
        foreach (Worksheet ws in ThisWorkbook.Worksheets)
            if (ws != ThisApplication.ActiveSheet)
            {
                ws.Delete();
            }
        foreach (Chart cht in ThisWorkbook.Charts)
            cht.Delete();
    }

    /// <summary>
    /// 创建一个Sheet,用来存数据
    /// </summary>
    private void AddDatasheet()
    {
        xlSheet = (Worksheet)ThisWorkbook.
            Worksheets.Add(Type.Missing, ThisWorkbook.ActiveSheet,
            Type.Missing, Type.Missing);

        xlSheet.Name = "数据";
    }

    /// <summary>
    /// 用生成的随机数作数据,实际情况数据可以从数据库中取出
    /// </summary>
    private void LoadData()
    {
        Random ran = new Random();
        for (int i = 1; i <= 12; i++)
        {
            xlSheet.Cells[i, 1] = i.ToString() + "月";
            xlSheet.Cells[i, 2] = ran.Next(2000).ToString();
        }
    }

    /// <summary>
    /// 创建统计图        
    /// </summary>
    private void CreateChart()
    {
        // TODO: 生成一个统计图对象:
        Chart xlChart = (Chart)ThisWorkbook.Charts.
            Add(Type.Missing, xlSheet, Type.Missing, Type.Missing);

        // TODO: 设定数据来源
        Range cellRange = (Range)xlSheet.Cells[1, 1];

        // TODO: 通过向导生成Chart
        xlChart.ChartWizard(cellRange.CurrentRegion,
            XlChartType.xl3DColumn, Type.Missing,
            XlRowCol.xlColumns, 1, 0, true,
            "访问量比较", "月份", "访问量",
            "");

        // TODO: 设置统计图Sheet的名称
        xlChart.Name = "统计";

        // TODO: 让12个Bar都显示不同的颜色
        ChartGroup grp = (ChartGroup)xlChart.ChartGroups(1);
        grp.GapWidth = 20;
        grp.VaryByCategories = true;

        // TODO: 让Chart的条目的显示形状变成圆柱形,并给它们显示加上数据标签
        Series s = (Series)grp.SeriesCollection(1);
        s.BarShape = XlBarShape.xlCylinder;
        s.HasDataLabels = true;

        // TODO: 设置统计图的标题和图例的显示
        xlChart.Legend.Position = XlLegendPosition.xlLegendPositionTop;
        xlChart.ChartTitle.Font.Size = 24;
        xlChart.ChartTitle.Shadow = true;
        xlChart.ChartTitle.Border.LineStyle = XlLineStyle.xlContinuous;

        // TODO: 设置两个轴的属性,Excel.XlAxisType.xlValue对应的是Y轴,Excel.XlAxisType.xlCategory对应的是X轴
        Axis valueAxis = (Axis)xlChart.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary);
        valueAxis.AxisTitle.Orientation = -90;

        Axis categoryAxis = (Axis)xlChart.Axes(XlAxisType.xlCategory, XlAxisGroup.xlPrimary);
        categoryAxis.AxisTitle.Font.Name = "MS UI Gothic";
    }

最后,生成Excel
    protected void btnExcel_Click(object sender, EventArgs e)
    {
        string sPath = Server.MapPath("~/Files/TestExcel1.xlsx");
        try
        {
            ThisApplication = new Application();
            m_objBooks = (Workbooks)ThisApplication.Workbooks;
            ThisWorkbook = (_Workbook)(m_objBooks.Add(Type.Missing));

            ThisApplication.DisplayAlerts = false;

            DeleteSheet();
            AddDatasheet();
            LoadData();
            CreateChart();

            ThisWorkbook.SaveAs(sPath, Type.Missing, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing);

        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        {
            ThisWorkbook.Close(Type.Missing, Type.Missing, Type.Missing);
            ThisApplication.Workbooks.Close();

            ThisApplication.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(ThisWorkbook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(ThisApplication);
            ThisWorkbook = null;
            ThisApplication = null;
            GC.Collect();
        }
    }

 

引用自:http://www.cnblogs.com/dahuzizyd/archive/2006/12/20/Excel_Chart_3.html

另:http://www.cnblogs.com/ziyiFly/archive/2008/09/24/1297841.html

http://www.51aspx.com/S/chart.html

OpenFlashChart的用法:

http://www.cnblogs.com/yaunion/archive/2009/03/12/1409321.html

posted @ 2009-05-21 14:54 赛纳行星 阅读(204) 评论(1) 编辑
  2009年4月23日
摘要: 1、Ludico Ludico是C#编写的居于ASP.NET 2.0的Portal/CMS系统。它的模块化设计是你可以按照你希望的使用或开发网站功能。它里面有高级的用户管理,一个所见即所的(WYSIWYG)的编辑器等。 下载地址:http://sourceforge.net/projects/ludico/ 2、umbraco  Umbraco是一款在.net平台下C#开发的开源内容管理系统,该系...阅读全文
posted @ 2009-04-23 10:37 赛纳行星 阅读(659) 评论(0) 编辑
  2009年1月6日
摘要: [转]: http://www.blogjava.net/liuzheng/articles/153030.html1,document.getElementById 方法只能获取到一个对象,即使有多个同名的对象,也只取第一个具有该名称的对象,例如在一个form(名称为myform)中,有三个 id="mycheckbox"的复选框,那么使用document.getElementById("myc...阅读全文
posted @ 2009-01-06 16:05 赛纳行星 阅读(128) 评论(0) 编辑
  2008年12月18日
摘要: [转]:http://blog.joycode.com/ghj/archive/2005/01/12/42861.aspx一些系统可能需求把数据导出到Access或者Excel文件格式,以方便的传递数据、打印等。Excel 文件或者 Access这两种需要导出的文件可能并不是事先就存在的,这就需要我们自己编程生成他们,下面整理一下生成这两个文件的一些方法,只罗列最常用的。并不全。一、首先生成Exc...阅读全文
posted @ 2008-12-18 22:35 赛纳行星 阅读(140) 评论(0) 编辑
  2008年12月2日
摘要: [转自]:http://www.cgdancer.com/dotnet03.htm摘要:   由于越来越多的跨国公司需要跨语言的WEB应用,所以本地化工作变得尤其重要,在ASP.NET 1.1 中我们使用ResourceManager 类来实现这个工作,而2.0中提供了更加方便的方法和工具来实现。  导言:  现在很多跨国的商务需求都需要实现多语言,对客户来说他们始终想看到网站是用他们所熟悉的语言...阅读全文
posted @ 2008-12-02 21:31 赛纳行星 阅读(407) 评论(0) 编辑
  2008年11月19日
摘要: [转]:http://hi.baidu.com/deanzxf/blog/item/ac2c768d97404d11b31bba0e.html最近频繁的接触到泛型方面的问题,所以也不得不来学习一下了,开始主要是在MSDN的WebCast上去下载教学录象看的(李建忠老师的),本篇文章先介绍一下泛型入门方面的知识,希望能让刚开始学习泛型的朋友能够更快的入门,言归正传,首先我们来看一下泛型的基本概念: ...阅读全文
posted @ 2008-11-19 21:56 赛纳行星 阅读(112) 评论(0) 编辑