??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲成年人啊啊aa在线观看,女bbbbxxxx另类亚洲,久久精品国产亚洲夜色AV网站http://www.tkk7.com/SIDNEY/zh-cnSat, 10 May 2025 16:54:01 GMTSat, 10 May 2025 16:54:01 GMT60解析plugin-cfg.xml文ghttp://www.tkk7.com/SIDNEY/archive/2010/12/31/342103.html渠上?/dc:creator>渠上?/author>Fri, 31 Dec 2010 14:47:00 GMThttp://www.tkk7.com/SIDNEY/archive/2010/12/31/342103.htmlhttp://www.tkk7.com/SIDNEY/comments/342103.htmlhttp://www.tkk7.com/SIDNEY/archive/2010/12/31/342103.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/342103.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/342103.html阅读全文

]]>
LDAPhttp://www.tkk7.com/SIDNEY/archive/2009/09/03/293793.html渠上?/dc:creator>渠上?/author>Thu, 03 Sep 2009 13:29:00 GMThttp://www.tkk7.com/SIDNEY/archive/2009/09/03/293793.htmlhttp://www.tkk7.com/SIDNEY/comments/293793.htmlhttp://www.tkk7.com/SIDNEY/archive/2009/09/03/293793.html#Feedback1http://www.tkk7.com/SIDNEY/comments/commentRss/293793.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/293793.html
  LDAP目录的优?nbsp;

    如果需要开发一U提供公׃息查询的pȝ一般的设计Ҏ(gu)可能是采用基于WEB的数据库设计方式Q即前端使用览器而后端用WEB服务器加上关pL据库。后端在Windows的典型实现可能是Windows NT + IIS + Acess数据库或者是SQL服务器,IIS和数据库之间通过ASP技术用ODBCq行q接Q达到通过填写表单查询数据的功能; 
    后端在Linuxpȝ的典型实现可能是Linux+ Apache + postgresqlQApache和数据库之间通过PHP3提供的函数进行连接。用上q方法的~点是后端关pL据库的引入导致系l整体的性能降低和系l的理比较J琐Q因为需要不断的q行数据cd的验证和事务的完整性的认Qƈ且前端用户对数据的控制不够灵z,用户权限的设|一般只能是讄在表一U而不是设|在记录一U?nbsp;

    目录服务的推Z要是解决上述数据库中存在的问题。目录与关系数据库相|是指h描述性的Z属性的记录集合Q但它的数据cd主要是字W型Qؓ了检索的需要添加了BINQ二q制数据Q、CISQ忽略大写Q、CESQ大写敏感Q、TELQ电(sh)话型Q等语法QSyntaxQ,而不是关pL据库提供的整数、QҎ(gu)、日期、货币等cdQ同样也不提供象关系数据库中普遍包含的大量的函数Q它主要面向数据的查询服务(查询和修Ҏ(gu)作比一般是大于10:1Q,不提供事务的回滚QrollbackQ机Ӟ它的数据修改使用单的锁定机制实现All-or-NothingQ它的目标是快速响应和大容量查询ƈ且提供多目录服务器的信息复制功能?nbsp;

    现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。可能LDAP最大的优势是:可以在Q何计机q_上,用很Ҏ(gu)获得的而且数目不断增加的LDAP的客LE序讉KLDAP目录。而且也很Ҏ(gu)定制应用E序为它加上LDAP的支持?nbsp;

    LDAP协议是跨q_的和标准的协议,因此应用E序׃用ؓLDAP目录攑֜什么样的服务器上操心了。实际上QLDAP得到了业界的q泛认可Q因为它是Internet的标准。商都很愿意在产品中加入对LDAP的支持,因ؓ他们Ҏ(gu)不用考虑另一端(客户端或服务端)是怎么L。LDAP服务器可以是M一个开发源代码或商用的LDAP目录服务器(或者还可能是具有LDAP界面的关pd数据库)Q因为可以用同样的协议、客Lq接软g包和查询命o与LDAP服务器进行交互。与LDAP不同的是Q如果Y件商想在Y件品中集成对DBMS的支持,那么通常都要Ҏ(gu)一个数据库服务器单独定制。不象很多商用的关系型数据库Q你不必为LDAP的每一个客Lq接或许可协议付?大多数的LDAP服务器安装v来很单,也容易维护和优化?nbsp;

    LDAP服务器可以用“?#8221;?#8220;?#8221;的方法复刉分或全部数据Q例如:可以把数?#8220;?#8221;到远E的办公室,以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配|。如果要在DBMS中用相同的复制功能Q数据库产商׃要你支付额外的费用,而且也很隄理?nbsp;

    LDAP允许你根据需要用ACIQ一般都UCؓACL或者访问控制列表)控制Ҏ(gu)据读和写的权限。例如,讑֤理员可以有权改变员工的工作地点和办公室LQ但是不允许改变记录中其它的域。ACI可以Ҏ(gu)谁访问数据、访问什么数据、数据存在什么地方以及其它对数据q行讉K控制。因些都是由LDAP目录服务器完成的Q所以不用担心在客户端的应用E序上是否要q行安全查?nbsp;

    LDAPQLightweight Directory Acess ProtocolQ是目录服务在TCP/IP上的实现QRFC 1777 V2版和RFC 2251 V3版)。它是对X500的目录协议的ULQ但是简化了实现Ҏ(gu)Q所以称量的目录服务。在LDAP中目录是按照树型l构l织Q目录由条目QEntryQ组成,条目相当于关pL据库中表的记录;条目是具有区别名DNQDistinguished NameQ的属性(AttributeQ集合,DN相当于关pL据库表中的关键字QPrimary KeyQ;属性由cdQTypeQ和多个|ValuesQ组成,相当于关pL据库中的域(FieldQ由域名和数据类型组成, 
只是Z方便索的需要,LDAP中的Type可以有多个ValueQ而不是关pL据库中ؓ降低数据的冗余性要求实现的各个域必L不相关的。LDAP中条目的l织一般按照地理位|和l织关系q行l织Q非常的直观。LDAP把数据存攑֜文g中,为提高效率可以用基于烦引的文g数据库,而不是关pL据库。LDAP协议集还规定了DN的命名方法、存取控制方法、搜索格式、复制方法、URL格式、开发接口等 

    LDAP对于q样存储q样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新?nbsp;

    例如Q这些信息存储在LDAP目录中是十分有效的: 

    l 公司员工的电(sh)话号码簿和组l结构图 

    l 客户的联pM?nbsp;

    l 计算机管理需要的信息Q包括NIS映射、email假名Q等{?nbsp;

    l 软g包的配置信息 

    l 公用证书和安全密?nbsp;

  什么时候该用LDAP存储数据 


    大多数的LDAP服务器都密集型的操作q行专门的优化。因此,当从LDAP服务器中d数据的时候会比从专门为OLTP优化的关pd数据库中d数据快一个数量。也是因Z门ؓȝ性能q行优化Q大多数的LDAP目录服务器ƈ不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储?sh)话L是一个很好的选择Q但是它不能作ؓ?sh)子商务站点的数据库服务器?nbsp;

    如果下面每一个问题的{案都是“?#8221;Q那么把数据存在LDAP中就是一个好L?nbsp;

    l 需要在Mq_上都能读取数据吗Q?nbsp;

    l 每一个单独的记录Ҏ(gu)不是每一天都只有很少的改变? 

    l 可以把数据存在^面数据库Qflat databaseQ而不是关pd数据库中吗?换句话来_也就是不什么范式不式的Q把所有东襉K存在一个记录中Q差不多只要满W一范式Q?nbsp;


    最后一个问题可能会唬住一些hQ其实用q面数据库去存储一些关pd的数据也是很一般的。例如,一条公司员工的记录可以包含经理的d名。用LDAP来存储这cM息是很方便的。一个简单的判断Ҏ(gu)Q如果可以把保数据存在一张张的卡片里Q就可以很容易地把它存在LDAP目录里?nbsp;


  安全和访问控?nbsp;

    LDAP提供很复杂的不同层次的访问控制或者ACI。因q些讉K可以在服务器端控Ӟq比用客L的Y件保证数据的安全可安全多了?nbsp;

用LDAP的ACIQ可以完成: 

    l l予用户改变他们自己的电(sh)话号码和家庭地址的权限,但是限制他们对其它数据(如,职务名称Q经理的d名, 
{等Q只?#8220;只读”权限?nbsp;

    l l予“HR-admins"l中的所有h权限以改变下面这些用L信息Q经理、工作名U、员工号、部门名U和部门受?nbsp;
但是对其它域没有写权限?nbsp;

    l 止M人查询LDAP服务器上的用户口令,但是可以允许用户改变他或她自q口o?nbsp;

    l l予l理讉K他们上的家庭电(sh)话的只读权限Q但是禁止其他h有这个权限?nbsp;

    l l予“host-admins"l中的Q何h创徏、删除和~辑所有保存在LDAP服务器中的与计算Z机有关的信息 

    l 通过WebQ允?#8220;foobar-sales"l中的成员有选择地给予或止他们自己d一部分客户联系数据的读权限。这允总们把客户联系信息下蝲到本地的W记本电(sh)脑或个h数字助理QPDAQ上。(如果销售h员的软g都支持LDAPQ这非常有用) 

    l 通过WebQ允许组的所有者删除或d他们拥有的组的成员。例如:可以允许销售经理给予或止销售h员改变Web늚权限。也可以允许邮g假名Qmail aliaseQ的所有者不l过IT技术h员就直接从邮件假名中删除或添加用戗?#8220;公用”的邮件列表应该允许用户从邮g假名中添加或删除自己Q但是只能是自己Q。也可以对IP地址或主机名加以限制。例如,某些域只允许用户IP地址?92.168.200.*开头的有读的权限,或者用户反向查找DNS得到的主机名必须?.foobar.com?nbsp;

  LDAP目录树的l构 

    LDAP目录以树状的层次l构来存储数据。如果你对自向下的DNS树或UNIX文g的目录树比较熟?zhn)Q也很Ҏ(gu)掌握LDAP目录树这个概念了。就象DNS的主机名那样QLDAP目录记录的标识名QDistinguished NameQ简UDNQ是用来d单个记录Q以及回溯到树的剙。后面会做详l地介绍?nbsp;

   Z么要用层ơ结构来l织数据呢?原因是多斚w的。下面是可能遇到的一些情况: 

    l 如果你想把所有的国客户的联pM息都“?#8221;C于到襉K囑֊公室Q负责营销Q的LDAP服务器上Q但是你不想把公司的资񔽎理信息“?#8221;到那里?nbsp;

    l 你可能想Ҏ(gu)目录树的l构l予不同的员工组不同的权限。在下面的例子里Q资产管理组?#8220;asset-mgmt"部分有完全的讉K权限Q但是不能访问其它地斏V?nbsp;

    l 把LDAP存储和复制功能结合v来,可以定制目录树的l构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每分钟更新的美国销售状늚信息Q但是欧z的销售情况就只要每小时更Cơ就行了?nbsp;

  刨根问底Q基准DN 

    LDAP目录树的最剙是根,也就是所谓的“基准DN"。基准DN通常使用下面列出的三U格式之一。假定我在名为FooBar的电(sh)子商务公司工作,q家公司在Internet上的名字是foobar.com?o="FooBar, Inc.", c=US Q以X.500格式表示的基准DNQ?在这个例子中o=FooBar, Inc. 表示l织名,在这里就是公司名的同义词。c=US 表示公司的总部在美国。以前,一般都用这U方式来表示基准DN。但是事物L在不断变化的Q现在所有的公司都已l(或计划)上Internet上。随着 
Internet的全球化Q在基准DN中用国家代码很Ҏ(gu)让h产生h。现在,X.500格式发展成下面列出的两种格式?nbsp;

    o=foobar.com 

Q用公司的Internet地址表示的基准DNQ?nbsp;

q种格式很直观,用公司的域名作ؓ基准DN。这也是现在最常用的格式?nbsp;

    dc=foobar, dc=com 

Q用DNS域名的不同部分组成的基准DNQ?nbsp;

    p上面那一U格式,q种格式也是以DNS域名为基的,但是上面那种格式不改变域名(也就更易读)Q而这U格式把域名Qfoobar.com分成两部?dc=foobar, dc=com。在理论上,q种格式可能会更灉|一点,但是对于最l用h说也更难记忆一炏V考虑一下foobar.comq个例子。当foobar.com和gizmo.com合ƈ之后Q可以简单的?#8220;dc=com"当作基准DN。把新的记录攑ֈ已经存在的dc=gizmo, dc=com目录下,q样q化了很多工作Q当Ӟ如果foobar.com和wocket.edu合ƈQ这个方法就不能用了Q。如果LDAP服务器是新安装的Q我你用这U格式。再h意一下,如果你打用活动目录(Actrive DirectoryQ,Microsoft已经限制你必M用这U格式?nbsp;

更上一层楼Q在目录树中怎么l织数据 

    在UNIX文gpȝ中,最层是根目录QrootQ。在根目录的下面有很多的文g和目录。象上面介绍的那PLDAP目录也是用同LҎ(gu)l织h的?nbsp;

    在根目录下,要把数据从逻辑上区分开。因为历史上QX.500Q的原因Q大多数LDAP目录用OU从逻辑上把数据分开来。OU 
表示“Organization Unit"Q在X.500协议中是用来表示公司内部的机构:销售部、胦务部Q等{。现在LDAPq保留ou=q样的命名规则,但是扩展了分cȝ范围Q可以分cMؓQou=people, ou=groups, ou=devicesQ等{。更低一U的OU有时用来做更l的归类。例如:LDAP目录树(不包括单独的记录Q可能会是这LQ?nbsp;

dc=foobar, dc=com 

ou=customers 

ou=asia 

ou=europe 

ou=usa 

ou=employees 

ou=rooms 

ou=groups 

ou=assets-mgmt 

ou=nisgroups 

ou=recipes 

单独的LDAP记录 

  DN是LDAP记录的名字 

    在LDAP目录中的所有记录项都有一个唯一?#8220;Distinguished Name"Q也是DN。每一个LDAP记录的DN是由两个部分l成的:相对DNQRDNQ和记录在LDAP目录中的位置?nbsp;

    RDN是DN中与目录树的l构无关的部分。在LDAP目录中存储的记录w要有一个名字,q个名字通常存在cnQCommon NameQ这个属性里。因为几乎所有的东西都有一个名字,在LDAP中存储的对象都用它们的cng为RDN的基。如果我把最喜欢的吃燕麦_食谱存Z个记录,我就会用cn=Oatmeal Deluxe作ؓ记录的RDN?nbsp;

    l 我的LDAP目录的基准DN是dc=foobar,dc=com 

    l 我把自己的食׃为LDAP的记录项存在ou=recipes 

    l 我的LDAP记录的RDN设ؓcn=Oatmeal Deluxe 

上面q些构成了燕麦粥食谱的LDAP记录的完整DN。记住,DN的读法和DNSL名类伹{下面就是完整的DNQ?nbsp;

    cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com 

举一个实际的例子来说明DN 

    现在为公司的员工讄一个DN。可以用Zcn或uidQUser IDQ,作ؓ典型的用户帐受例如,FooBar的员工Fran Smith Q登录名QfsmithQ的DN可以Z面两U格式: 

    uid=fsmith,ou=employees,dc=foobar,dc=com 

Q基于登录名Q?nbsp;

    LDAPQ以及X.500Q用uid表示“User ID"Q不要把它和UNIX的uidh؜淆了。大多数公司都会l每一个员工唯一的登录名Q因此用q个办法可以很好C存员工的信息。你不用担心以后q会有一个叫Fran Smith的加入公司,如果Fran改变了她的名字(l婚Q离婚?或宗教原因?Q,也用不着改变LDAP记录的DN?nbsp;

    cn=Fran Smith,ou=employees,dc=foobar,dc=com 

Q基于姓名) 

    可以看到q种格式使用了Common NameQCNQ。可以把Common Name当成一个h的全名。这U格式有一个很明显的缺点就是:如果名字改变了,LDAP的记录就要从一个DN转移到另一个DN。但是,我们应该可能地避免改变一个记录项的DN?nbsp;

  定制目录的对象类?nbsp;

你可以用LDAP存储各种cd的数据对象,只要q些对象可以用属性来表示Q下面这些是可以在LDAP中存储的一些信息: 

    l 员工信息Q员工的姓名、登录名、口令、员工号、他的经理的d名,邮g服务器,{等?nbsp;

     l 物品跟踪信息Q计机名、IP地址、标{、型受所在位|,{等?nbsp;

     l 客户联系列表Q客L公司名、主要联pMh的电(sh)话、传真和?sh)子邮gQ等{?nbsp;

     l 会议厅信息:会议厅的名字、位|、可以坐多少人、电(sh)话号码、是否有投媄机?nbsp;

     l 食谱信息Q菜的名字、配料、烹调方法以及准备方法?nbsp;

因ؓLDAP目录可以定制成存储Q何文本或二进制数据,到底存什么要׃自己军_。LDAP目录用对象类型(object classesQ的概念来定义运行哪一cȝ对象使用什么属性。在几乎所有的LDAP服务器中Q你都要Ҏ(gu)自己的需要扩展基本的LDAP目录的功能,创徏新的对象cd或者扩展现存的对象cd?nbsp;

LDAP目录以一pd“属性对”的Ş式来存储记录,每一个记录项包括属性类型和属性|q与关系型数据库用行和列来存取数据有Ҏ(gu)的不同)。下面是我存在LDAP目录中的一部分食谱记录Q?nbsp;

dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com 

cn: Instant Oatmeal Deluxe 

recipeCuisine: breakfast 

recipeIngredient: 1 packet instant oatmeal 

recipeIngredient: 1 cup water 

recipeIngredient: 1 pinch salt 

recipeIngredient: 1 tsp brown sugar 

recipeIngredient: 1/4 apple, any type 

h意上面每一U配料都作ؓ属性recipeIngredient倹{LDAP目录被设计成象上面那样ؓ一个属性保存多个值的Q而不是在每一个属性的后面用逗号把一pd值分开?nbsp;

     因ؓ用这L方式存储数据Q所以数据库有很大的灵zL,不必为加入一些新的数据就重新创徏表和索引。更重要的是QLDAP目录不必p内存或硬盘空间处?#8220;I?#8221;域,也就是说Q实际上不用可选择的域也不会花费你M资源?nbsp;

  作ؓ例子的一个单独的数据?nbsp;

让我们看看下面这个例子。我们用Foobar, Inc.的员工Fran Smith的LDAP记录。这个记录项的格式是LDIFQ用来导入和导出LDAP目录的记录项?nbsp;

dn: uid=fsmith, ou=employees, dc=foobar, dc=com 

objectclass: person 

objectclass: organizationalPerson 

objectclass: inetOrgPerson 

objectclass: foobarPerson 

uid: fsmith 

givenname: Fran 

sn: Smith 

cn: Fran Smith 

cn: Frances Smith 

telephonenumber: 510-555-1234 

roomnumber: 122G 

o: Foobar, Inc. 

mailRoutingAddress: fsmith@foobar.com 

mailhost: mail.foobar.com 

userpassword: {crypt}3x1231v76T89N 

uidnumber: 1234 

gidnumber: 1200 

homedirectory: /home/fsmith 

loginshell: /usr/local/bin/bash 

属性的值在保存的时候是保留大小写的Q但是在默认情况下搜索的时候是不区分大写的。某些特D的属性(例如QpasswordQ在搜烦的时候需要区分大写?nbsp;

让我们一点一点地分析上面的记录项?nbsp;

    dn: uid=fsmith, ou=employees, dc=foobar, dc=com 

q是Fran的LDAP记录的完整DNQ包括在目录树中的完整\径。LDAPQ和X.500Q用uidQUser IDQ,不要把它和UNIX的uidh؜淆了?nbsp;

objectclass: person 

objectclass: organizationalPerson 

objectclass: inetOrgPerson 

objectclass: foobarPerson 

    可以ZQ何一个对象根据需要分配多个对象类型。person对象cd要求cnQcommon nameQ和snQsurnameQ这两个域不能ؓI。persion对象cd允许有其它的可选域Q包括givenname、telephonenumberQ等{。organizational Personlperson加入更多的可选域QinetOrgPerson又加入更多的可选域Q包括电(sh)子邮件信息)。最后,foobarPerson是ؓFoobar定制的对象类型,加入了很多定制的属性?nbsp;

uid: fsmith 

givenname: Fran 

sn: Smith 

cn: Fran Smith 

cn: Frances Smith 

telephonenumber: 510-555-1234 

roomnumber: 122G 

o: Foobar, Inc. 

以前说过了,uid表示User ID。当看到uid的时候,在脑袋里想一?#8220;login"?nbsp;

    h意CN有多个倹{就象上面介l的QLDAP允许某些属性有多个倹{ؓ什么允许有多个值呢Q假定你在用公司的LDAP服务器查找Fran的电(sh)话号码。你可能只知道她的名字叫FranQ但是对人力资源处的人来说她的正式名字叫做Frances。因Z存了她的两个名字Q所以用M一个名字检索都可以扑ֈFran的电(sh)话号码、电(sh)子邮件和办公戉KP{等?nbsp;

mailRoutingAddress: fsmith@foobar.com 

mailhost: mail.foobar.com 

p现在大多数的公司都上|了QFoobar用Sendmail发送邮件和处理外部邮g路由信息。Foobar把所有用L邮g信息都存在LDAP中。最新版本的Sendmail支持q项功能?nbsp;

Userpassword: {crypt}3x1231v76T89N 

uidnumber: 1234 

gidnumber: 1200 

gecos: Frances Smith 

homedirectory: /home/fsmith 

loginshell: /usr/local/bin/bash 

    注意QFoobar的系l管理员把所有用L口o映射信息也都存在LDAP中。FoobarPersoncd的对象具有这U能力。再注意一下,用户口o是用UNIX的口令加密格式存储的。UNIX的uid在这里ؓuidnumber。提醒你一下,关于如何在LDAP中保存NIS信息Q有完整的一份RFC。在以后的文章中我会谈一谈NIS的集成?nbsp;

LDAP复制 

    LDAP服务器可以用基?#8220;?#8221;或?#8220;?#8221;的技术,用简单或Z安全证书的安全验证,复制一部分或者所有的数据?nbsp;

    例如QFoobar有一?#8220;公用?#8221;LDAP服务器,地址为ldap.foobar.comQ端口ؓ389。Netscape Communicator的电(sh)子邮件查询功能、UNIX?#8220;ph"命o要用到这个服务器Q用户也可以在Q何地Ҏ(gu)询这个服务器上的员工和客戯pM息。公司的主LDAP服务器运行在相同的计机上,不过端口h1389?nbsp;

    你可能即不想让员工查询资产管理或食谱的信息,又不惌信息技术h员看到整个公司的LDAP目录。ؓ了解册个问题,Foobar有选择地把子目录树从主LDAP服务器复制到“公用”LDAP服务器上Q不复制需要隐藏的信息。ؓ了保持数据始l是最新的Q主目录服务器被讄成即?#8220;?#8221;同步。这些种Ҏ(gu)主要是ؓ了方便,而不是安全,因ؓ如果有权限的用户x询所有的数据Q可以用另一个LDAP端口?nbsp;

    假定Foobar通过从奥克兰到欧z的低带宽数据的q接用LDAP理客户联系信息。可以徏立从ldap.foobar.com:1389到munich-ldap.foobar.com:389的数据复Ӟ象下面这P 

periodic pull: ou=asia,ou=customers,o=sendmail.com 

periodic pull: ou=us,ou=customers,o=sendmail.com 

immediate push: ou=europe,ou=customers,o=sendmail.com 

“?#8221;q接?5分钟同步一ơ,在上面假定的情况下够了?#8220;?#8221;q接保证MƧ洲的联pM息发生了变化?nbsp;
立即?#8220;?#8221;到Munich?nbsp;
用上面的复制模式Q用户ؓ了访问数据需要连接到哪一台服务器呢?在Munich的用户可以简单地q接到本地服?nbsp;
器。如果他们改变了数据Q本地的LDAP服务器就会把q些变化传到主LDAP服务器。然后,主LDAP服务器把q些变化 
“?#8221;回本地的“公用”LDAP服务器保持数据的同步。这Ҏ(gu)地的用户有很大的好处Q因为所有的查询Q大多数是读Q都在本地的服务器上q行Q速度非常快。当需要改变信息的时候,最l用户不需要重新配|客L的YӞ因ؓLDAP目录服务器ؓ他们完成了所有的数据交换工作?

]]>
cognos 安装文档http://www.tkk7.com/SIDNEY/archive/2009/09/02/293612.html渠上?/dc:creator>渠上?/author>Wed, 02 Sep 2009 08:21:00 GMThttp://www.tkk7.com/SIDNEY/archive/2009/09/02/293612.htmlhttp://www.tkk7.com/SIDNEY/comments/293612.htmlhttp://www.tkk7.com/SIDNEY/archive/2009/09/02/293612.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/293612.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/293612.html本节主要介绍Cognospȝ的安装,按照本手册的具体步骤安装Q如果没有分别写序号Q则是指那些lg可以一ơ安装?br /> 2Q? Netscape Directory Server的安装和配置
2Q?Q? Netscape Directory Server 4.12 的安?br /> 插入“PowerPlay Enterprise Server Supplementary Software”安装盘,q行光盘上的Netscape\Directory Server\NT\d412eiu.exe?br /> 如果在安装过E中提示域名错误Q则需要按照以下步骤纠正此错误。具体操作步骤如下:用右键单?#8220;我的?sh)?#8221;Q单?#8220;属?#8221;Q单?#8220;|络标识”标签Q单?#8220;属?#8221;Q单?#8220;其它”Q添?#8220;此计机的主DNS后缀”?br /> 详见《PowerPlay Enterprise Server Installation and Configuration Guide》page 153?br /> 2Q?Q? Netscape Directory Server 的配|?br /> 插入“PowerPlay Enterprise Server”安装盘,在AutoRun的安装选择对话框中选择“Configure a Directory Server”q行安装?br /> 在Directory Servercd中,选择“Netscape 3.X/4”Q?br /> 在Directory Server配置对话框中Q输?#8220;Directory Server Computer”Q?#8220;Password”Q?#8220;Base Distinguished Name(DN)”?#8220;Organization”的信息,其余可用~省信息。其中,?#8220;Directory Server Computer”中,输入LDAP服务器(本机Q的机器名,?#8220;Base Distinguished Name(DN)”中可输入“o=gdb”Q在“Organization”中可输入“gdb”?br /> 详见《PowerPlay Enterprise Server Installation and Configuration Guide》page 60?br /> 2Q? Impromptu Web Reports 6.0的安装和配置
插入“Impromptu Web Reports”安装盘,在AutoRun的安装选择对话框中选择“Install Cognos Impromptu Web Reports”完成安装?br /> 2Q?Q? Data Store 的安?br /> 在安装方式中选择“custom”安装Q在安装lg选择对话框中选择“Data Store”q行安装Q?br /> 在创建data store存放位置的画面,单击“+”创徏一个新的共享名Q徏议在“share name”中输?#8220;iwr_db”Q在“path”中输?#8220;<drive letter>:\program files\cognos\cer1\database”?br /> 详见《Impromptu Web Reports Installation and Configuration》page 43?br /> 2Q?Q? Impromptu Web Reports Server 的安?br /> 在安装方式中选择“custom”安装Q在安装lg选择对话框中选择“Server”q行安装?br /> 详见《Impromptu Web Reports Installation and Configuration》page 46?br /> 备注Q安装过E会提示输入windowspȝ中安装此产品的用L密码。此Ӟ输入登陆windows用户密码。需要注意的是:以后如果理员更改该用户的密码后Q必M在服?#8220;理工具Q?gt;服务”中修改两Ҏ(gu)务:Cognos Communication Service (cer1)和Impromptu Web Service Manager (CER1)中的登陆用户的密码,否则服务无法启动?br /> 2Q?Q? GateWay 的安?br /> 在安装方式中选择“custom”安装Q在安装部g选择对话框中选择“GateWay”q行安装?br /> 详见《Impromptu Web Reports Installation and Configuration》page 51?br /> 2Q?Q? Impromptu Web Reports Administration、IWR Samples、IWR Online Books的安?br /> 在安装方式中选择“custom”安装Q在安装lg选择对话框中选择“IWR Administration”?#8220;IWR Samples”?#8220;IWR Online Books”q行安装?br /> 详见《Impromptu Web Reports Installation and Configuration》page 31、page 57?br /> 2Q? PowerPlay Enterprise Server 6.6的安?br /> 插入“PowerPlay Enterprise Server”安装盘,在AutoRun的安装选择对话框中选择“Install Cognos PowerPlay Enterprise Server 6.6”完成安装?br /> 2Q?Q? Access Manager Admin Tools、Access Manager Trusted Signon SDK、Common Logon Server 、Ticket Server的安?br /> 在安装方式中选择“custom”安装Q在安装lg选择对话框中选择“Access Manager Admin Tools”Q不选择“Configure a Directory Server”Q?#8220;Access Manager Trusted Signon SDK”?#8220;Common Logon Server” ?#8220;Ticket Server”q行安装?br /> 2Q?Q? 配置Access Manager Administration
按照以下步骤Q完成Access Manager Administration的配|?br /> 1) 启动Access Manager AdministrationQ?br /> 2) ?#8220;Authentication Information”面板中,单击“Directory Servers”文g夹;
3) ?#8220;Action”菜单中,单击“Add Connection”Q?br /> 4) ?#8220;General”标签中,输入“Host”?#8220;Base Distinguished Name”的内容,其余的输入项用缺省倹{在“Host”输入中输入LDAP服务器的机器名,?#8220;Base Distinguished Name”中输入LDAP服务器中的配|,例如o=gdb,c=cnQ单?#8220;Test”Q如果出?#8220;the directory server is responding”的信息,则表明测试正;
5) 单击“Runtime Credentials”标签Q在“Runtime Administrator Distinguished Name(DN)”中,输入登陆到目录服务器的用户名Q例如Directory ManagerQ在“Runtime Administrator Password”中,输入用户的密码,单击“Log On”Q再单击“Test”Q如果出?#8220;the credentials are valid”的信息,则表明测试正;
6) 单击“Ticket Server”标签Q单?#8220;Test”Q如果出?#8220;the ticket server is responding”的信息,则表明测试正?br /> 详见《Impromptu Web Reports Installation and Configuration》page 41?br /> 2Q?Q? 配置Access Manager Configuration
按照以下步骤Q完成Access Manager Configuration的配|?br /> 1) 启动Access Manager Configuration WizardQ?br /> 2) 在第一个窗口单?#8220;下一?#8221;Q?br /> 3) 单击“Custom”Q再单击“下一?#8221;Q?br /> 4) 选择“Directory Server Configuration”Q再单击“下一?#8221;Q?br /> 5) 在对话框中输入以下信息:
HostQ输入LDAP服务器的机器名字
Base Distinguished Name(DN)Q输入LDAP服务器中的配|,例如o=gdb,c=cn
假如在对话框的底部出?#8220;directory server is responding”的信息,则表明配|正;
6) 单击“下一?#8221;Q?br /> 7) 选择“(Use the Directory Server Default Namespace)”Q在单击“下一?#8221;Q?br /> 8) 选择“Directory Server”Q作为缺省的验证源,在单?#8220;下一?#8221;Q?br /> 9) 选择“Accept The Setting”Q再单击“完成”Q?br /> 10) 关闭Access Manager Configuration Wizard?br /> 详见《Impromptu Web Reports Installation and Configuration》page 49?br /> 2Q?Q? PowerPlay Enterprise Server、PowerPlay Enterprise Server Administration 的安?br /> 在安装方式中选择“custom”安装Q在安装lg选择对话框中选择“PowerPlay Enterprise Server”?#8220;PowerPlay Enterprise Server Administration”q行安装?/p>

2Q?Q? 配置Web Server
建立Web Server ?#8220;cognos”?#8220;cognos/cgi-bin”?#8220;cognos/help”?#8220;cognos/ppwb” 4个虚拟目录,一般情况下Q?#8220;cognos”?#8220;cognos/cgi-bin”?#8220;cognos/help”q?个虚拟目录已l在安装q程中徏立,实际上,pȝ理员只需要手工徏?#8220;cognos/ppwb”q个虚拟目录?br /> 建立“cognos/ppwb”虚拟目录的步骤如下:
1) 在Windows 2000中,单击“开?#8221;?#8220;讄”?#8220;控制面板”Q双?#8220;理工具”Q双?#8220;Internet服务理?#8221;Q?br /> 2) 在左辚w板中Q展开“Internet信息服务”Q再展开以本服务器的机器名ؓ名字的文件夹Q?br /> 3) 展开“默认web站点”Q再展开“cognos”文g夹;
4) 用右键单?#8220;cognos”Q单?#8220;新徏”Q再单击“虚拟目录”Q?br /> 5) 单击“下一?#8221;Q?br /> 6) 输入虚拟目录别名“ppwb”Q单?#8220;下一?#8221;Q?br /> 7) 在目录中输入“<driver letter>:\program files\cognos\cer1\webcontent\ppwb”Q单?#8220;下一?#8221;Q?br /> 8) 只选取“d”权限Q单?#8220;下一?#8221;Q?br /> 9) 单击“完成”?br /> 其余三个虚拟目录的设|列表如下:
虚拟目录别名 目录 权限
cognos \program files\cognos\cer1\webcontent ?br /> cognos/cgi-bin \program files\cognos\cer1\cgi-bin 执行
cognos/help \program files\cognos\cer1\documentation\html ?br /> 详见《PowerPlay Enterprise Server Installation and Configuration Guide》page 110?br /> 2Q?Q? Upfront、Upfront Server Administration 的安?br /> 在安装方式中选择“custom”安装Q在安装lg选择对话框中选择“Upfront”?#8220;Upfront Server Administration”q行安装?br /> 2Q? mpromptu 6.0 Admin Edtion的安?br /> 插入“Impromptu 6.0 Administrator Edition”的安装盘Q在AutoRun的安装选择对话框中选择“Install Impromptu 6.0 Administrator Edition”完成安装?br /> Impromptu Administratior、User Define Functions、PowerPrompts 的安?br /> 在安装方式中选择“custom”安装Q在安装lg选择对话框中选择“Impromptu Administrator”?#8220;User Define Functions”?#8220;PowerPrompts”q行安装?br /> 2Q? Cognos Distribute Shuttle Builder的安?br /> 插入“Impromptu 6.0 Administrator Edition”的安装盘Q在AutoRun的安装选择对话框中选择“Cognos Distribute Shuttle Builder”q行安装?br /> 详见《Impromptu Web Reports Installation and Configuration》page 23?br /> 2Q? PowerPlay Transformer Server 6.61的安?br /> 插入“PowerPlay Transformer Server 6.6”的安装盘Q在AutoRun的安装选择对话框中选择“PowerPlay Transformer Server 6.61”q行安装?br /> 在安装方式中选择“custom”安装Q在安装lg对话框中选择“PowerPlay for Windows”?#8220;PowerPlay for Excle、PowerPlay Transformer”?#8220;Schedule”?#8220;CognosScript Editor”q行安装?br /> 2Q? Adobe Acrobat Reader 的安?/p>

2Q?Q? Adobe Acrobat Reader 4.05的安?br /> 插入“Impromptu Web Reports”的安装盘Q运行光盘中?#8220;\Adobe\ar405eng.exe”?br /> 详见《Impromptu Web Reports Installation and Configuration》page 24?/p>

2Q?Q? Adobe Acrobat Reader 体汉字的安装
插入“Impromptu Web Reports”的安装盘Q运行光盘中?#8220;\Adobe\chsfont.exe”?br /> 2Q? ȀzImpromptu Web Reports 的Report Server
启动Server AdministrationQ展开“Report Servers”Q单击要Ȁzȝ服务器,?#8220;Actions”菜单中选择“Enable”Q激zȝ应的 Report Server?br /> 2Q? 在Upfront中添加server
启动Upfront Server AdministrationQ从“Server”菜单中选择“Add Server”Q输入服务器的名字,单击“ok”?/p>


本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/s_sword/archive/2007/05/18/1614796.aspx



]]>
Linux 文g内容查看工具介绍 [转]http://www.tkk7.com/SIDNEY/archive/2009/08/04/289874.html渠上?/dc:creator>渠上?/author>Tue, 04 Aug 2009 13:53:00 GMThttp://www.tkk7.com/SIDNEY/archive/2009/08/04/289874.htmlhttp://www.tkk7.com/SIDNEY/comments/289874.htmlhttp://www.tkk7.com/SIDNEY/archive/2009/08/04/289874.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/289874.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/289874.html 

linux   2009-07-22 11:43   阅读1   评论0  
]]>
NET开发h员必知的八个|站(?http://www.tkk7.com/SIDNEY/archive/2009/06/29/284553.html渠上?/dc:creator>渠上?/author>Mon, 29 Jun 2009 02:38:00 GMThttp://www.tkk7.com/SIDNEY/archive/2009/06/29/284553.htmlhttp://www.tkk7.com/SIDNEY/comments/284553.htmlhttp://www.tkk7.com/SIDNEY/archive/2009/06/29/284553.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/284553.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/284553.html.Net独家Q?NET开发h员必知的八个|站

本文发表?2009-06-24 15:55 | 20244ơ阅?| 共有评论(89)?发表评论

关键词:.Net  | 感谢ydj9931的提?nbsp;| 收藏q篇新闻

当前全球有数百万的开发h员在使用微Y?NET技术。如果你是其中之一Q或者想要成为其中之一的话Q我下面要列出的每一个站炚w应该是你的最爱,都应该收藏到书签中去?/p>

对于不熟(zhn)?NET技术的朋友Q需要说明一下,.NET提供了一个^台和一些相应的工具Q编Eh员可以用它们来在开发Windows桌面Q互联网Q甚x手持Ud讑֤上构建极富交互性的应用。很有可能你最喜欢的网站之一是用微软的ASP.NET技术构建的?/p>

1.CodeProject



q些q来我在q个站点下蝲了数不清的代码。该站点中的快速有效的文章都是q正的开发h员撰写的Q他们可以给你关于特定编E问题的直接帮助Q而文章中L会包含一个代码下载的链接?/p>

提交文章和代码的开发h员不会得CQ何报酬,他们只是Z得到C֌的认同。这个站点不仅包?NET和Windowsq_的内容,所以对于想要扩展自q技术视野的开发h员来_q儿也是个很好的d?/p>

2.DotNetNuke



DotNetNuke是一个开源的框架Q开发h员可以下载它q用它来构徏自己的ASP.NET|络应用。如果你是一?NET开发h员而你q没有下载过q些代码来读一ȝ话,你真的需要马上去下蝲它了?/p>

此Y件最q几q已l经q了数次q代q被证实其中含有很多最有效率的~码最?jng)_c尽此站点有一个收费的专业版,但是仍然有一个可以免费下载的C֌版本Q而在该站点免Ҏ(gu)册来获得下蝲途径也是非常值得的?/p>

3.4GuysFromRolla

如果你是一名web开发h员的话,老实_多数.NET开发h员都是,那么q个站点你一定要讉K。此站点包含有你需要了解的关于ASP.NET的各斚w的文章,甚至q包含有很多针对ASP开发者的信息Q信不信׃Q仍然有很多开发h员在使用ASPQ?/p>

多年来,我已l通过阅读此站点的论坛的帖子解决了无数的问题?/p>

4.DevSource



你从上图可以看出来Q这个在U开发杂志是由微软提供的Q不q请别因此而心怀成见。我强烈订阅此站点的免费每周新闻时讯Q它可以让你最快速的了解C微Y传出来的大事情?/p>

你也应该讉K一?a title="DevLife" target="_blank">DevLife 论坛?/p>

5.DevX

q是另一个在U开发杂志,它ƈ不仅仅关注于微Y的技术,它們֐于展CZ些很有趣的非L的技术?/p>

我本人曾l给他们写过几篇文章Q因Z们是为数不多的几安要关于机器h学和演讲技术的|站之一。此站点每天的文章覆盖了从传l的.NET到VB开发的所有内宏V?/p>

6.MSDN Magazine



MSDN Magazine之于开发h员就相当于《自然》杂志之于科学家。它包含了所有开发h员都应该遵守的标准。他们非怸格地选取内容。它所包含的文章比我上面提到的站点的文章都要长而且通常更有深度。你可以在打C前很肯定的知道这些文章都是经q了_挑l选的?/p>

7.Channel9



喜欢看很L技术的视频的朋友们一定要看看q个微Y资源的站炏VChannel 9的团队经常在微Y园区中采访很多开发团队ƈ会时帔R露一些最新的软g和技术的讯息?/p>

不仅仅是采访微Y的工作h员,Channel 9也会和微软之外的行业权威对话?/p>

8.Scott Guthrie的博?/a>



Scott Guthrie是微软的开发工L企业副总裁Q他的博客经常更斎ͼ上面会有一些别处看不到的公告?/p>

Scott的博客内容覆盖从.NET基础cd到Silverlight的所有内宏V如果你惌让你朋友惊讶于你g和微软有某些内线联系的话Q那p问这个博客吧?/p>



]]>
l模?/title><link>http://www.tkk7.com/SIDNEY/archive/2009/06/28/284479.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Sun, 28 Jun 2009 07:09:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2009/06/28/284479.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/284479.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2009/06/28/284479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/284479.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/284479.html</trackback:ping><description><![CDATA[<h2 id="sii-cubeschema-26850">l模?/h2> <p>数据库由一个或多个表组成,数据库中所有表之间的关pȝUCؓ数据?span class="italic">模式</span>。虽然有许多不同的模式设计,但是用于查询历史数据的数据库通常被设|ؓhl模式设计(通常是星型模式或雪花模式Q。采用维模式既有许多历史斚w的原因也有许多实跉|面的原因Q但是,它们在决{支持关pL据库斚w的应用的增长是由两项主要的益处推动的Q?/p> <ul> <li>能够形成用来应答业务问题的查询。通常Q查询根据若q个业务l计某些业l量度? <li>在大部分 RDBMS 供应商用的 SQL 语言中Ş成这些查询必需l模式?/li> </ul> <p>l模式在物理上将用于量化业务的量度(也称?span class="italic">事实</span>Q与用于描述业务和对业务q行分类的描q性元素(也称?span class="italic">l?/span>Q分隔开。DB2 Alphablox 多维体要求底层数据库使用l模式;卻I在物理上必须事实数据与l数据分隔开Q至位于不同的列中Q。通常Q维模式h星型模式形式、雪花模式Ş式或者这两种模式的某U؜合Ş式。尽不是常见的情况Q但l模式也可以h单个表的形式Q即事实和维仅仅是位于表的不同的列中?/p> <a name="wq27"></a> <div id="a2wucmi" class="notetitle" id="wq27">?</div> <div id="cy2cekw" class="notebody">如果数据库不W合l模式,则可以在数据库中创徏视图以创Z?#8220;虚拟?#8221;l模式以便与 DB2 Alphablox 多维体配合用?/div> <p>本节描述星型模式和雪花模式以及在q些模式中表CZ务层ơ结构的方式。包括下列各节:</p> <ul> <li><a >星型模式和雪花模?/a> <li><a >层次l构</a></li> </ul> <p>要彻底了解维模式设计及其所有分支的背景信息Q请阅读?Ralph Kimball ~著q由 John Wiley and Sons, Inc. 出版?<cite>The Data Warehouse Toolkit</cite>?/p> <a id="idx23" name="idx23"></a><a id="idx24" name="idx24"></a><a id="idx25" name="idx25"></a><a id="idx26" name="idx26"></a><a name="sii-cubeschema-32488"></a> <h3 id="sii-cubeschema-32488">星型模式和雪花模?/h3> <p>星型模式和雪花模式设计是用来事实和l分隔到不同的表中的机制。雪花模式将层次l构的不同别进一步分隔到不同的表中。在M一U模式设计中Q每个表都通过<span id="yssiqmm" class="italic">主键Q外键关p?/span>与另一表相兟뀂在关系数据库中Q用主键/外键关系来定义各个表之间的多对一关系?/p> <a id="idx27" name="idx27"></a><a id="idx28" name="idx28"></a><a name="wq28"></a> <h4 id="wq28">主键</h4> <p><span id="0ccmeuw" class="italic">主键</span>是表中的一个列或一l列Q它们的值唯一地标识表中的一行。关pL据库设计成通过仅允许表中的一行具有给定的主键值来强制实施主键的唯一性?/p> <a id="idx29" name="idx29"></a><a id="idx30" name="idx30"></a><a name="wq29"></a> <h4 id="wq29">外键</h4> <p><span id="4gussuc" class="italic">外键</span>是表中的一个列或一l列Q它们的g另一个表中的主键值相对应。ؓ了添加具有给定外键值的行,在相关的表中必须存在h相同主键值的行?/p> <p>在星型模式或雪花模式中,表之间的主键Q外键关p(有时UCؓ多对一关系Q表C?RDBMS 中将相关的表q接CL路径。这些连接\径是形成对历史数据执行的查询的基。要了解有关多对一关系的更多信息,请参?a >多对一关系</a>?/p> <a id="idx31" name="idx31"></a><a id="idx32" name="idx32"></a><a name="sii-cubeschema-17151"></a> <h4 id="sii-cubeschema-17151">事实?/h4> <p><span id="a4muuum" class="italic">事实?/span>是星型模式或雪花模式中的一个表Q它存储用于量度业务Q如销售量、商品成本或利润Q的事实。事实表q包含指向维表的外键。这些外键事实表中的每个数据行与其对应的维和别相兟?/p> <a id="idx33" name="idx33"></a><a id="idx34" name="idx34"></a><a name="wq30"></a> <h4 id="wq30">l表</h4> <p><span id="kemeumu" class="italic">l表</span>是星型模式或雪花模式中的一个表Q它存储用来描述l的各个斚w的属性。例如,旉表存储时间的各个斚wQ如q䆾、季度、月份和天。事实表的外键引用多对一关系中的l表的主键?/p> <a name="wq31"></a> <h4 id="wq31">星型模式</h4> <p>下图昄了具有单个事实表?4 个维表的星型模式。星型模式可以具有Q意数目的l表。用于连接表的链接末分叉指示了事实表与每个维表之间的多对一关系?/p> <a name="wq32"></a> <div id="eooyqwy" class="fignone" id="wq32"> <div id="osq2aaa" class="mmobjcenter"><img alt="此图昄了一个星型模式,在此模式的中央有单个事实表,该事实表带有指向周围的多个维表的链接。从事实表到l表的链接末分叉指示多对一关系? src="http://publib.boulder.ibm.com/db2blox/82/zh_cn/cube/cubeschemaa_v2.gif" /></div> </div> <a name="wq33"></a> <h4 id="wq33">雪花模式</h4> <p>下图昄了具有两个维的雪花模式,其中Q每个维都具?3 个别。雪花模式可以具有Q意数目的l_q且每个l可以具有Q意数目的U别?/p> <a name="wq34"></a> <div id="ceemwgw" class="fignone" id="wq34"> <div id="eq4wqqy" class="mmobjcenter"><img alt="" src="http://publib.boulder.ibm.com/db2blox/82/zh_cn/cube/cubeschemaa3_v2.gif" /></div> </div> <p>要了解有关维的不同别如何Ş成层ơ结构的详细信息Q请参阅<a >层次l构</a>?/p> <a id="idx35" name="idx35"></a><a id="idx36" name="idx36"></a><a name="sii-cubeschema-16694"></a> <h3 id="sii-cubeschema-16694">层次l构</h3> <p>层次l构是一l相互之间具有多对一关系的别,q且q一l别共同构成维。在关系数据库中Q层ơ结构的不同U别既可以存储在单个表中Q如在星型模式中Q,也可以存储在不同的表中(如在雪花模式中)?/p> <a id="idx37" name="idx37"></a><a name="sii-cubeschema-29251"></a> <h4 id="sii-cubeschema-29251">多对一关系</h4> <p>多对一关系是指一个实体(通常是一个列或一l列Q包含的值引用另一个具有唯一值的实体Q一个列或一l列Q。在关系数据库中Q这些多对一关系通常是由外键Q主键关pd制实施的Qƈ且,q些关系通常是事实表与维表之间以及层ơ结构中的别之间的关系。此关系通常用来描述分类或分l。例如,在具有表 <span id="24ogeow" class="italic">Region</span>?span class="italic">State</span> ?<span id="eoggwgg" class="italic">City</span> 的地理模式中Q在l定的地区有许多州,但没有Q何州同时位于两个地区。同P对于城市Q一座城市仅位于一个州Q同名但位于多个州的城市的处理方式必ȝ有不同)。关键在于每座城市都刚好位于一个州Q但一个州可以有许多城市,因而符?#8220;多对一”q个术语?/p> <p>层次l构的不同元素(即别)在子代别与父代U别之间必须h多对一关系Q而无层次l构在物理上是以星型模式q是以雪花模式表C的Q即Q数据必遵守这些关pR强制实施多对一关系所需的干净数据是维模式的一w要特征。此外,q些关系使得有可能根据关pL据创?DB2 Alphablox 多维体?br /> <br /> http://publib.boulder.ibm.com/db2blox/82/zh_cn/cube/cube13.htm<br /> </p> <img src ="http://www.tkk7.com/SIDNEY/aggbug/284479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2009-06-28 15:09 <a href="http://www.tkk7.com/SIDNEY/archive/2009/06/28/284479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server的安全机制及DBA如何理 http://www.tkk7.com/SIDNEY/archive/2009/06/09/280807.html渠上?/dc:creator>渠上?/author>Tue, 09 Jun 2009 03:03:00 GMThttp://www.tkk7.com/SIDNEY/archive/2009/06/09/280807.htmlhttp://www.tkk7.com/SIDNEY/comments/280807.htmlhttp://www.tkk7.com/SIDNEY/archive/2009/06/09/280807.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/280807.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/280807.html SQL Server的安全机制及DBA如何理 作?j14n 旉/2006-11-16 11:26:00 cd/黑客攻防   标签Q?/td> 一 安全体系
d、安全̎P用户Q、角色和l是 Microsoft? SQL Server? 2000 安全机制的基。连接到 SQL Server 的用户必M用特定的d标识W?nbsp;(ID) 标识自己。因此,用户只能查看l授权可以查看的表和视图Qƈ且只能执行经授权可以执行的存储过E和理功能。在SQL Server中,loginQ登录)是用于进入服务器时进行n份识别的Q每个user和login相关联,保证能进入服务器Q每个user属于各个roleQ拥有相应的数据库权限,整个体系如图Q?nbsp;

?nbsp;pȝ存储q程和命?br /> 1、存储过E:
  dQ?nbsp; sp_grantlogin, sp_revokelogin, sp_denylogin 
            sp_addlogin, sp_droplogin 
            sp_helplogins 
  用户Q?nbsp; sp_grantdbaccess, sp_revokedbaccess 
            sp_adduser, sp_dropuser (q两个SP是ؓ了向后兼容,请用前2个代?
            sp_helpuser 
  角色Q?nbsp; 
  服务器角?nbsp; sp_addsrvrolemember, sp_dropsrvrolemember 
  数据库角?nbsp; sp_addrole, sp_droprole 
                 sp_addapprole, sp_dropapprole 
                 sp_helprole 
                 sp_addrolemember, sp_droprolemember 
                 sp_helprolemember  
2、命令:grant, revoke, deny
?nbsp;固定角色
1、固定服务器角色Q?br />       

固定服务器角?br /> 描述

sysadmin 可以?nbsp;SQL Server 中执行Q何活?nbsp;
serveradmin 可以讄服务器范围的配置选项Q关闭服务器 
setupadmin 可以理链接服务器和启动q程 
securityadmin 可以理d?nbsp;CREATE DATABASE 权限Q还可以d错误日志和更改密?nbsp;
processadmin 可以理?nbsp;SQL Server 中运行的q程 
dbcreator 可以创徏、更改和除去数据?nbsp;
diskadmin 可以理盘文g 
bulkadmin 可以执行 BULK INSERT 语句 



2、固定数据库角色Q?br />

固定数据库角?br /> 描述

db_owner 在数据库中有全部权限 
db_accessadmin 可以d或删除用?nbsp;ID 
db_securityadmin 可以理全部权限、对象所有权、角色和角色成员资格 
db_ddladmin 可以发出 ALL DDLQ但不能发出 GRANT、REVOKE ?nbsp;DENY 语句 
db_backupoperator 可以发出 DBCC、CHECKPOINT ?nbsp;BACKUP 语句 
db_datareader 可以选择数据库内M用户表中的所有数?nbsp;
db_datawriter 可以更改数据库内M用户表中的所有数?nbsp;
db_denydatareader 不能选择数据库内M用户表中的Q何数?nbsp;
db_denydatawriter 不能更改数据库内M用户表中的Q何数?nbsp;



?nbsp;权限
包括两种cd的权限,卛_象权限和语句权限Q?br />

对象操作权限ȝ

?nbsp;SELECT, INSERT, UPDATE, DELETE, REFERENCE 
视图 SELECT, UPDATE, INSERT, DELETE 
存储q程 EXECUTE 
函数 表值函?nbsp;SELECT, INSERT, UPDATE, DELETE, REFERENCE 
标量值函?nbsp;EXECUTE ?nbsp;REFERENCES 
内嵌表函?nbsp;EXECUTE ?nbsp;REFERENCES 
?nbsp;SELECT, UPDATE  


注意QREFERENCE充许在GRANT、DENY、REVOKE语句中向有外键参照表中插入一行数据?br />

语句权限ȝ

CREATE DATABASE 创徏数据?nbsp;
CREATE TABLE 创徏?nbsp;
CREATE VIEW 创徏视图 
CREATE RULE 创徏规则 
CREATE DEFAULT 创徏~省 
CREATE PROCEDURE 创徏存储q程 
BACKUP DATABASE 备䆾数据?nbsp;
BACKUP LOG 备䆾事务日志 



?nbsp;实用脚本
在sql server中,d到某数据库必L两个条gQ?nbsp;
1、ؓSQL Server建立一个loginQ?br /> 2、ؓ该login在数据库中徏立userQ给该用户关联role
/* DBA 的新增登录授权脚?/ 
USE my_database
GO
--1. 新徏d
IF NOT EXISTS(SELECT 1 FROM master.dbo.syslogins WHERE name = 'wh_login' AND loginname = N'wh_login')
EXEC sp_addlogin 'wh_login', '123', 'plm25'
GO
--2. 新徏用户
IF NOT EXISTS(SELECT * FROM sysusers WHERE name = N'lewis_user')
EXEC sp_grantdbaccess 'wh_login', 'lewis_user'
GO
--3. 分配权限
--语句权限
GRANT CREATE TABLE TO lewis_user
--对象权限
GRANT SELECT ON fb_app_module TO lewis_user
--授予所有权?br /> GRANT ALL TO lewis_user
--4. 授予角色
EXEC sp_addrolemember N'db_datareader', N'lewis_user' 
EXEC sp_addrolemember N'db_datawriter', N'lewis_user' 
EXEC sp_addrolemember N'db_accessadmin', N'lewis_user' 
EXEC sp_addrolemember N'db_ddladmin', N'lewis_user'   --建立存储q程权限
--5. 更改d的默认数据库
EXEC sp_defaultdb @loginame = N'login',  @defdb = N'default_DB_name'
--6. 更改d的默认语a
EXEC sp_defaultlanguage @loginame = N'login',  @language = N' french' 

/*DBA 的删除登录授权脚?/
--1. 拒绝授权
REVOKE SELECT  ON [dbo].[fb_app_module] TO [lewis_user] CASCADE
REVOKE CREATE TABLE TO lewis_user
EXEC sp_droprolemember N'db_datareader', N'lewis_user' 
--不能更改 public 角色的成员资根{也不需要移除?br /> --2. 删除用户
IF EXISTS(SELECT * FROM sysusers WHERE name = N'lewis')
EXEC sp_revokedbaccess 'lewis_user'
GO
--3. 删除d
IF EXISTS(SELECT 1 FROM master.dbo.syslogins WHERE name = 'wh_login' AND loginname = N'wh_login')
EXEC sp_droplogin 'wh_login'
GO
/*DBA 的查看授权脚?/
--1、查看服务器的登?br /> sp_helplogins 查看login和user
SELECT * FROM master.dbo.syslogins WHERE loginname = @login_name
--2、查看数据库的用?br /> sp_helpuser

SELECT * FROM dbo.sysusers where issqlrole = 1 /*数据库角?/
SELECT * FROM dbo.sysusers where islogin = 1  /*d*/
SELECT * FROM dbo.sysusers where issqluser = 1 /*SQL Server用户*/
SELECT * FROM dbo.sysusers where isntname = 1 /*NT用户*/
SELECT * FROM dbo.sysusers where isapprole = 1 /*服务器角?/
--3、查看用h什么权限和角色????
sp_helprolemember 'db_datareader'
--4、用h有的数据库中的对????
--5、查看用戗登录、角色等l合信息
select DISTINCT username = o.name, 
loginname = (case when (o.sid = 0x00) then NULL 
       else l.loginname end), 
rolegroup = user_name(o.gid), 
userID = o.uid, 
o.hasdbaccess, 
o.uid
from dbo.sysusers o left join master.dbo.syslogins l on l.sid = o.sid 
where ((o.issqlrole != 1 and o.isapprole != 1) or (o.sid = 0x00) and o.hasdbaccess = 1)
and o.isaliased != 1  and (o.name = N'@your_user_name')
?nbsp;CZ
-- ===================================================
-- Procedure Name: fb_plm_access_control
-- Function      : set PLM Suite application user
-- Failure return: 1
-- Success return: 0
--
-- Parameters    :
-- @login_name   : application user name, create a account if the user does not exists, otherwise remain it.
-- @password     : for the exists user, if the password is null, then remain its old password,
--               : for the new user, it can not be null.
-- @db_name      : PLM Suite database name
-- ===================================================
IF EXISTS (select * from sysobjects where id = object_id(N'fb_plm_access_control') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE fb_plm_access_control
GO

CREATE PROCEDURE fb_plm_access_control
        (
        @login_name NVARCHAR(100),
        @password NVARCHAR(100) = null,
        @db_name NVARCHAR(100)
        )
--WITH ENCRYPTION
AS
DECLARE @result   INT
DECLARE @user_exists  INT
DECLARE @execute_sp_role NVARCHAR(100)
DECLARE @create_table_role NVARCHAR(100)
DECLARE @object_name  NVARCHAR(120)
DECLARE @object_type  NVARCHAR(10)
DECLARE @sql   VARCHAR(200)
DECLARE @error_msg  VARCHAR(100)
BEGIN
-- check input paramters.
IF (@login_name IS NULL) OR (LTRIM(@login_name) = '') OR (lower(@login_name) = 'sa')
  BEGIN
   RAISERROR ('The login_name can not be null or sa.' , 16, 1) WITH NOWAIT
   RETURN 1
  END
IF NOT EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = @db_name)
  BEGIN
   SET @error_msg = 'The database ' + @db_name + ' does not exits.'
   RAISERROR (@error_msg, 16, 1) WITH NOWAIT
   RETURN 1
  END

-- if user does not exits, create it
IF NOT EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = @login_name)
  BEGIN
   SET @user_exists = 0
   IF (@password IS NULL) OR (@password = '')
    BEGIN
     RAISERROR ('For new application user, the password can not be null.' , 16, 1) WITH NOWAIT
     RETURN 1
    END
   EXEC sp_addlogin @loginame = @login_name, @passwd = @password, @defdb = @db_name, @deflanguage = @@language
   IF @@ERROR <> 0
    RETURN 1
  END
ELSE
  BEGIN
   SET @user_exists = 1
   IF (@password IS NOT NULL) AND (LTRIM(@password)<>'')
    BEGIN
     EXEC sp_password @old = null, @new = @password, @loginame = @login_name
     IF @@ERROR <> 0
      RETURN 1
    END
  END
  
-- create the execute sp role if it does not exists
SET @execute_sp_role = N'db_procexecutor'
IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = @execute_sp_role AND issqlrole = 1)
  BEGIN
   EXEC sp_addrole  @rolename = @execute_sp_role 
   IF @@ERROR <> 0
    RETURN 1
  END
  
-- create the create table role if it does not exists
SET @create_table_role = N'db_createtable'
IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = @create_table_role AND issqlrole = 1)
  BEGIN
   EXEC sp_addrole  @rolename = @create_table_role 
   IF @@ERROR <> 0
    RETURN 1
  END

-- grant privilege to the role
DECLARE cur_sp_fun CURSOR 
  FAST_FORWARD 
  FOR 
  SELECT name, xtype
  FROM   sysobjects 
  WHERE  xtype in (N'P', N'FN', N'IF', N'TF')
  AND   uid = (select uid from sysusers where name = USER_NAME()) 
OPEN cur_sp_fun
FETCH NEXT FROM cur_sp_fun INTO @object_name, @object_type
WHILE @@FETCH_STATUS = 0
  BEGIN
   IF @object_type = N'P'
    BEGIN
    SET @sql='GRANT EXECUTE ON '+@object_name+' TO '+@execute_sp_role
    END
   IF @object_type = N'FN'
    BEGIN
    SET @sql='GRANT REFENENCES ON '+@object_name+' TO '+@execute_sp_role
    SET @sql=' GRANT EXECUTE ON '+@object_name+' TO '+@execute_sp_role
    END
   IF @object_type IN (N'IF',N'TF')
    BEGIN
    SET @sql='GRANT SELECT ON '+@object_name+' TO '+@execute_sp_role
    END
   EXEC (@sql)
   IF @@ERROR <> 0
    BEGIN
     SET @result = 1
     BREAK
    END
   FETCH NEXT FROM cur_sp_fun INTO @object_name, @object_type
  END
CLOSE cur_sp_fun
DEALLOCATE cur_sp_fun
IF @result = 1
  RETURN 1
  
SET @sql = 'GRANT CREATE TABLE TO ' + @create_table_role
EXEC (@sql)
IF @@ERROR <> 0
  RETURN 1

-- grant access database privilege to application user
IF @user_exists = 1
  EXEC sp_revokedbaccess @name_in_db = @login_name
IF @@ERROR <> 0
  RETURN 1

EXEC sp_grantdbaccess @loginame = @login_name, @name_in_db = @login_name
IF @@ERROR <> 0
  RETURN 1
-- grant role to application user
EXEC sp_addrolemember @rolename = N'db_datareader', @membername = @login_name
IF @@ERROR <> 0
  RETURN 1

EXEC sp_addrolemember @rolename = N'db_datawriter', @membername = @login_name
IF @@ERROR <> 0
  RETURN 1
  
EXEC sp_addrolemember @rolename = N'db_datawriter', @membername = @login_name
IF @@ERROR <> 0
  RETURN 1

EXEC sp_addrolemember @rolename = @create_table_role, @membername = @login_name
IF @@ERROR <> 0
  RETURN 1

EXEC sp_addrolemember @rolename = @execute_sp_role, @membername = @login_name
IF @@ERROR <> 0
  RETURN 1

RETURN 0
END
GO

]]>
SQL SERVER事务处理Q{Q?/title><link>http://www.tkk7.com/SIDNEY/archive/2009/05/19/271599.html</link><dc:creator>渠上?/dc:creator><author>渠上?/author><pubDate>Tue, 19 May 2009 14:12:00 GMT</pubDate><guid>http://www.tkk7.com/SIDNEY/archive/2009/05/19/271599.html</guid><wfw:comment>http://www.tkk7.com/SIDNEY/comments/271599.html</wfw:comment><comments>http://www.tkk7.com/SIDNEY/archive/2009/05/19/271599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SIDNEY/comments/commentRss/271599.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SIDNEY/services/trackbacks/271599.html</trackback:ping><description><![CDATA[<div style="float: right" align="right"><a title="评分 0" ></a></div> <br /> <br /> <div id="2isassk" class="t_msgfont" id="message3023632">SQL SERVER事务处理<br /> <br /> Q?br /> <a target="_blank">http://blog.itpub.net/category/793/14560</a><br /> <br /> 事务定义Q?br />         事务是单个的工作单元。如果某一事务成功Q则在该事务中进行的所有数据更改均?br />         提交Q成为数据库中的怹l成部分。如果事务遇到错误且必须取消或回滚,则所?br />         数据更改均被清除?br /> <br /> 事务三种q行模式Q?br />      自动提交事务<br />         每条单独的语句都是一个事务?br />      昑ּ事务<br />         每个事务均以 BEGIN TRANSACTION 语句昑ּ开始,<br />         ?COMMIT ?ROLLBACK 语句昑ּl束?br />      隐性事?br />         在前一个事务完成时C务隐式启动,但每个事务仍?COMMIT ?ROLLBACK 语句<br />         昑ּ完成?br /> <br /> 事务操作的语法:<br />     BEGIN TRANSACTION<br />     BEGIN DISTRIBUTED TRANSACTION<br />     COMMIT TRANSACTION<br />     COMMIT WORK<br />     ROLLBACK WORK<br />     SAVE TRANSACTION<br />     BEGIN TRANSACTION<br /> <br /> BEGIN TRANSACTION<br />    标记一个显式本C务的起始炏V?br /> <br />    BEGIN TRANSACTION?@@TRANCOUNT ?1?br /> <br />    BEGIN TRANSACTION 代表一点,p接引用的数据在该Ҏ(gu)逻辑和物理上都一致的。如果遇上错误,?BEGIN TRANSACTION 之后的所有数据改动都能进行回滚,以将数据q回到已知的一致状?。每个事务l执行直到它无误地完成ƈ且用 COMMIT TRANSACTION Ҏ(gu)据库作永久的改动Q或者遇上错误ƈ且用 ROLLBACK TRANSACTION 语句擦除所有改?br /> <br /> 语法<br /> BEGIN TRAN [ SACTION ] [ transaction_name |   @tran_name_variable     [ WITH MARK [ 'description' ] ] ]<br /> <br /> <br /> 例子Q?br />   BEGIN TRAN T1<br />       UPDATE table1 ...<br />           --nest transaction M2<br />           BEGIN TRAN M2 WITH MARK<br />               UPDATE table2 ...<br />               SELECT * from table1<br />           COMMIT TRAN M2<br />       UPDATE table3 ...<br />   COMMIT TRAN T1<br /> <br /> <br /> <br /> BEGIN DISTRIBUTED TRANSACTION<br />     指定一个由 Microsoft 分布式事务处理协调器 (MS DTC) 理?Transact-SQL 分布式事务的起始?br /> <br />     语法<br />         BEGIN DISTRIBUTED TRAN [ SACTION ]<br />             [ transaction_name | @tran_name_variable ]<br /> <br />     参数<br />       transaction_name<br />            是用户定义的事务名,用于跟踪 MS DTC 实用工具中的分布式事务?nbsp;         transaction_name 必须W合标识W规则,但是仅用头 32 个字W?br /> <br /> @tran_name_variable<br />     是用户定义的一个变量名Q它含有一个事务名Q该事务名用于跟t?MS DTC 实用工具中的分布式事务。必ȝ char、varchar、nchar ?nvarchar 数据cd声明该变量?br /> <br /> 注释<br />    执行BEGIN DISTRIBUTED TRANSACTION 语句的服务器是事务创ZhQƈ且控制事务的完成<br /> <br /> 当连接发出后l?COMMIT TRANSACTION ?ROLLBACK TRANSACTION 语句Ӟ<br /> L服务器请?MS DTC 在所涉及的服务器间管理分布式事务的完成?br /> 有两个方法可远E?SQL 服务器登记在一个分布式事务中: <br /> <br /> 分布式事务中已登记的q接执行一个远E存储过E调用,该调用引用一个远E服务器?<br /> 分布式事务中已登记的q接执行一个分布式查询Q该查询引用一个远E服务器?<br /> <br /> CZ<br />   本例在本地和q程数据库上更新作者的姓。本地和q程数据库将同时提交或同时回滚本事务?<br /> <br /> 说明 <br />    当前的SQL Server 上必d?MS DTC. <br /> <br /> USE pubs<br /> GO<br /> BEGIN DISTRIBUTED TRANSACTION<br /> UPDATE authors<br />    SET au_lname = 'McDonald' WHERE au_id = '409-56-7008'<br /> EXECUTE link_Server_T.pubs.dbo.changeauth_lname '409-56-7008','McDonald'<br /> COMMIT TRAN<br /> GO<br /> Note:<br />     如果需要连接远EDB,如果是linkServer 方式q接的话Q一定要修该linkServer?RPC 选项|ؓ True?br /> <br /> SET XACT_ABORT<br />     指定?Transact-SQL 语句产生q行旉误时QMicrosoft? SQL Server? 是否自动回滚当前事务?br /> <br /> (  可以比较单的理解Q如果中间有M一句SQL 出错Q所有SQL全部回滚.特别适用?Procedure 中间调用Procedure Q如果第一个Procedure OkQ被调用的Procedure 中间有错误,如果SET XACT_ABORT=falseQ则出错的部分回滚,其他部分提交Q当然外部Procedure 也提交。).<br /> <br /> ---在分布式Trans中一定要注意讄下面参数(XACT_ABORT)<br /> <br /> 语法<br /> SET XACT_ABORT { ON | OFF }<br /> <br /> 注释<br />     ?SET XACT_ABORT ?ON Ӟ如果 Transact-SQL 语句产生q行旉误,整个事务终止ƈ回滚。ؓ OFF Ӟ只回滚生错误的Transact-SQL 语句Q而事务将l箋q行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的媄响?br /> <br />    对于大多?OLE DB 提供E序Q包?SQL ServerQ,隐性或昑ּ事务中的数据修改语句必须?XACT_ABORT 讄?ON?br /> <br /> SET XACT_ABORT 的设|是在执行或q行时设|,而不是在分析时设|?br /> <br /> CZ<br /> 下例D在含有其?Transact-SQL 语句的事务中发生q反外键错误。在W一个语句集中生错误,但其它语句均成功执行且事务成?br /> 提交。在W二个语句集中,SET XACT_ABORT 讄?ON。这D语句错误使批处理l止Qƈ使事务回滚?<br /> <br />   CREATE TABLE t1 (a int PRIMARY KEY)<br />   CREATE TABLE t2 (a int REFERENCES t1(a))<br />   GO<br />   INSERT INTO t1 VALUES (1)<br />   INSERT INTO t1 VALUES (3)<br />   INSERT INTO t1 VALUES (4)<br />   INSERT INTO t1 VALUES (6)<br />   GO<br />   SET XACT_ABORT OFF<br />   GO<br />   BEGIN TRAN<br />   INSERT INTO t2 VALUES (1)<br />   INSERT INTO t2 VALUES (2) /* Foreign key error */<br />   INSERT INTO t2 VALUES (3)<br />   COMMIT TRAN<br />   GO<br />    <br />   SET XACT_ABORT ON<br />   GO<br />    <br />   BEGIN TRAN<br />   INSERT INTO t2 VALUES (4)<br />   INSERT INTO t2 VALUES (5) /* Foreign key error */<br />   INSERT INTO t2 VALUES (6)<br />   COMMIT TRAN<br />   GO<br /> <br /> <br /> <br /> SAVE TRANSACTION<br /> 在事务内讄保存炏V?br /> <br /> 语法<br />      SAVE TRAN [ SACTION ] { savepoint_name | @savepoint_variable }<br /> 参数<br />   savepoint_name<br />     是指z保存点的名称。保存点名称必须W合标识W规则,但只使用?32 个字W?br />   @savepoint_variable<br />       是用户定义的、含有有效保存点名称的变量的名称?br />       必须?char、varchar、nchar ?nvarchar 数据cd声明该变量?br /> 注释<br />       用户可以在事务内讄保存Ҏ(gu)标记。保存点定义如果有条件地取消事务的一部分Q事  务可以返回的位置。如果将事务回滚C存点Q则必须Q如果需要,使用更多?Transact-SQL 语句?COMMIT TRANSACTION 语句Ql完成事务,或者必(通过事务回滚到其v始点Q完全取消事务。若要取消整个事务,请?ROLLBACK TRANSACTION transaction_name 格式。这撤消事务的所  有语句和q程?br /> <br /> NoteQ?Q?在由 BEGIN DISTRIBUTED TRANSACTION 昑ּ启动或从本地事务升而来的分布式事务中,不支?SAVE TRANSACTION?br /> <br />       2Q当事务开始时Q将一直控制事务中所使用的资源直C务完成(也就是锁定)。当事务的一部分回滚C存点Ӟl控制资源直C务完成(或者回滚全部事务)?br /> <br /> 例子Q?br /> begin transaction<br />     save transaction A<br />      insert into demo values('BB','B term')<br />     rollback TRANSACTION A<br />     create table demo2(name varchar(10),age int)<br />     insert into demo2(name,age) values('lis',1)<br /> commit transaction<br /> <br /> <br /> <br /> <br /> <br /> ROLLBACK TRANSACTION<br /> <br /> 显式事务或隐性事务回滚到事务的vҎ(gu)事务内的某个保存炏V?br /> 语法<br /> ROLLBACK [ TRAN [ SACTION ]<br />      [ transaction_name | @tran_name_variable | savepoint_name | @savepoint_variable ] ]<br /> <br /> 参数<br /> transaction_name<br />   是给 BEGIN TRANSACTION 上的事务指派的名U。transaction_name 必须W合标识W规则,但只使用事务名称的前 32 个字W。嵌?br />   事务Ӟtransaction_name 必须是来自最q的 BEGIN TRANSACTION 语句的名U?br /> @tran_name_variable<br />   是用户定义的、含有有效事务名U的变量的名U。必ȝ char、varchar、nchar ?nvarchar 数据cd声明该变量?br /> savepoint_name<br />   是来?SAVE TRANSACTION 语句?savepoint_name。savepoint_name 必须W合标识W规则。当条g回滚只媄响事务的一部分时  ?savepoint_name?br /> @savepoint_variable<br />   是用户定义的、含有有效保存点名称的变量的名称。必ȝ char、varchar、nchar ?nvarchar 数据cd声明该变量?br /> <br /> 注释<br /> ROLLBACK TRANSACTION 清除自事务的L或到某个保存Ҏ(gu)做的所有数据修攏VROLLBACK q释攄事务控制的资源?br /> 不带 savepoint_name ?transaction_name ?ROLLBACK TRANSACTION 回滚C务的L。嵌套事务时Q该语句所有内层事务回滚到 最q的 BEGIN TRANSACTION 语句。在q两U情况下QROLLBACK TRANSACTION 均将 @@TRANCOUNT pȝ函数减ؓ 0。ROLLBACK  <br /> TRANSACTION savepoint_name 不减?@@TRANCOUNT?br /> <br /> Note: <br />   ROLLBACK TRANSACTION 语句若指?savepoint_name 则不释放M锁?br />   在由 BEGIN DISTRIBUTED TRANSACTION 昑ּ启动或从本地事务升而来的分布式事务中,ROLLBACK TRANSACTION 不能<br />   引用savepoint_name。在执行 COMMIT TRANSACTION 语句后不能回滚事务?br /> <br />   在事务内允许有重复的保存点名Uͼ?ROLLBACK TRANSACTION 若用重复的保存点名Uͼ则只回滚到最q的使用该保存点名称的SAVE TRANSACTION?br /> <br />   在存储过E中Q不?savepoint_name ?transaction_name ?ROLLBACK TRANSACTION 语句所有语句回滚到最q的 BEGINTRANSACTION。在存储q程中,ROLLBACK TRANSACTION 语句?@@TRANCOUNT 在触发器完成时的g同于调用该存储过E时的@@TRANCOUNT |q且生成一个信息。该信息不媄响后面的处理?br /> <br /> 如果在触发器中发?ROLLBACK TRANSACTIONQ将回滚对当前事务中的那一Ҏ(gu)做的所有数据修改,包括触发器所做的修改?<br /> 触发器l执?ROLLBACK 语句之后的所有其余语句。如果这些语句中的Q意语句修Ҏ(gu)据,则不回滚q些修改。执行其余的语句不会Ȁ发嵌套触发器。在批处理中Q不执行所有位于激发触发器的语句之后的语句。每ơ进入触发器Q@@TRANCOUNT 增?1Q即使在自动提交模式下也是如此。(pȝ触发器视作隐性嵌套事务。)<br /> <br /> 在存储过E中QROLLBACK TRANSACTION 语句不媄响调用该q程的批处理中的后箋语句Q?br /> 执行批处理中的后箋语句。在触发器中QROLLBACK TRANSACTION 语句l止含有Ȁ发触发器的语句的批处理;<br /> 不执行批处理中的后箋语句?br /> <br /> ROLLBACK TRANSACTION 语句不生成显C给用户的信息。如果在存储q程或触发器中需要警告,请?RAISERROR ?PRINT 语句。RAISERROR 是用于指出错误的首选语句?br /> <br /> ROLLBACK Ҏ(gu)标的影响׃面三个规则定义: <br />    ?CURSOR_CLOSE_ON_COMMIT 讄?ON ӞROLLBACK 关闭但不释放所有打开的游标?<br />    ?CURSOR_CLOSE_ON_COMMIT 讄?OFF ӞROLLBACK 不媄响Q何打开的同?STATIC ?INSENSITIVE 游标不媄响已完全填充 的异?STATIC 游标。将关闭但不释放M其它cd的打开的游标?<br /> 对于Dl止批处理ƈ生成内部回滚的错误,释攑֜含有该错误语句的批处理内声明的所有游标?br /> 不论游标的类型或 CURSOR_CLOSE_ON_COMMIT 的设|,所有游标均被释放Q其中包括在该错误批处理所调用的存储过E内声明的游标。在该错误批处理之前的批处理内声明的游标以规?1 ?2 为准。死锁错误就属于q类错误。在触发器中发出?ROLLBACK 语句?自动生成q类错误?<br /> <br /> <br /> 权限<br /> ROLLBACK TRANSACTION 权限默认授予M有效用户?br /> 例子Q?br /> <br /> begin transaction<br />     save transaction A<br />      insert into demo values('BB','B term')<br />     rollback TRANSACTION A<br /> <br /> --    select * into demo2 from demo1<br /> <br />      create table demo2(name varchar(10),age int)<br />      insert into demo2(name,age) values('lis',1)<br /> rollback transaction<br /> <br /> <br /> <br />     COMMIT TRANSACTION<br />          标志一个成功的隐性事务或用户定义事务的结束。如?@@TRANCOUNT ?1QCOMMIT <br />          TRANSACTION 使得自从事务开始以来所执行?所有数据修Ҏ(gu)为数据库的永久部分,释放q接<br />          占用的资源,q将 @@TRANCOUNT 减少?0。如果@@TRANCOUNT 大于 1Q则COMMIT <br />           TRANSACTION ?@@TRANCOUNT ?1 递减?br /> <br />          只有当事务所引用的所有数据的逻辑都正时Q发?COMMIT TRANSACTION 命o?br />     COMMIT WORK<br />          标志事务的结束?br />     语法<br />          COMMIT [ WORK ]<br /> <br />     注释<br />         此语句的功能?COMMIT TRANSACTION 相同Q但 COMMIT TRANSACTION 接受用户定义的事?br />         名称。这个指定或没有指定可选关键字WORK ?COMMIT 语法?SQL-92 兼容<br /> <br />     例子Q?br />         begin transaction a<br />             insert into demo values('BB','B term')<br />         commit TRANSACTION A<br /> <br /> <br /> <br /> <br /> 隐性事?br />     当连接以隐性事务模式进行操作时QSQL Server在提交或回滚当前事务后自动启动C务。无LqC务的开始,只需提交?br />     回滚每个事务。隐性事务模式生成连l的事务链?br /> <br />     在ؓq接隐性事务模式设|ؓ打开之后Q当 SQL Server 首次执行下列M语句Ӟ都会自动启动一个事务:<br /> ALTER TABLE INSERT <br /> CREATE OPEN <br /> DELETE REVOKE <br /> DROP SELECT <br /> FETCH TRUNCATE TABLE <br /> GRANT UPDATE <br /> <br /> <br />     在发?COMMIT ?ROLLBACK 语句之前Q该事务一直保持有效。在W一个事务被提交或回滚之后,下次当连接执行这些语?br />     中的M语句ӞSQL Server 都将自动启动一个新事务。SQL Server 不断地生成一个隐性事务链Q?br />     直到隐性事务模式关闭ؓ?br /> <br />     例子Q?br />         begin transaction <br />             save transaction A<br />                 insert into demo values('BB','B term')<br />             rollback TRANSACTION A<br />           <br />            create table demo2(name varchar(10),age int)<br />            insert into demo2(name,age) values('lis',1)<br />         rollback transaction<br />     -- ?Create table demo2 ?SQL Server 已经隐式创徏一个Trans,知道提交或回?br /> <br /> <br /> <br /> <br /> 嵌套事务处理:<br /> <br />   1Q?Trans 嵌套Q将内部的trans 合ƈ到外部ƈ形成一个Trans.<br /> <br />     begin tran t1 <br />         ----In the first trans .<br />         Insert into demo2(name,age) values('lis',1)<br />         <br />         ---Second Trans<br />         begin transaction t2  <br />             insert into demo values('BB','B term')<br />         commit transaction t2<br />         <br />         ----In the first trans .<br />         Insert into demo2(name,age) values('lis',2)<br />      rollback transaction t1<br /> <br />    Note:<br />         在一pd嵌套的事务中用一个事务名l多个事务命名对该事务没有什么媄响。系l仅登记W一个(最外部的)事务名。回?br />         到其它Q何名字(有效的保存点名除外)都会产生错误?br />         <br />         事实上,M在回滚之前执行的语句都没有在错误发生时回滚。这语句仅当外层的事务回滚时才会q行回滚?br /> <br /> <br />     例:内部事务回滚SQL server 报错?br />         begin tran t1 <br />             Insert into demo2(name,age) values('lis',1)<br />          ---Second Trans <br />          --Server: Msg 6401, Level 16, State 1, Line 6<br />          ---Cannot roll back t2. No transaction or savepoint of that name was found.<br />             begin transaction t2  <br />                 insert into demo values('BB','B term')<br />             rollback transaction t2<br />    <br />             ----In the first trans .<br />             Insert into demo2(name,age) values('lis',2)<br />          commit transaction t1<br /> <br />      例: 内部事务提交SQL server 不会报错?<br />         begin tran t1 <br />             Insert into demo2(name,age) values('lis',1)<br />              ---Second Trans no error<br />             begin transaction t2  <br />                 insert into demo values('BB','B term')<br />             commit transaction t2<br />    <br />             ----In the first trans .<br />             Insert into demo2(name,age) values('lis',2)<br />          commit transaction t1<br /> <br /> <br /> SQL Server 的隔ȝ别:<br /> <br /> <br /> 1: 讄TimeOut 参数<br /> <br />     Set Lock_TimeOut 5000<br /> <br />         被锁时5U将自动解锁<br /> <br />     Set Lock_TimeOut 0<br /> <br />         产立卌锁,q回Error 默认?1Q无限等?br /> <br />    2Q?br />     (SET TRANSACTION ISOLATION LEVEL<br />       { READ COMMITTED<br />            | READ UNCOMMITTED<br />            | REPEATABLE READ<br />            | SERIALIZABLE}Q?br /> <br /> <br /> <br />     READ COMMITTED<br /> <br />         指定在读取数据时控制׃n锁以避免脏读Q但数据可在事务l束前更改,从而生不可重复读取或<br /> <br />         qd数据。该选项是SQL Server 的默认倹{?br /> <br />         <br /> <br />         避免脏读Qƈ在其他session 在事务中不能对已有数据进行修攏V共享锁?br /> <br />            <br /> <br />    <br /> <br />      READ UNCOMMITTED<br /> <br />         执行脏读?0 U隔锁定,q表CZ发出׃n锁,也不接受排它锁。当讄该选项Ӟ可以Ҏ(gu)<br /> <br />         据执行未提交L脏读Q在事务l束前可以更Ҏ(gu)据内的数|行也可以出现在数据集中或从数?br /> <br />         集消失。该选项的作用与在事务内所有语句中的所有表上设|?NOLOCK 相同。这是四个隔ȝ别中<br /> <br />         限制最的U别?br /> <br />        <br /> <br /> <br /> <br />     REPEATABLE READ<br /> <br />         锁定查询中用的所有数据以防止其他用户更新数据Q但是其他用户可以将新的qd行插入数?br /> <br />         集,且像行包括在当前事务的后箋d中。因为ƈ发低于默认隔ȝ别,所以应只在必要时才?br /> <br />         用该选项?br /> <br /> <br /> <br /> <br /> <br />     SERIALIZABLE<br /> <br />         在数据集上放|一个范围锁Q以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这<br /> <br />         是四个隔ȝ别中限制最大的U别。因为ƈ发别较低,所以应只在必要时才使用该选项。该选项<br /> <br />         的作用与在事务内所?SELECT 语句中的所有表上设|?HOLDLOCK 相同?br /> <br /> <br /> <br /> Q?br /> <a target="_blank">http://blog.itpub.net/category/793/14560</a><br /> <br /> 希望能给大家有所帮助?br /> </div> <img src ="http://www.tkk7.com/SIDNEY/aggbug/271599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SIDNEY/" target="_blank">渠上?/a> 2009-05-19 22:12 <a href="http://www.tkk7.com/SIDNEY/archive/2009/05/19/271599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈数据库烦??http://www.tkk7.com/SIDNEY/archive/2009/03/30/262988.html渠上?/dc:creator>渠上?/author>Mon, 30 Mar 2009 13:26:00 GMThttp://www.tkk7.com/SIDNEY/archive/2009/03/30/262988.htmlhttp://www.tkk7.com/SIDNEY/comments/262988.htmlhttp://www.tkk7.com/SIDNEY/archive/2009/03/30/262988.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/262988.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/262988.html    首先明白Z么烦引会增加速度QDB在执行一条Sql语句的时候,默认的方式是Ҏ(gu)搜烦条gq行全表扫描Q遇到匹配条件的加入搜索结果集合。如果我们对某一字段增加索引Q查询时׃先去索引列表中一ơ定位到特定值的行数Q大大减遍历匹配的行数Q所以能明显增加查询的速度。那么在M时候都应该加烦引么Q这里有几个反例Q?、如果每ơ都需要取到所有表记录Q无论如何都必须q行全表扫描了,那么是否加烦引也没有意义了?、对非唯一的字D,例如“性别”q种大量重复值的字段Q增加烦引也没有什么意义?、对于记录比较少的表Q增加烦引不会带来速度的优化反而浪费了存储I间Q因为烦引是需要存储空间的Q而且有个致命~点是对于update/insert/delete的每ơ执行,字段的烦引都必须重新计算更新?/p>

    那么在什么时候适合加上索引呢?我们看一个Mysql手册中D的例子,q里有一条sql语句Q?/p>

    SELECT c.companyID, c.companyName FROM Companies c, User u WHERE c.companyID = u.fk_companyID AND c.numEmployees >= 0 AND c.companyName LIKE '%i%' AND u.groupID IN (SELECT g.groupID FROM Groups g WHERE g.groupLabel = 'Executive')

    q条语句涉及3个表的联接,q且包括了许多搜索条件比如大比较,Like匚w{。在没有索引的情况下Mysql需要执行的扫描行数?7721876行。而我们通过在companyID和groupLabel两个字段上加上烦引之后,扫描的行数只需?34行。在Mysql中可以通过Explain Select来查看扫描次数。可以看出来在这U联表和复杂搜烦条g的情况下Q烦引带来的性能提升q比它所占据的磁盘空间要重要得多?/p>

 

    那么索引是如何实现的呢?大多数DB厂商实现索引都是Z一U数据结构——B树。因为B树的特点是适合在磁盘等直接存储讑֤上组l动态查找表。B树的定义是这LQ一m(m>=3)阶的B树是满下列条g的m叉树Q?/p>

    1、每个结点包括如下作用域(j, p0, k1, p1, k2, p2, ... ki, pi) 其中j是关键字个数Qp是孩子指?/p>

    2、所有叶子结点在同一层上Q层数等于树高h

    3、每个非根结点包含的关键字个数满[m/2-1]<=j<=m-1

    4、若树非I,则根臛_?个关键字Q若栚w叶子Q则臛_?子树,臛_有m子?/p>

    看一个B树的例子Q针?6个英文字母的B树可以这h造:

    可以看到在这B树搜索英文字母复杂度只ؓo(m)Q在数据量比较大的情况下Q这Ll构可以大大增加查询速度。然而有另外一U数据结构查询的虚度比B树更快——散列表。Hash表的定义是这LQ设所有可能出现的关键字集合ؓuQ实际发生存储的关键字记为kQ而|k|比|u|很多。散列方法是通过散列函数hu映射到表T[0,m-1]的下标上Q这样u中的关键字ؓ变量Q以h为函数运结果即为相应结点的存储地址。从而达到可以在o(1)的时间内完成查找?br />     然而散列表有一个缺P那就是散列冲H,即两个关键字通过散列函数计算Z相同的结果。设m和n分别表示散列表的长度和填满的l点敎ͼn/m为散列表的填装因子,因子大Q表C散列冲H的Z大?br />     因ؓ有这L~陷Q所以数据库不会使用散列表来做ؓ索引的默认实玎ͼMysql宣称会根据执行查询格式尝试将Z盘的B树烦引{变ؓ和合适的散列索引以追求进一步提高搜索速度。我惛_它数据库厂商也会有类似的{略Q毕竟在数据库战ZQ搜索速度和管理安全一h非常重要的竞争点?br />
http://blog.csdn.net/Ant_Yan/archive/2008/09/15/2932068.aspx



]]>
?UDFhttp://www.tkk7.com/SIDNEY/archive/2009/03/04/257883.html渠上?/dc:creator>渠上?/author>Wed, 04 Mar 2009 13:25:00 GMThttp://www.tkk7.com/SIDNEY/archive/2009/03/04/257883.htmlhttp://www.tkk7.com/SIDNEY/comments/257883.htmlhttp://www.tkk7.com/SIDNEY/archive/2009/03/04/257883.html#Feedback0http://www.tkk7.com/SIDNEY/comments/commentRss/257883.htmlhttp://www.tkk7.com/SIDNEY/services/trackbacks/257883.htmlMOSS的Excel Services怿大家都听说过.我们可以创徏一个引用了外部数据的Excel文g,然后发布到Excel Services?然后可以让用户在网上看到数据库中的数据的实时的状?

我们会有q样的设?我在Excel中设计一个计逻辑,然后从数据库中取一些值出?填到Excel?然后让Excel 自动去计?然后我们可以把计分析后的结果呈现给拥护.?q个设想很好!我们要实现这个想法需要做三g事情:

1)我们要能从数据库中取出特定的?可能需要取到某一个数
2)我们需要Excel Services能支持我们直接查数据?br /> 3)我们把设计好的Excel发布出去

W一件事情我们自然想CSQL语句比如"Select value  From table..."之类.
很遗?Excel Services不支持直接查询数据库,只支持SQL Server Analysis Services{间接的方式,可能是处于安全或者其他考虑,对于不了解SQL Server Analysis Services的兄弟来说就很难?nbsp; : (

q么一个好的设惻IN实C了吗Q庆q的是,Excel Services支持Udf用户自定义函?我们可以通过用户自定义函数开发一个直接查数据库的Udf,使用我们熟?zhn)的SQL语句.

Udf的开发过E?
1)VS2005新徏一个类工程,应用l典目录?12/ISAPI/Microsoft.Office.Excel.Server.Udf.dll
2)~写自定义的函数
3)注册Udf

关于Udf中的支持的返回值类型等可以参? http://officeblogs.net/excel/UDFs%20for%20Excel%20client%20and%20server.doc

SQLExcuteUdf是ؓ实现了一个方法取数据库中的某个D设计的:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Microsoft.Office.Excel.Server.Udf;
using System.Data.SqlClient;

namespace SQLExcuteUdf
{
    [UdfClass]
    
public class SQLExcute
    
{
        
/// <summary>
        
/// 取SQL Server数据库中的单个?br />         /// </summary>
        
/// <param name="constr">数据库链?/span></param>
        
/// <param name="comstr">SQl语句</param>
        
/// <returns></returns>

        [UdfMethod]
        
public string GetSingleDataFromSQL(string constr, string comstr)
        
{
            
try 
            
{
                
string tempstring = "无数?/span>";
                SqlConnection mycon 
= new SqlConnection(constr);
                mycon.Open();
                SqlCommand mycom 
= new SqlCommand(comstr, mycon);
                SqlDataReader myreader 
= mycom.ExecuteReader();
                
if (myreader.Read())
                
{
                    tempstring 
= myreader[0].ToString();
                }

                mycon.Close();
                mycon.Dispose();
                
return tempstring;
            }

            
catch (Exception ex)
            
{
                
return "q行错误,错误:"+ex.Message;
            }

        }

    }

}

~译把dllq行注册

Ҏ(gu)Udf的设?需要给函数提供一个数据库q接和SQL语句,在Excel中我是需要用q个Udf查数据库中某个?直接在某个单元格输入函数"=GetSingleDataFromSQL($A$1,B4)".因ؓExcel不知道这个函数所以在q里会显C?#Name!"之类的东?如果把Udf作成xll攑ֈExcel中就能直接在Excel中用?q里׃做介l了. 

然后,我把q个发布到Excel Services?
当我在浏览器中访问的时?Excel Services׃利用UdfL据库中查C个?昄出来,当数据库中数据有更新的时?h面会实时更新数?


?a >q里下蝲源代?

预告:
如何利用Excel Services取实数据作ؓKPI列表数据?

]]>
վ֩ģ壺 պĻ| ޸߲| yy6080þ޾Ʒ| ߹ѹۿ| պĻѹۿ| ˻18س˻18Ƶ| 2021߹ۿƵƷ| þùɫAVѹۿ| 91ƬýѰӣ| ߹ۿƵ| ˳Ƶվ| һëƬ| ĻѸ| Ʒһѿ| ѹۿAVƬ | ޾Ʒ㶮| AV| ҹɫ˽ӰԺվ| ŮAëƬƵ| ͵Ƶѹۿ| ƵƷѹۿ99| ֻˬִ̼| һѹۿ| ޳˾þ| þƷAV鶹Ƭ| Ƶѿ| պƷר| ˳ɴƬ߹ۿŵӰ| þѹۿƵ| ĻƵww | Ļһ| þ99Ʒѿ| ŮƵվ| Ļר| ޾ñĻ| ˳77777߹ۿ| պƵ| 99ee6ȾþѾƷ6| ëƬѹۿ| ޾ƷþþþþðĦ | ۺϾƷվ|