Archive for 02月, 2008

(转)三层/多层体系结构在VB编程中的应用讨论

本人于一年前收集了一个CSDN中的贴子,主题是“ VB三层(多层)实现大讨论! (发表时间:2001-12-28 11:46:06Z)”
本人没有完全研究明白里面的讨论,先删掉一些口水,整理出来发到下面。
欢迎大家踊跃发言。
================
gmp
1.三层体系结构将应用逻辑从Server或Client端剥离出来,放进中间的应用服务器;
2.这样就可以使的三者各司其职,减轻数据库服务器或客户端原来所承担的应用逻辑计算压力,可以大大加快分布式计算的效率:
(2.1)数据库服务器及其DBMS专司数据的存放和管理,相当于WinDNA中的数据层(Storage);
(2.2)应用服务器接受用户端的请求,从数据库服务器抓取数据送给客户端,相当于WinDNA中的逻辑层;(COM+) [...]

(转)建立三层结构的asp应用程序

本文介绍了三层结构应用程序的概念和优点,并结合一个实例介绍了如何建立三层结构的asp应用程序。

一、两层结构的asp应用有何缺点
  在browser/server 应用程序开发领域,微软公司的iis/asp以其强大的功能,良好的扩展能力,及与其它微软产品的一致性,迅速地流行起来。它能使一个具有vb/vc经验的程序员,很快地成为一个web程序员,开发出看上去非常专业的应用。但是,asp有一个天生的缺点,就是asp代码和html代码是混在一起的,asp程序员既需要考虑与数据库打交道,需要关心如何与html配合,有时还需要用asp直接生成html代码。其结果是,当程序逻辑足够复杂时,.asp源文件非常长;而且,无论客户提出用户界面的改变,还是商业逻辑的改变(比如,在考试系统中,"合格"的标准可能从达到60分就算合格,改为进入前100名才算合格),都需要对.asp文件进行改动,而商业逻辑的改变,很可能需要改动很多文件。

二、三层结构的概念
  在传统的client / server应用中,也存在着上述同样的问题,多层结构的应用正是在对c/s 结构的总结基础上产生的,并且也已经扩展到了b/s应用开发领域。 即将应用划分为三层(可以有更多层,但三层最常见): 用户界面层,商业逻辑层,数据库层。 用户界面层负责处理用户的输入和向用户的输出,但并不负责解释其含义(出于效率的考虑,它可能在向上传输用户输入前进行合法性验证),这一层通常用前端工具(vb,vc,asp等)开发;商业逻辑层是上下两层的纽带,它建立实际的数据库连接,根据用户的请求生成sql语句检索或更新数据库,并把结果返回给客户端,这一层通常以动态链接库的形式存在并注册到服务器的注册簿(registry)中,它与客户端通讯的接口符合某一特定的组件标准(如com,corba),可以用任何支持这种标准的工具开发;数据库层负责实际的数据存储和检索。 有了这样的结构,上面的问题迎刃而解:还是以考试系统中的合格标准为例,在客户端所有需要显示合格人员名单的地方,调用这样一个函数getqualifiedlist,至于这个函数如何编写,如何与数据库打交道,以至访问的是何种数据库都与其无关(你一定有过这样的经历,在一种数据库系统上运行得很好的sql语句,有时换到另一种数据库系统上必须加以修改); 在中间层dll中实现这个getqualifiedlist函数,如果用户对"合格"的定义变了,只需要修改这个函数就可以了,只要此函数的入口参数和返回内容不变,在客户端不需作任何改动。在这里,我们看到了面向对象编程的特性之一封装性的优点,而这一点在开发大型应用时尤其有用–我们可以把开发人员分成两组,一组负责开发界面层,另一组负责开发商业逻辑层,双方只要按照事先商定的函数接口,并行地开发就可以,而不必向从前那样,后面的工作必须等前面的工作完成后才能开始。当然,这样的开发模式需要很好的项目协调和文档作支持。

  你也许会问,如果我把这些函数些在一个单独的文件中,再在需要调用的地方把它包含进来,不是同样能达到目的吗? 第一,这种方法效率不高,无论你把这些函数分散到多少个文件中,当你需要调用其中一个时,总会包含进一些实际上并不需要的函数,这无疑加重了服务器的负担,对服务器性能要求较高的web应用尤其如此。而dll只在需要时才调入内存且只调入需要的函数,并且多个应用程序实例可以共享同一个dll实例;第二,设想一个员工,有20个属性(工号,姓名,年龄,性别……),现在给定某工号,要求返回此员工所有信息。此时如果单纯用函数,只能定义20个全局变量,在函数中改变这些变量值,或者定义一个有20个传参(by reference)参数的函数。显然,第一种方法很麻烦而一旦增加一个属性后一种方法就需要更改函数接口。而在一个对象里,既包含成员方法(即函数和过程),也包括成员属性。如果我们采用对象的方法,则在函数中只需要改变对象的属性,在函数外可以直接引用改变了的对象属性值。这种方法有些类似第一种方法,但1.属性值无需在函数外逐一说明;2.这些属性值只属于对象,与对象无关的代码不会无意地改变属性值;3.一旦对象被释放,这些值会被一起释放。

三、如何开发三层结构的asp应用程序
  asp具有良好的扩充性,我们访问数据库时,采用的时ado对象,访问文件时,采用的是文件系统对象(fso),其实这时程序已经是三层结构的应用程序了,只不过由于是利用内置的对象而为意识到罢了。这些对象都遵循com/activex接口,因此我们自己开发的对象也要遵循这个接口。下面,我们就以上文提到的"合格& quot;标准为例,演示如何创建自己的三层结构的asp应用。

  1。在数据库系统中建立如下数据库表:

    employee: emplid char (5) not null,
          name  char (10) not null,
          gender char (1) not null,
          score   int not null
  此表存储员工信息和考试成绩,为简单起见,这里只包含工号,姓名和性别三项,并且只有一门考试,emplid为主键。

  2。建立动态链接库
  启动vb(这里以vb为例,你可以用你喜欢的任何支持activex接口的开发工具开发),新建一工程,工程类型为activex dll。在工程中新建一个类,取名为employee。你可以class builder可视化的向类中填加属性和方法,也可以直接手工编辑。首先填加emplid属性如下:
  private msemplid as string
  property let emplid(semplid [...]

(原)Visual Basic TreeView Control Bug

‘当树中设置有图片,并一边加节点,一边选中,结果选中操作不实现
‘请先引用Microsoft Windows Common Controls 6.0 或5.0
‘加ImageList1,加上一张图
‘测试程序
Option Explicit
Dim arr_tmp(3)
Private Sub Form_Load()
arr_tmp(0) = "001"
arr_tmp(1) = "002"
arr_tmp(2) = "003"
arr_tmp(3) = "004"
Dim i As Integer
With Me.TreeView1(0)
    .Checkboxes = True
    For i = 0 To 3
    .Nodes.Add , , "f" & arr_tmp(i), arr_tmp(i), 1 ‘这里是图
    .Nodes("f" & arr_tmp(i)).Checked = True ‘<——-这个操作没有实现
    Next i
End With
End [...]

Microsoft.XMLHTTP对象

 

MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。
创建XMLHTTP对象的语句如下:
Set objXML = createObject(Msxml2.XMLHTTP) 或
Set objXML = createObject(”Microsoft.XMLHTTP”)
‘ Or, for version 3.0 of XMLHTTP, use:
‘ Set xml = Server.createObject(MSXML2.ServerXMLHTTP)
对象创建后调用Open方法对Request对象进行初始化,语法格式为:
poster.open http-method, url, async, userID, password
Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示:
http-method: HTTP的通信方式,比如GET或是 POST
url: 接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序
async: 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
userID 用户ID,用于服务器身份验证
password 用户密码,用于服务器身份验证 
XMLHTTP对象的Send方法
用Open方法对Request对象进行初始化后,调用Send方法发送XML数据:
poster.send XML-data
Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
值 说明
0 Response对象已经创建,但XML文档上载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息
客户机处理响应信息
客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的:
● responseTxt:将返回消息作为文本字符串;
● responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
● responseStream:将返回消息视为Stream对象。
AspHTTP组件的属性
Accept
指示什么样的MIME类型可以被请求程序接受
例如:
HttpObj.Accept = “*/*”
Authorization
授权头可以让你获得 需要验证身份的地方的url
用户名和口令之间用冒号点开
例如:
HttpObj.Authorization = “jimb:superbmr”
BinaryData
返回来自getURl请求获得的两进制格式的数据,你可以用这个属性取得两进制数据
如来自另一个web服务器的图片例如:
<%
Response.ContentType = “image/gif”
Set HTTPObj = Server.createObject(”AspHTTP.Conn”)
HTTPObj.Url = “/blog/upload/200562215730899.gif”
HTTPObj.GetURL
Response.BinaryWrite HTTPObj.BinaryData
%>
ContentType
这个属性允许你在POST***作时自定义content-type头
例如:
ContentType = [...]

Google员工管理的十大关键原则

在Google,我们认为商业管理学的宗师彼得-德鲁克对于如何管理“知识型员工”的理解最为深刻。毕竟,这个词是由德鲁克于1959年发明。德鲁克说知识型员工相信自己拿工资是为了出效率,而不是为了完成朝九晚五的呆板工作,而聪明的企业会“排除任何影响‘知识型员工’工作的障碍”。这些成功经验将吸引最好的员工,并且保证“未来25年竞争优势的唯一且最大的因素。”
在Google,我们寻求这种优势。当前关于大型企业是否对于知识型员工处置失当的争论是我们慎重对待的问题之一,这是因为无法正确处理该问题的企业将被出局。我们从其他地方以及内部讨论得出得到很多好的想法。以下几条就是我们在最大化知识化员工效率方面所采用的关键原则。与大多数技术公司一样,我们的许多员工都是工程师级别的,因此我们将以这个特殊群体为主,但其中很多原则对于所有知识型员工均适用。
一、组织委员会,严格招聘
实质上每个参加Google面试的人至少与六位面试官交谈过,后者均是公司管理层面或潜在同事组成的。每个人的观点都算数,从而使招聘程序更加公平,标准更高。当然,花费的时间会长一些,但我们认为值得。如果希望招到优秀的员工,那么经过严格的招聘程序,你会得到更加优秀的员工。公司创立之初我们就开始构建这种积极的反馈循环,直到现在已经从中获得了巨大回报。
二、满足员工的所有需要
正如德鲁克所说,管理目标是“排除任何影响他们工作的障碍。”我们为他们提供了一整套标准的额外利益,但首先是一流的餐饮设施、体育馆、洗衣房、按摩室、理发厅、洗车房、干洗房、接送班车等,几乎任何一位勤奋工作的工程师所需的一切。我们可以这样分析:程序师乐意开发程序,他们不喜欢洗衣服。那么我们就让这两件事情变得同时简单起来。
三、拉近员工距离
Google的几乎每个项目都是小组项目,每个小组之间都必须进行交流合作。最好的让交流变得简单的方式就是让每个小组成员都近在咫尺。因此实质上 Google的所有员工分享一间办公室。这样,当某位程序师需要与一位同事协商时,就能马上找到对方:没有电话号码标签、没有电子邮件拖延、不用等待答复。当然,Google还有很多会议室供人们进行详细讨论,从而不会打扰各自的办公助手。即使是公司CEO,在来到Google后数月才得到一间办公室。和一个学识丰富的员工比邻而居,委实是一种高效的培训经验。
四、使合作简单协调
由于一个小组的所有成员都近在咫尺,因此在协调项目开展方面就相对容易些。除了身体保持近距离外,每位Google员工每周还向其所在工作组发送电子邮件回报上周的工作成绩。这样就能让每个人都能简单地跟踪其他成员的工作进度,更加容易地监控工作进程,并同步工作流程。
五、身体力行,使用自己的产品
Google员工都很频繁地使用公司开发的各种工具。最常见的就是为所有项目和任务而建内部网页组成的网络。这些网页都被索引并以按需访问的策略向项目参与者开放。我们对其他信息管理工具的用户进行了扩展,其中某些将最终以产品的形式对外推出。譬如Gmail成功的原因之一就是它曾在公司内部测试达数月之久。电子邮件主要用于组织信息,所以Gmail被不断改进,直至满足最大需求的消费者——我们的知识型员工的需要。
鼓励创新
Google工程师们可把20%的工作时间放在自选项目开发上。当然其中必须有一个批准过程以及某些失败,但基本上我们希望让所有富有创意的人们发挥创意。我们有一个公开的秘密武器,就是创意邮件目录:一个全公司共用的建议箱。任何人都可以把自己的创意发送到这里,从停车程序到下一代应用程序等等。在这里所有人都可以对创意发表评论、进行评价,从而促使最佳创意浮出水面。
六、尽可能统一意见
现代企业神话中都有一个英雄般的独特决议制订者。我们坚信“群众的智慧”这一理念,并希望在确定任何决议之前收集广泛的观点作为分析基础。在 Google,管理者的角色是一个观点的收集者,而不是决策的独裁者。统一大多数人的意见有时要花费较长时间,但通常可以组成一个更加忠诚的工作组和更为明智的决策。
七、不作恶
很多人曾经对Google的这一口号做过描写,但我们确实试图以此为工作指导,尤其在管理方面。就像任何组织的成员都对他们的观点充满热情一样。但在 Google,不会有人反对这一原则,不想其他某些知名技术公司管理习惯那样。我们努力创建一种充满宽容和尊重的工作氛围,而不是让公司里充满满嘴只会说是的人。
八、数据决定决策
在Google,几乎所有决策都是基于大量分析后得出。我们创建了多种管理信息的系统,不止是大方面的互联网,还有内部联网。我们有很多分析师专门研究数据,分析各种执行标准然后总结出发展趋势,从而使我们尽可能地跟上时代的步伐。我们为每个研究项目都建立了大量在线“仪表板”,从中获得最新的状态现状。
有效地交流
每周五公司所有员工都集合在一起,共同获得公司公告,业务介绍,解决各种问题(还有一些食物和饮料)。通过这种方式,管理层能够密切接触并及时了解知识型员工的所想,员工也能对管理层的想法有所了解。Google对组织内的信息分发进行了极大的扩展,并重点弥补了少数严重疏漏。与某些外界想法不同,我们认为值得信赖的劳动力才是忠实的工作团队是所有结果的第一真理。
发展道路上的潜在障碍
当然,我们公司不止遵守以上规则,其中许多在硅谷非常普遍。同时,我们意识到随着公司的发展,我们必须不断改进自己的管理技术。我们(以及其他类似于我们的公司)还面临很多问题。
第一就是“技术自大”问题。工程师们之间的竞争是自然的,并且他们难以容忍那些积极性或学识不如自己的人。但几乎所有工程项目都是小组项目,因此小组中出现头脑聪明但顽固不化的人对于整个工作都是致命的。如果我们在一封推荐信中看到“我所见过的最聪明的人”以及“我再也不想跟他们一起工作”的字眼,那么我们绝对不会通过他们的提议。普及同级人员面试的原因之一就是为了确保小组成员热情欢迎新成员的加入。我们的很多优秀员工在小组创建等方面都是楷模,因此我们希望继续保持这种方式。
与之相关的就是NIH症候群(not-invented-heresyndrome,“与我无关综合症”)。一个好的工程师通常坚信自己能够开发一套比现有系统更加完善的系统,并且以“创建而不购买”为信念。当然,他们或许是正确的,但我们却必须以极大的代价关注这些项目。有时这也意味着超出了公司的产品和服务界限。
还有一个问题也是我们未来几年将要面对,即公司、产业及内部劳动力将最终成熟起来。不止是我们,连同业内其他公司目前都处于一个告诉发展阶段,但这个阶段不会成为永久。我们中的很多员工都是刚走出校园的大学毕业生;其他的都有家庭以及丰富的工作经验。他们有着不同的兴趣和需求,因此我们必须提供可吸引所有年龄段员工的福利和工作环境。
最后的问题是确保Google成长过程中,通讯程序能够跟的上公司的扩展。周五例会对于山景镇的工作小组非常适用,但是现在的Google已经成为一个全球组织。
我们一直注重创新和改革,但这并不是Google的唯一。我们还必须管理日常运作,这也不是一项简单的任务。我们将建造比历史上已存的,更加庞大、复杂和要求更加严格的技术基础设施。这些系统必须持续发展不断满足不断增加的一系列要求,因此计划、执行并维护这些系统的人还必须具有强烈的积极性。在 Google,日常运作不是简单的事后三思:它们对于公司的成功有着至关重要的作用,同时我们希望在新产品开发中,能够取得像现在的统治领域一样的成绩和发明。

(转)如何用家用数码相机拍摄1寸2寸标准证件相

到相馆里拍个证件相要8元钱左右,但洗张6寸的相片也就1元钱左右,基于成本考虑,很多人非常想用手头的家用数码相机给自己拍个证件相,以备各种用途.
     如果你和相馆的人熟,他们会帮你的数码相裁剪成证件相的大小,要不然只好自己动手
     没有经过PS处理(photoshop的简称PS)的相片,一般还不适合冲洗证件相
首先你要了解证件相的大小
如:普通1寸相 25X35mm 如简历,证件22X32mm 如驾驶证,身份证 26X32mm ,毕业证大一寸 33X48mm
         我们要冲洗的是6寸/4R的相片尺寸: 6X4英寸 15.24×10.16 (厘米)
本文以 2.2X3.2 (厘米)的一寸证件相为例
          还要了解,相片使用的背景色,以前的证件大多用红蓝色,现在开始流行白色,如新的驾驶证和身份证,红底的请准备一块红布或在photoshop后期处理也行,白底可以用墙来做背景,注意增加两侧灯光,以免产生阴影。
    需要的设备:
1.数码相机 (没它不行)
2.三脚架    (固定相机,稳定为避免抖动,而且操作也方便很多)
3.一面白色/红布的背景墙   (后期PS处理简单些)
4.读卡器及家用电脑 (用读卡器将相片输入电脑里)
5.PhotoShop软件 (这是本文的重点)
    准备:
1.用三脚架起相机在离墙1.5至2米的位置,能拍到人的半身为宜
2.相机的高度正好与人的面部等高
3.可以坐着,没有三脚架也可以用桌子或其它固定物替代
4.使用自然光时光线要充足
5.最好穿深色有领衣服,露出部份脖子,免冠
    开拍:
     1.目光要看着镜头
     2.上下左右调整头部使的两只耳朵要看得见,如果是自拍,多试几张来调整自己的位置
     3.如果室内光线不足,要用闪光补光,调好补光值,调好白平衡,建议用手动档拍摄,或P档程序爆光档
     4.相机一般都有延时功能,记得要用它,自拍用10秒,一般拍摄用2秒,目的是让手离开相机后才自动拍摄,减少抖动
     5.注意,请不要在这么近的距离对着小孩开闪光灯,伤害眼睛,拍小孩要选择在室外光线充足,或室内一定人有辅助光线
     ,柯嚓,柯嚓……
     好了,一下子已经拍了N 张了,反正拍多几张不花钱,是的,如果是初次拍,那么从N张中选出一张满意也是不难的
    冲洗前的后期处理:
     这时拿相片去冲洗的话是不行的,我们要在电脑里裁成标准的尺寸
     输入相片到电脑里,我们选择了一张最好的
标准相:
    注:为了看上去舒服些,就不用上面那张了,随便在网上找了一张活勃的为例,以免别人说我抄教程,呵:),仅为了讲讲PS软件的操作方法,实际证件的规格请参考标准证件。
用photoshop软件打开这张图片
点击右边的裁切工具,如图
        
     在上属性栏中填入1寸相的参数如上,在分辩率118.11像素/厘米约等于300像素/英寸
     拉动载切工具如下图,证件相头部要占相片的2/3,或参考标准证件.
     注:图片裁切出来后,点击菜单-图像-图像大小,将图片的文档大小调整成2.2X3.2厘米,300像素/英寸,实际操作中你可以加大一毫米作为裁剪如(2.3X3.3)
        
     另新建一个文件
        
     修改参数为6寸相片尺寸,注:这就是刚才修改一寸相为300像素/英寸的目的,保证合并后的图片相对大小
        
     生成一个6:4比例的6寸规格相片底板,为了以后洗出的相片容易裁剪,这里填充淡绿色到这个背影上
        
     由于本图背景简单,用套索工具,很容易就去底,并用纯白色填充底色(驾驶照要求白底相片),将一寸相拖到6寸相中
        
     按住ALT键,鼠标左键拖复制出另一图,此时不要放开鼠标和ALT键的手指,同时再按下Shift键,这时的复制是横向对齐的,放开鼠标后得到如图:
        
     Shift+ALT+鼠标配合复制整齐的图片以下,完成保存
        
提示:对齐的要决是,横向复制完成后,按住Shift键左右调整间距,然后合并一排六张1寸相,然后用此法向下复制,这就得到18张上下左右对齐的相片了,到时用裁刀一裁就出来了
     把这相考到U盘拿出冲洗吧!
     本人利用此方法自拍了证件照!
来源:游泳的鱼 www.kxpp.com

超强的声音模仿,不收藏太可惜了(七巨星版 老鼠爱大米- 江梁) & 江梁和杨帆在央视的模仿PK秀

这个强人名叫 江梁

江梁和杨帆在央视的模仿PK秀

如何在SQL Server数据库中加密数据

为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名、密码、信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需要考虑的的第一条设计决策就是如何加密存储数据,以此来保证它的安全,免受被他人窥测。
SQL Server中有哪一种支持可以用于加密对象和数据?从一开始就讨论一下SQL Server欠缺什么是明智的,或者是对于SQL Server中的加密部分你不应该做什么。
首先,SQL Server有两个内置的密码函数——即,pwdencrypt() 和 pwdcompare()。同时,还有两个SQL Server用来管理密码哈希的没有正式记录的函数:pwdencrypt() 将密码哈希过后进行存储;pwdcompare()将提供的字符串与哈希后的字符串进行比较。不幸的是,这个哈希函数不是非常安全,它可以通过字典攻击算法被破解(类似命令行应用程序!)。
这些函数随着SQL Server的版本发展而不断进行修改,这也是另一个没有使用它们的原因。早期版本的SQL Server对密码进行的哈希,在后来的版本中无法解密,所以如果你依赖一个版本中的函数,那么当升级的时候,所有你的加密数据就都没有用了,除非你可以首先对其解密——这也就违背了加密的最初的目的。
第二,你可能会尝试去创建一个针对你的数据库的自制的加密解决方案,但是有以下三个理由说明你不要这样做:
除非你是加密专家,否则胡乱编写的加密系统只会提供非常低级的价值不高的保护。新鲜的是,单向密码哈希或者 “ROTx “形式的加密几乎不需要费事就可以被轻松打败。
如果由于你自己的能力的缺乏而导致加密被破解,那么你的数据就完蛋了。你需要将所有的东西进行没有加密的备份,是吗?(即使你加密了,那里有没有安全漏洞?)
当市面上提供有专业级别的,具有工业强度的加密解决方案的时候,你就不值得花费时间去自己做。把你的时间用于构建一个好的,坚固的数据库,而不是再重新发明一次车轮。
那么,什么才是好的加密数据的方式呢?
对于新手,微软提供了一个自己生成的加密解决方案,CryptoAPI 。对于轻量级的加密,军用级别的安全就不在考虑范围之内,它具有相对容易实现的优势:管理员可以安装一个名为CAPICOM 的ActiveX 控制,它可以在T-SQL存储过程中提供CryptoAPI 功能。CAPICOM 支持各种类型的双向加密和单向哈希算法,所以管理员可以挑选最适合应用程序的问题的部分。
如果你对使用微软的解决方案不感兴趣,还有一些很好的第三方的方案可以使用。一家名为ActiveCrypt 的软件有限责任公司制造了XP_CRYPT ,它是SQL Server的插件,可以在视图、程序和触发器中通过扩展存储过程和用户自定义函数(在SQL Server 2000中)来完成加密。你可以下载一个支持无线的MD5,DES ,以及SHA1哈希的免费版本的应用程序;其他的加密模型就是在比特深度上进行的。(完全版本是无限的。)在你自己的代码中,你可以使用XP_CRYPT,与ActiveX 控制一样(在受限的免费版本中)。对于ASP程序员来说,一个名为AspEncrypt 的组件提供了一种将高级加密整合到你的代码中的简单方式。
对数据库文件自身进行加密或者提供传输层上的安全保护怎么样?对于前者,大家可以在Windows系统中持续使用加密文件系统。然而,你必须保存加密密钥的备份,在出现问题的时候,这个数据有可能会丢失。对于后者,有IPSec和SQL Server自己的SSL加密,都是SQL Server和Windows自带的大家的主要精力应该放在避免以明文存储敏感数据,因为从数据库中抽取没有加密的数据同样是最容易受到攻击的薄弱环节。

(转)如何在SQL Server数据库中加密数据

 为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名、密码、信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需要考虑的的第一条设计决策就是如何加密存储数据,以此来保证它的安全,免受被他人窥测。
  SQL Server中有哪一种支持可以用于加密对象和数据?从一开始就讨论一下SQL Server欠缺什么是明智的,或者是对于SQL Server中的加密部分你不应该做什么。
  首先,SQL Server有两个内置的密码函数——即,pwdencrypt() 和 pwdcompare()。同时,还有两个SQL Server用来管理密码哈希的没有正式记录的函数:pwdencrypt() 将密码哈希过后进行存储;pwdcompare()将提供的字符串与哈希后的字符串进行比较。不幸的是,这个哈希函数不是非常安全,它可以通过字典攻击算法被破解(类似命令行应用程序!)。
  这些函数随着SQL Server的版本发展而不断进行修改,这也是另一个没有使用它们的原因。早期版本的SQL Server对密码进行的哈希,在后来的版本中无法解密,所以如果你依赖一个版本中的函数,那么当升级的时候,所有你的加密数据就都没有用了,除非你可以首先对其解密——这也就违背了加密的最初的目的。
  第二,你可能会尝试去创建一个针对你的数据库的自制的加密解决方案,但是有以下三个理由说明你不要这样做:
  除非你是加密专家,否则胡乱编写的加密系统只会提供非常低级的价值不高的保护。新鲜的是,单向密码哈希或者 "ROTx "形式的加密几乎不需要费事就可以被轻松打败。
  如果由于你自己的能力的缺乏而导致加密被破解,那么你的数据就完蛋了。你需要将所有的东西进行没有加密的备份,是吗?(即使你加密了,那里有没有安全漏洞?)
  当市面上提供有专业级别的,具有工业强度的加密解决方案的时候,你就不值得花费时间去自己做。把你的时间用于构建一个好的,坚固的数据库,而不是再重新发明一次车轮。
  那么,什么才是好的加密数据的方式呢?
  对于新手,微软提供了一个自己生成的加密解决方案,CryptoAPI 。对于轻量级的加密,军用级别的安全就不在考虑范围之内,它具有相对容易实现的优势:管理员可以安装一个名为CAPICOM 的ActiveX 控制,它可以在T-SQL存储过程中提供CryptoAPI 功能。CAPICOM 支持各种类型的双向加密和单向哈希算法,所以管理员可以挑选最适合应用程序的问题的部分。
  如果你对使用微软的解决方案不感兴趣,还有一些很好的第三方的方案可以使用。一家名为ActiveCrypt 的软件有限责任公司制造了XP_CRYPT ,它是SQL Server的插件,可以在视图、程序和触发器中通过扩展存储过程和用户自定义函数(在SQL Server 2000中)来完成加密。你可以下载一个支持无线的MD5,DES ,以及SHA1哈希的免费版本的应用程序;其他的加密模型就是在比特深度上进行的。(完全版本是无限的。)在你自己的代码中,你可以使用XP_CRYPT,与ActiveX 控制一样(在受限的免费版本中)。对于ASP程序员来说,一个名为AspEncrypt 的组件提供了一种将高级加密整合到你的代码中的简单方式。
  对数据库文件自身进行加密或者提供传输层上的安全保护怎么样?对于前者,大家可以在Windows系统中持续使用加密文件系统。然而,你必须保存加密密钥的备份,在出现问题的时候,这个数据有可能会丢失。对于后者,有IPSec和SQL Server自己的SSL加密,都是SQL Server和Windows自带的大家的主要精力应该放在避免以明文存储敏感数据,因为从数据库中抽取没有加密的数据同样是最容易受到攻击的薄弱环节。

Microsoft SQL Server与Sybase内在区别

  Microsoft SQL Server与Sybase的内在区别:
  1.Sybase没有用户自定义函数。
  2.判断fetch成功的全局变量是@@sqlstatus,而不是@@fetch_status。
  3.没有set,赋值与查询通用select。
  4.没有top,返回N行要使用set rowcount N / set rowcount 0
  5.raiserror 22009 ” “–> raiserror( ‘ ‘,16,1)
  6.游标一定要在过程中使用,不能单独在查询中使用。
  7.销毁游标要加cursor关键字.如:deallocate cursor cur_tmp
  8.没有bigint类型。
  9.create table #t(id numeric(12,0) identity not null),不支持int型,且不能设置起始值和步进值。
  10.不能alter一个存储过程,要先drop掉再create。
  11.没有len函数,使用char_length或datalength等效。
  12.通过sysindexes中的doampg列可返回某表的行数,rowcnt(doampg) 。
  13.convert函数没有120格式(yyyy-mm-dd hh:mm:ss),需要使用select convert(char(4),datepart(year,getdate()))+ ‘- ‘+right( ‘0 ‘+convert(varchar(2),datepart(month,getdate())),2)+ ‘- ‘+right( ‘0 ‘+convert(varchar(2),datepart(day,getdate())),2)+ ‘ ‘+convert(char(10),getdate(),8)
  14.charindex不能从被查找字符串中按指定位置查找某字符串。
  15.不能使用rtrim函数将数值型转为字符型。
  16.没有cast函数,数值型到字符型转移使用select convert(varchar(10),123)
  17.没有replace函数。
  18.没有left函数,只有right函数。
  19.不支持在字段上加[]。
  20.select语句中不支持变量累加,例如:select @sql=@sql+colname from tablename
  21.在过程及视图中系统会自动将select * 变为select 列1,列2…
  22.varchar最大支持16384个字节(SQLServer中是8000) 。
  23.Sybase不支持表变量。
  24.Sybase不支持instead of触发器。
  25.Sybase没有调度(注:定时执行某个操作) 。