BCB如何对SQL每个过程的第一个语句是的查询结果直接进行访问

数据加密是SQL Server 2005新增的数据安全特性这对应用程序开发者来说是非常重要的改进。本文从程序开发者角度探讨SQL Server 2005数据加密特性以及如何运用该特性保证系统的数据安全。

SQL Server 2005是微软开始实施其“可信赖计算” 计划以来的第一个主要的产品它提供了丰富的安全特性,为企业数据提供安全保障对开发人员来说,朂关注的是如何在程序设计过程中应用这些特性来保护数据库中的数据安全本文将从应用程序开发者角度探讨基于SQL Server 2005数据加密特性的应用。

数据用数字方式存储在服务器中并非万无一失实践证明有太多的方法可以智取SQL Server 2000认证保护,最简单的是通过使用没有口令的sa账号尽管SQL Server 2005遠比它以前的版本安全,但攻击者还是有可能获得存储的数据因此,数据加密成为更彻底的数据保护战略即使攻击者得以存取数据,還不得不解密因而对数据增加了一层保护。

SQL Server 2000以前的版本没有内置数据加密功能若要在SQL Server 2000中进行数据加密,不得不买第三家产品然后在垺务器外部作COM调用或者是在数据送服务器之前在客户端的应用中执行加密。这意味着加密的密钥或证书不得不由加密者自己负责保护而保护密钥是数据加密中最难的事,所以即使很多应用中数据已被很强的加密过数据保护仍然很弱。

SQL Server 2005通过将数据加密作为数据库的内在特性解决了这个问题它除了提供多层次的密钥和丰富的加密算法外,最大的好处是用户可以选择数据服务器管理密钥SQL Server 2005服务器支持的加密算法如下:

对称式加密方式对加密和解密使用相同的密钥。通常这种加密方式在应用中难以实施,因为用同一种安全方式共享密钥很难但当数据储存在SQL Server中时,这种方式很理想你可以让服务器管理它。SQL Server 2005 提供RC4、RC2、DES 和 AES 系列加密算法

非对称密钥加密使用一组公共/私人密钥系統,加密时使用一种密钥解密时使用另一种密钥。公共密钥可以广泛的共享和透露当需要用加密方式向服务器外部传送数据时,这种加密方式更方便SQL Server 2005 支持 RSA 加密算法以及 512 位、1,024 位和 2,048 位的密钥强度。

数字证书是一种非对称密钥加密但是,一个组织可以使用证书并通过数字簽名将一组公钥和私钥与其拥有者相关联SQL Server 2005 支持“因特网工程工作组”(IETF) X.509 版本 3 (X.509v3) 规范。一个组织可以对 SQL Server 2005 使用外部生成的证书或者可以使用 SQL Server 2005 生荿证书。

SQL Server 2005 采用多级密钥来保护它内部的密钥和数据如下图所示:

图1 SQL Server 2005采用多级密钥保护它内部的密钥和数据

图中引出箭头的密钥或服务用於保护箭头所指的密钥。所以服务主密钥(service master key)保护数据库主密钥(database master keys)而数据库主密钥又保护证书(certificates)和非对称密钥(asymmetric keys)。而最底层的对稱性密钥(symmetric keys)被证书、非对称密钥或其他的对称性密钥保护(箭头又指回它本身)用户只需通过提供密码来保护这一系列的密钥。

图中頂层的服务主密钥安装SQL Server 2005新实例时自动产生和安装,用户不能删除此密钥但数据库管理员能对它进行基本的维护,如备份该密钥到一个加密文件当其危及到安全时更新它,恢复它

数据库主密钥与服务主密钥不同,在加密数据库中数据之前必须由数据库管理员创建数據库主密钥。通常管理员在产生该密钥时提供一个口令,所以它用口令和服务主密钥来加密如果有足够的权限,用户可以在需要时显式地或自动地打开该密钥下面是产生数据库主密钥的T-SQL代码示例:

每个数据库只有一个数据库主密钥。可以用ALTER MASTR KEY每个过程的第一个语句是来刪除加密更改口令或删除数据库主密钥。通常这由数据库管理员来负责做这些

有了数据库主密钥,就可以着手加密数据T-SQL有置于其内嘚加密支持。使用CREATE每个过程的第一个语句是创建各种密码ALTER每个过程的第一个语句是修改他们。例如要创建对称式加密可以通过一对函數EncryptByKey 和 DecryptByKey来完成。

下面通过实例来探讨SQL Server 2005数据加密与解密技术的实现

假设有一张Customer 表,表中有字段 customer ID、 name、 city 和各种信用卡细节其中信用卡细节需要加密而其他数据不需要。假设User1有对称式密钥并用该密钥登录,运行相应的代码加密数据

① 产生密钥:在含有Customers 表的数据库中使用Triple DES作为加密算法,生成对称式密钥本例中,密钥本身由已经存在在数据库中的证书保护如图一所示,对称密码受非对称密码和存在的其他对称式密钥保护

② 打开密钥:对称式密钥使用前必须显式打开,所以接下来打开它重新找回密码,解密它并放它在受保护的服务器内存Φ,准备使用

③ 加密数据:在下面的代码中,使用正常的T-SQL INSERT每个过程的第一个语句是将一行数据插入表中id、name和city 用明文保存,信用卡类型、号码以及有潜在机密的客户注释用加密方式储存用Triple DES加密算法加密数据。

加密完成后关闭它,释放内存以防它被误用。

以上是整个嘚数据加密的操作过程它没有混乱的密码管理,也不用调用特别的算法储存加密数据的字段是varbinary类型数据,其长度足以储存扩展的数据(加密数据比明文需要更多的空间有时候多很多)。

要解密已加密的数据你需要重新打开对称式加密。使用DecryptByKey函数读数据然后关闭对稱式加密。结果及相应的代码如下

这个例子显示了让SQL Server 2005为你管理密钥的一种方法。但实际上用户总是选择自己提供一个口令的方式,用RC4算法产生对称密码代码如下:

SQL Server 2005产生一个基于用户提供的口令的密钥来加密数据。除非明确指定否则口令不保存在SQL Server 2005中,用户必须保护好洎己的口令否则任何一个知道口令的人都可以解密数据。

如果认为对存储在数据库中的数据加密完全是浪费处理器时间和存储空间那就錯了SQL Server 2005中的数据加密是一个非凡的特性,它为客户的数据提供了一个重要的保护层但应用时要注意,只对那些敏感机密的数据进行保护因为加密消耗服务器处理器大量的资源,如果对一个有一千万条记录的表的每个字段都加密的话运行一条没有Where 子句的SELECT 就可能导致服务器性能的崩溃。

}

--先解决第一问题第一个问题其實就一个查询每个过程的第一个语句是就可以了

 
上面的每个过程的第一个语句是的结果格式就是




--结合第二个问题,我有新的想法在实际笁作中,加入你的表字段个数不统一在展示为报表的时候是很麻烦的。下面是我的一个想法不知道是否可以给你参考
 
上面的每个过程嘚第一个语句是的结果格式就是


加入客户要看过去30个月的数据,按你的需求有30个字段看起来就很乱了。
上述每个过程的第一个语句是总嘚是13个字段第一个字段是年,其他是月份那么如果客户要看30个月的与当前是2013-12为准,那么就是2013-11到2011-05 展示的格式就是
订单年 一月份 二月份 三朤份 四月份 五月份 六月份 ... 九月份 十月份 十一月份 十二月份



不知道是否这个想法有帮助到你
}
用的是ADO控件执行一条select每个过程嘚第一个语句是得到的结果又很多个字段,我只要其中两个字段A和B,并且我要逐条读取把结果都存在数组或者链表里面,怎么搞bcb就昰c++builder,我用的是c++!... 用的是ADO控件
执行一条select每个过程的第一个语句是得到的结果又很多个字段,我只要其中两个字段A和B,并且我要逐条读取把结果都存在数组或者链表里面,怎么搞

你对这个回答的评价是?

 

你对这个回答的评价是

}

我要回帖

更多关于 每个过程的第一个语句是 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信