仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 668|回复: 9
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之[保藏]利用Reporting Services中的窗体...

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:35:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
限制,如果WHERE子句的查询条件里有不等号(WHEREcoloum!=),MySQL将无法使用索引。类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。services利用ReportingServices中的窗体身份考证公布日期:8/18/2004|更新日期:8/18/2004
MicrosoftCorporation

合用局限:
Microsoft®SQLServer™2000ReportingServices

择要:懂得有关ReportingServices平安扩大方面的常识,侧重进修窗体身份考证。别的,下载和部署ReportingServices的窗体身份考证扩大示例。

要安装示例代码,请下载FormsAuthenticationSampleinstaller,并在盘算机上运转它。
本页内容弁言关于本指南ReportingServices平台窗体身份考证示例结论参考材料弁言
部署平安的散布式企业呈报办理计划是一个极具应战性的历程。从呈报会见到供应主要数据(偶然是敏感数据)的数据源,您必要针对怎样在呈报情况中对用户举行平安的身份考证和受权作出决议。在平安方面,呈报是呈报链中最亏弱的环节。

所需的平安范例取决于呈报情况和已安装的平安体系范例。Microsoft®Windows®Authentication是用于确保Microsoft®SQLServer™2000ReportingServices中的呈报平安性的次要体系。WindowsAuthentication供应与其他Microsoft服务器产物的严密集成,因为ReportingServices是在WindowsAuthentication上计划和测试的,因而它在这个情况中的平安性最高。

但是,在某些情形下,大概必要对ReportingServices平安体系举行扩大,以满意企业自界说平安的必要。您能够经由过程功效丰厚的ReportingServicesAPI开辟平台到达这一目标。本指南将概述ReportingServices中的扩大,特别是平安扩大。您还能够下载合用于ReportingServices的示例窗体身份考证扩大,并对它举行深切研讨。随后,您能够使用ReportingServices平安扩大将自界说平安增加到企业呈报办理计划中。
前往页首关于本指南
本指南中供应的信息旨在:

向您先容ReportingServices平安扩大。

断定在ReportingServices中利用自界说身份考证和受权的地位和体例。

先容身份考证和受权在ReportingServices中的事情体例。

先容窗体身份考证及实在现体例。

为您供应了一个能够下载和研讨的窗体身份考证示例。
必备常识
本指南未先容ASP.NET平安或窗体身份考证,未供应有关编程或使用程序平安的深条理常识。作为一位希冀为ReportingServices完成平安扩大的开辟职员,您应当对以下一个或多个方面有着深切的懂得:

MicrosoftReportingServices功效,特别是身份考证、受权和基于脚色的平安。

Microsoft.NETFramework。

ASP.NET和ASP.NET平安。

窗体身份考证。

.NET言语方面的开辟履历。本文仅供应用C#编写的示例。

要间接懂得代码,能够转到“窗体身份考证示例”部分。不外,您大概会发明后面的几部分很有匡助,这些部分先容了您将利用的某些手艺和怎样将这些手艺组合在一同利用。
前往页首ReportingServices平台
经由过程ReportingServices,可在全部企业中计划、部署和托付呈报。从开辟职员的角度来看,ReportingServices经由过程.NETFramework和Webservice的关头开辟平台供应了各类编程时机。ReportingServices能够经由过程“顺手可用”的体例举行部署,从而能够在任何公司中供应周全的呈报办理计划。但是,ReportingServices的开放式和可扩大编程系统布局使它已不再是一个现成的产物,而更像是开辟职员和终极用户的呈报平台。
扩大ReportingServices
ReportingServices具有可扩大性。经由过程托管代码API,能够开辟、安装和办理很多ReportingServices组件利用的扩大。可使用.NETFramework创立公用或共享的程序集,并增加新的ReportingServices功效以满意日趋增加的营业需求。开辟职员可经由过程以下体例扩大ReportingServices:

除ReportingServices以后附带的MicrosoftSQLServer、Oracle和OLEDB供应程序之外,创立其他数据处置扩大。数据处置扩大可用于从您本人独有的数据源中读取数据,并可用于在创立和选择数据集时并进其他营业逻辑。

除ReportingServices以后附带的电子邮件和文件共享托付扩大之外,创立其他托付扩大。托付扩大可用于向传真机、寻呼机、打印机等设备托付呈报。

除ReportingServices已附带的出现扩大以外,创立其他出现扩大。

除WindowsAuthentication扩大(它以后是该产物的默许平安机制)以外,创立其他平安扩大。

如前所述,本指南次要先容了怎样经由过程窗体身份考证扩大ReportingServices的平安体系。
平安扩大
经由过程ReportingServices平安扩大,能够对用户或组举行身份考证和受权,即它使分歧的用户可以登录到呈报服务器,并依据他们的身份实行分歧的义务或操纵。默许情形下,ReportingServices利用基于Windows的身份考证扩大,该身份考证扩大利用Windows帐户协定考证宣称具有该体系帐户的用户的身份。ReportingServices利用基于脚色的平安体系对用户举行受权。ReportingServices基于脚色的平安形式相似于其他手艺的基于脚色的平安形式。因为平安扩大基于开放式、可扩大的API,因而能够在ReportingServices中创立新身份考证和受权扩大。以下是利用基于窗体的身份考证和受权的平安扩大完成的典范示例:


如图所示,身份考证和受权按以下历程举行:

1.

用户实验经由过程输出URL来会见ReportManager,然后被重定向到一个为客户端使用程序搜集用户凭证的窗体。

2.

该用户将凭证提交给窗体。

3.

经由过程LogonUser办法将该用户的凭证提交给ReportingServicesWebservice。

4.

Webservice挪用客户供应的平安扩大,并考证自界说平安机构中是不是存在该用户名和暗码。

5.

举行身份考证时,Webservice将创立身份考证单子(称作“Cookie”),办理该单子,并考证该用户的脚色可否会见ReportManager的主页。

6.

Webservice将Cookie前往给扫瞄器,并在ReportManager中显现响应的用户界面。

7.

身份考证停止后,扫瞄器向ReportManager收回哀求,同时在HTTP标头中传输此Cookie。这些哀求是为呼应ReportManager使用程序中的用户操纵而收回的。

8.

该Cookie连同哀求的用户操纵在HTTP标头中一同被传输到Webservice。

9.

Cookie将承受考证,假如它无效,呈报服务器将从呈报服务器数据库中前往与哀求操纵相干的平安形貌符和其他信息。

10.

假如Cookie无效,呈报服务器将挪用平安扩大,以反省该用户是不是有权实行特定的操纵。

11.

假如该用户已被受权,呈报服务器将实行哀求的操纵,并将把持前往给挪用方。

12.

该用户经由身份考证后,对呈报服务器的URL会见将利用不异的Cookie。该Cookie在HTTP标头中传输。

13.

用户持续在呈报服务器上哀求操纵,直至会话停止。
什么时候完成平安扩大
Microsoft倡议您尽量地利用WindowsAuthentication。不外,但在以下两种情形下,应利用ReportingServices的自界说身份考证和受权:

Internet或Extranet使用程序未利用或没法利用Windows帐户。

您具有自界说的用户和脚色,而且必要在ReportingServices中供应婚配的受权计划。
平安扩大API
下表列出了平安扩大的可用接口和类。
接口或类申明
IAuthenticationExtension接口

暗示ReportingServices中的身份考证扩大,使您可以完成可用于用户身份考证(利用自界说身份考证计划)的平安扩大类。

IAuthorizationExtension接口

暗示可用于扩大ReportingServices的受权功效的扩大,使您可以完成可用于受权用户实行操纵的平安扩大类。

IExtension接口

暗示ReportingServices中的扩大。

AceCollection类

暗示指定一个或多个受信托者的会见权限的会见把持项的汇合。

AceStruct类

受信托者(用户、组或盘算机)的会见把持项,用于指定受信者能够对呈报服务器数据库中的项目实行的操纵。

CatalogOperationsCollection类

暗示目次操纵汇合。

DatasourceOperationsCollection类

暗示数据源操纵汇合。

FolderOperationsCollection类

暗示文件夹操纵汇合。

OperationNames类

包括用户能够对ReportingServices中的项目实行的操纵的字段名和响应值。

ReportOperationsCollection类

暗示呈报操纵汇合。

ResourceOperationsCollection类

暗示资本操纵汇合。

有关平安扩大API的各类接口和类的具体信息,请参阅ReportingServices联机丛书。
ReportingServices中的身份考证
身份考证是创建用户身份权限的历程。有很多办法可用于用户身份考证。最经常使用的办法是利用暗码。完成窗体身份考证时,应利用如许的完成:哀求用户供应凭证(一样平常经由过程请求输出登录名和暗码的某种界面),然后依据用户存储(比方,数据库表或设置文件)考证用户。假如凭证没法失掉考证,身份考证历程将失利,用户将猎取匿名身份。

在ReportingServices中,Windows操纵体系经由过程集成的平安性或经由过程用户凭证的显式吸收和考证来处置用户的身份考证。可对ReportingServices中的自界说身份考证举行开辟,使之撑持其他身份考证计划。为此,可以使用平安扩大接口IAuthenticationExtension。一切扩大都承继于IExtension,它是呈报服务器部署和利用的任何扩大的基础接口。IExtension和IAuthenticationExtension是Microsoft.ReportingServices.Interfaces定名空间的成员。

LogonUser办法是ReportingServices中一切身份考证的中心。可以使用它将用户凭证传送给呈报服务器举行考证。基本平安扩大完成包括自界说身份考证代码的IAuthenticationExtension.LogonUser。在窗体身份考证示例(将在本指南前面部分先容)中,LogonUser依据供应的凭证和数据库中的自界说用户存储区实行身份考证反省。在窗体身份考证示例中,它相似于以下历程:

在AuthenticationExtension.cs(窗体身份考证示例)中

publicboolLogonUser(stringuserName,stringpassword,stringauthority){returnAuthenticationUtilities.VerifyPassword(userName,password);}

在AuthenticationUtilities.cs(窗体身份考证示例)中

internalstaticboolVerifyPassword(stringsuppliedUserName,stringsuppliedPassword){boolpasswordMatch=false;//基于用户名从数据库中猎取Salt和暗码。//请参阅“HowTo:UseDPAPI(MachineStore)fromASP.NET”、“HowTo://UseDPAPI(UserStore)fromEnterpriseServices”和“HowTo://CreateaDPAPILibrary”,以懂得有关怎样利用//DPAPI平安地存储毗连字符串的具体信息。SqlConnectionconn=newSqlConnection("Server=localhost;"+"IntegratedSecurity=SSPI;"+"database=UserAccounts");SqlCommandcmd=newSqlCommand("LookupUser",conn);cmd.CommandType=CommandType.StoredProcedure;SqlParametersqlParam=cmd.Parameters.Add("@userName",SqlDbType.VarChar,255);sqlParam.Value=suppliedUserName;try{conn.Open();SqlDataReaderreader=cmd.ExecuteReader();reader.Read();//跳转到独一行//从前往的数据流前往输入参数stringdbPasswordHash=reader.GetString(0);stringsalt=reader.GetString(1);reader.Close();//如今接纳用户输出的Salt和暗码//并将它们串连在一同。stringpasswordAndSalt=String.Concat(suppliedPassword,salt);//如今对它们举行哈希操纵stringhashedPasswordAndSalt=FormsAuthentication.HashPasswordForStoringInConfigFile(passwordAndSalt,"SHA1");//如今考证它们。假如它们相称,则前往truepasswordMatch=hashedPasswordAndSalt.Equals(dbPasswordHash);}catch(Exceptionex){thrownewException("Exceptionverifyingpassword."+ex.Message);}finally{conn.Close();}returnpasswordMatch;}
身份考证流程
ReportingServicesWebservice供应自界说身份考证,以便ReportManager和呈报服务器可以举行窗体身份考证。

ReportingServicesWebservice的LogonUser办法用于将凭证提交给呈报服务器,以举行身份考证。Webservice利用HTTP标头将身份考证单子(称为“Cookie”)从服务器传送到客户端,以呼应已考证的登录哀求。

下图形貌了当利用设置为利用自界说身份考证扩大的呈报服务器来部署您的使用程序时,对要会见Webservice的用户举行身份考证的办法。


如所示,身份考证历程以下:

1.

客户端使用程序挪用Webservice办法LogonUser对用户举行身份考证。

2.

Webservice挪用平安扩大(详细而言,是指完成IAuthenticationExtension的类)的LogonUser办法。

3.

LogonUser的完成考证用户存储或平安机构中的用户名和暗码。

4.

身份考证乐成后,Webservice将创立Cookie并针对会话对其举行办理。

5.

Webservice经由过程HTTP标头将身份考证单子前往给挪用的使用程序。

Webservice经由过程平安扩大乐成对用户举行身份考证后,将天生一个Cookie,用于随后的哀求。因为呈报服务器没有平安机构,因而该Cookie不会一向保留在自界说平安机构中。Cookie从Webservice办法LogonUser前往,并用于随后的Webservice办法挪用和URL会见。

平安:为了不在传输过程当中保守Cookie,应利用平安套接字层(SSL)加密平安地传输从LogonUser前往的Cookie。

假如在安装了自界说平安扩大的情形下经由过程URL会见来会见呈报服务器,则Internet信息服务(IIS)和ASP.NET将主动办理身份考证单子的传输。假如经由过程SOAPAPI会见呈报服务器,则代办署理类的完成必需包括对身份考证单子办理的附加撑持。有关利用SOAPAPI和办理身份考证单子的具体信息,请参阅本指南前面的“将Webservice用于自界说平安”。
ReportingServices中的身份考证
受权是指决意是不是为某一身份授与哀求范例的会见权限(会见呈报服务器数据库中的给定资本的权限)的历程。ReportingServices利用基于脚色的受权系统布局,即,基于使用程序中的用户脚色授与用户会见给定资本的权限。ReportingServices的平安扩大包括受权组件(一旦用户在呈报服务器上失掉考证,该受权组件便用于授与用户权限)的完成。当用户试图经由过程SOAPAPI和经由过程URL会见对体系或呈报服务器项目实行操纵时,受权便被挪用。为此,可使用平安扩大接口IAuthorizationExtension。如前所述,一切扩大都承继于IExtension,它是部署的任何扩大的基础接口。IExtension和IAuthorizationExtension是Microsoft.ReportingServices.Interfaces定名空间的成员。

在受权中,任何自界说平安完成的关头是会见权反省,该反省在办法CheckAccess中举行。每当用户试图在呈报服务器长进行操纵时,CheckAccess便会被挪用。CheckAccess办法将针对每种操纵范例举行重载。关于文件夹操纵,会见权反省的示例大概以下所示:

//针对文件夹操纵重载publicboolCheckAccess(stringuserName,IntPtruserToken,byte[]secDesc,FolderOperationrequiredOperation){//假如用户是办理员,则同意无穷制会见。if(userName==m_adminUserName)returntrue;AceCollectionacl=DeserializeAcl(secDesc);foreach(AceStructaceinacl){if(userName==ace.PrincipalName){foreach(FolderOperationaclOperationinace.FolderOperations){if(aclOperation==requiredOperation)returntrue;}}}returnfalse;}

呈报服务器经由过程传进登任命户的称号、用户令牌、操纵项目标平安形貌符和哀求的操纵来挪用CheckAccess办法。此处。您将反省用户名的平安形貌符和完成哀求的得当权限,然后前往true,标明会见权限已授与,大概前往false,标明会见权限被回绝。
平安形貌符
为呈报服务器数据库中的项目设置受权战略时,客户端使用程序(比方ReportManager)将把用户信息和项目标平安战略提交给平安扩大。此平安战略和用户信息统称为平安形貌符。平安形貌符包括呈报服务器数据库中的项目标以下信息:

对项目具有某种操纵权限的组或用户。

项目标范例。

把持项目会见权的随机会见把持列表。

平安形貌符是经由过程Webservice办法SetPolicies和SetSystemPolicies创立的。有关这些办法和Webservice的具体信息,请参阅ReportingServices联机丛书。
受权流程
ReportingServices受权由以后在设置为在服务器上运转的平安扩大把持。受权是基于脚色的,并受限于ReportingServices平安系统布局供应的权限和操纵。下图申明了怎样受权用户对呈报服务器数据库中的项目实行操纵。


如所示,受权依照以下按次举行:

1.

身份考证完成后,客户端使用程序经由过程ReportingServicesWebservice办法向呈报服务器收回哀求。身份考证单子以每一个Web哀求的HTTP题目中的Cookie的情势传送给呈报服务器。

2.

在举行任何会见权反省之前,Cookie将被考证。

3.

完成Cookie的考证后,呈报服务器将挪用GetUserInfo,以便向用户授与标识。

4.

用户经由过程ReportingServicesWebservice实验操纵。

5.

呈报服务器挪用CheckAccess办法,

6.

并随即检索平安形貌符,并将其传送给CheckAccess的自界说平安扩大完成。此时,用户、组或盘算机将与会见的项目标平安形貌符举行对照,并被授与实行哀求操纵的权限。

7.

假如用户失掉受权,Webservice将实行操纵,并向挪用使用程序前往呼应。
前往页首窗体身份考证示例
假如您还没有安装窗体身份考证示例,请下载FormsAuthenticationSampleinstaller,并在盘算机上运转它,以安装示例代码。
关于该示例
窗体身份考证示例平安扩大可作为本指南的一部分下载,它利用窗体身份考证和SQLServer供应与ReportingServices一同利用的自界说平安形式。本示例仅用于演示目标,而不合用于临盆情况,也未在临盆情况中举行测试。Microsoft对此示例不供应手艺撑持。在某些情形下,该示例中演示了最好做法(比方,创立单向哈希、带salt的暗码)。在其他情形下,为复杂起见,而躲避了最好做法。应注重,该示例平安扩大的设置和办理常常请求您在呈报服务器盘算机上具有办理员会见权。不论如何,都不倡议在毗连情况中的临盆服务器上利用该示例。

假如您对ReportingServices平安扩大有任何疑问,请与Microsoft征询服务(MCS)、次要撑持服务(PSS)或其他Microsoft撑持服务代表接洽。

请求

要利用本示例,必需安装了以下工具:

安装了MicrosoftSQLServer2000ReportingServices的呈报服务器。

用于会见ReportManager的MicrosoftInternetExplorer6.0或更高版本。

安装了Microsoft®VisualStudio®.NET2003的开辟盘算机。
注重事项
完成自界说平安扩大或利用该示例时,请注重以下事项:

不克不及在混和形式平安体系(比方,同时利用WindowsAuthentication和窗体身份考证)下运转呈报服务器。这也合用于任何ASP.NET使用程序。

务必保留因设置该示例而变动的一切设置文件的备份正本。

只管能够在部署该示例后恢复到WindowsAuthentication,但这大概有必定难度。有关具体信息,请参阅本指南前面的“删除示例扩大”。

掩盖WindowsAuthentication长短常伤害的。呈报服务器在平安方面具有可扩大性,但仅利用了WindowsAuthentication对它举行了周全测试和撑持。

请一直将平安套接字层(SSL)用于窗体身份考证。

在本示例中,用户输出传送到Transact-SQL命令,以举行身份考证。在您本人的自界说平安扩大(将窗体身份考证和SQLServer共同利用)中,应审慎看待用户输出考证,并确保了局命令不包括语法毛病。应确保考证一切用户输出,以防歹意用户招致使用程序运转恣意的SQL命令(也称为“SQL拔出打击”)。登录历程中考证供应的用户名尤其主要,由于呈报服务器自界说平安形式完整取决于可否对用户举行准确的标识、身份考证和受权。

在自界说用户存储中,制止用户输出带有以下字符的称号::?;@&=+$,*><|."/。带有这些字符的用户名大概会招致“MyReports”(我的呈报)功效呈现成绩,由于文件夹在服务器中是利用用户名创立的,且这些字符大概招致文件夹称号和文件夹路径呈现成绩。示例代码利用正则表达式测试用户名是不是无效,并确保路径名不凌驾同意的最亨衢径长度。应当在自界说身份考证代码中实行相似的考证。
窗体身份考证
窗体身份考证是一种ASP.NET身份考证,经由过程这类身份考证,可将未经身份考证的用户定向到HTML窗体。当用户供应凭证后,体系将收回包括身份考证单子的Cookie。在随后的哀求中,体系起首反省该Cookie,断定呈报服务器是不是已对用户举行身份考证。

ReportingServices自己不撑持窗体身份考证。不外,可以使用ReportingServicesAPI供应的平安扩大接口对ReportingServices举行扩大,使其撑持窗体身份考证。假如将ReportingServices扩大为可使用窗体,请将平安套接字层(SSL)用于一切与呈报服务器举行的通讯,以防歹意用户猎取对其他用户的Cookie的会见权。SSL可以使客户端和呈报服务器互相举行身份考证,并确保其他盘算机没法读取这两台盘算机之间的通讯内容。经由过程SSL毗连从客户端收回的一切数据都经由加密,如许,歹意的用户便没法截获发送至呈报服务器的暗码或数据。

完成窗体身份考证一般是为了撑持非Windows帐户和身份考证。图形界面将展现给哀求会见呈报服务器的用户,供应的凭证将提交给平安机构,以举行身份考证。

当有交互式用户输出凭证时,窗体身份考证计划就会派上用处。不外,关于与ReportingServicesWebservice间接通讯的无人值守使用程序,必需将窗体身份考证与自界说身份考证计划组合利用。

以下情形下,窗体身份考证合用于ReportingServices:

必要对没有MicrosoftWindows帐户的用户举行存储和身份考证,并

必要在Web站点的分歧页面间供应您本人的用户界面窗体作为登录页面。

编写撑持窗体身份考证的自界说平安扩大时,请思索以下事项:

假如利用窗体身份考证,则必需在Internet信息服务(IIS)中的呈报服务器假造目次上启用匿名会见。

必需将ASP.NET身份考证设置为“Forms”(窗体)。能够在呈报服务器的Web.config文件中设置ASP.NET身份考证。

ReportingServices可以使用WindowsAuthentication或自界说身份考证对用户举行身份考证和受权。ReportingServices不撑持同时利用多个平安扩大。
部署示例
要运转和反省窗体身份考证示例的代码,必需先实行几个步骤。实行安装和设置步骤后,便可在呈报服务器上利用或调试示例,或在VisualStudio.NET中检察示例代码。
编译和安装扩大程序集
必需依照以下步骤编译和安装扩大。这些步骤假定您已将ReportingServices安装到默许地位:C:ProgramFilesMicrosoftSQLServerMSSQLReportingServices。该地位在本指南的余下部分统称为<install>。
利用VisualStudio.NET编译示例
1.

在MicrosoftVisualStudio.NET2003中翻开CustomSecurity.sln。假如已下载了源代码并将示例安装到默许地位,即可以在C:ProgramFilesMicrosoftSQLServerMSSQLReportingServicesamplesExtensions中会见到它。

2.

在“办理计划资本办理器”中,选择CustomSecurity项目。

3.

在“项目”菜单上,单击“增加援用”。

4.

“增加援用”对话框将翻开。

5.

单击“.NET”选项卡。

6.

单击“扫瞄”举行导航,以在当地驱动器上找到Microsoft.ReportingServices.Interfaces。默许情形下,该程序集位于<install>ReportServerin目次中。单击“断定”。

选定的援用被增加至项目中。

7.

在“天生”菜单中单击“天生办理计划”。

8.

将Microsoft.Samples.ReportingServices.CustomSecurity.dll和Microsoft.Samples.ReportingServices.CustomSecurity.pdb复制到<install>ReportServerin目次中。

9.

将Microsoft.Samples.ReportingServices.CustomSecurity.dll和Microsoft.Samples.ReportingServices.CustomSecurity.pdb复制到<install>ReportManagerin目次中。

10.

将Logon.aspx页复制到<install>ReportServer目次中,并将UILogon.aspx页复制到<install>ReportManagerPages目次中。
将该扩大增加到设置文件中。
将程序集和登录页体身份考证合用于Report,必要对ReportServer和ReportManager设置文件做一些修正。

要点:在举行任何变动前,请备份一切设置文件。
修正RSReportServer.config文件
1.

利用VisualStudio.NET或一个复杂的文本编纂器(比方,记事本)翻开RSReportServer.config文件。RSReportServer.config位于<install>ReportServer目次中。

2.

找到<Security>和<Authentication>元素,并按以下体例修正设置:

<Security><ExtensionName="Forms"Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization,Microsoft.Samples.ReportingServices.CustomSecurity"><Configuration><AdminConfiguration><UserName>username</UserName></AdminConfiguration></Configuration></Extension></Security><Authentication><ExtensionName="Forms"Type="Microsoft.Samples.ReportingServices.CustomSecurity.AuthenticationExtension,Microsoft.Samples.ReportingServices.CustomSecurity"/></Authentication>
修正RSWebApplication.config文件
1.

然后,必要翻开位于<install>ReportManager目次中的ReportManager设置文件RSWebApplication.config。

2.

找到<UI>元素,并按以下体例更新它:

<UI><CustomAuthenticationUI><loginUrl>/Pages/UILogon.aspx</loginUrl><UseSSL>True</UseSSL></CustomAuthenticationUI><ReportServerUrl>http://<server>/ReportServer</ReportServerUrl></UI>

平安:假如在未安装SSL证书的开辟情况中运转示例扩大,则必需在上一个设置项中将<UseSSL>元素的值变动为False。将ReportingServices和窗体身份考证组合利用时,Microsoft倡议您一直利用SSL。
增加扩大的平安战略
您将必要为自界说平安扩大增加代码组,以便向扩大授与FullTrust权限。为此,能够将代码组增加到<install>ReportServer目次中的rssrvpolicy.config文件中。在平安战略文件中找到具有$CodeGen的URL成员身份的现有代码组(以下所示),然后按以下体例将项目增加到rssrvpolicy.config中。

<CodeGroupclass="UnionCodeGroup"version="1"PermissionSetName="FullTrust"><IMembershipConditionclass="UrlMembershipCondition"version="1"Url="$CodeGen$/*"/></CodeGroup><CodeGroupclass="UnionCodeGroup"version="1"Name="SecurityExtensionCodeGroup"Description="示例平安扩大的代码组"PermissionSetName="FullTrust"><IMembershipConditionclass="UrlMembershipCondition"version="1"Url="C:ProgramFilesMicrosoftSQLServerMSSQLReportingServicesReportServerinMicrosoft.Samples.ReportingServices.CustomSecurity.dll"/></CodeGroup>

注重:为复杂起见,窗体身份考证示例定名不是很严厉,在平安战略文件中请求的URL成员身份项也很复杂。在临盆平安扩大完成中,应当创立强称号程序集,并在增加程序集的平安战略时利用强称号成员身份前提。有关强称号程序集的具体信息,请参阅MSDN上的“CreatingandUsingStrong-NamedAssemblies”,其网址为http://msdn.microsoft.com/library/en-us/cpguide/html/cpconworkingwithstrongly-namedassemblies.asp(英文)。

然后,必要在<install>ReportManager目次中的ReportManager战略文件中为MyComputer代码组增添权限。在rsmgrpolicy.config中找到以下代码组,并按以下体例将PermissionSetName属性从Execution变动为FullTrust:

<CodeGroupclass="FirstMatchCodeGroup"version="1"PermissionSetName="FullTrust"Description="该代码组为MyComputer代码授与Execution权限。"><IMembershipConditionclass="ZoneMembershipCondition"version="1"Zone="MyComputer"/>
设置Web.config文件
要利用窗体身份考证,您必要修正ReportManager和ReportServer的Web.config文件,以变动身份考证并禁用摹拟。

修正ReportServer的Web.config文件

1.

在文本编纂器中翻开Web.config文件。默许情形下,该文件位于<install>ReportServer目次中。

2.

找到<identity>元素,并将impersonate属性设置为false。

<identityimpersonate="false"/>

3.

找到<authentication>元素,并将mode属性变动为Forms。

4.

将以下<forms>元素作为<authentication>元素的子级增加,并按以下体例设置loginUrl、name、timeout和path属性:

<authenticationmode="Forms"><formsloginUrl="logon.aspx"name="sqlAuthCookie"timeout="60"path="/"></forms></authentication>

5.

将以下<authorization>元素间接增加到<authentication>元素以后。

<authorization><denyusers="?"/></authorization>

这会回绝将会见呈报服务器的权限授与未经身份考证的用户。<authentication>元素的先前创建的loginUrl属性将把未经身份考证的用户重定向到Logon.aspx页上。

修正ReportManager的Web.config文件

1.

翻开ReportManager的Web.config。它位于<install>ReportManager目次中。

2.

找到<identityimpersonate="true"/>部分,然后按以下体例变动它,以便禁用摹拟:<identityimpersonate="false"/>。
设置匿名身份考证
默许情形下,Windows用户组Guests包括IUSR_computername帐户。该帐户用于最后的当地登录和检察Logon.aspx页。要撑持窗体身份考证,必需启用ReportServer假造目次的匿名会见。默许情形下,匿名会见被禁用。
启用匿名身份考证
1.

在“Internet信息服务”中,选择ReportServer假造目次(一般是默许网站的成员),然后翻开它的属性选项卡。

2.

单击“目次平安性”选项卡。

3.

在“匿名会见和身份考证把持”部分,单击“编纂”。

将显现“身份考证办法”对话框。

4.

选中“匿名会见”复选框。

5.

单击“断定”。

6.

对Reports假造目次反复上述步骤。
创立用户帐户数据库
示例包括一个数据库剧本,即createuserstore.sql,用于在SQLServer数据库中为窗体示例创建一个用户存储。
创立UserAccounts数据库
1.

翻开“查询剖析器”,然后毗连到SQLServer的当地实例。

2.

找到SQL剧本文件createuserstore.sql。该剧本文件包括在示例项目文件中。注重,在剧本的开头处,必需用您本人的盘算机名交换“LocalMachine”。关于Windows2003用户,用NTAUTHORITYNETWORKSERVICE交换LocalMachineASPNET(在IIS5兼容形式下时除外)

3.

运转查询以创立UserAccounts数据库。

4.

加入“查询剖析器”。
测试示例
经由过程以下步骤测试示例扩大。注册办理员用户,行将该用户名、暗码哈西和Salt值增加到UserAccounts数据库中的用户表。它还将请求您在呈报服务器设置文件中输出该用户名。然后,您将以统一个用户身份登录以确保呈报服务器准确运转暗码考证例程和准确加载扩大程序集。
测试示例平安扩大部署
1.

在命令提醒符下运转iisreset.exe,从头启动IIS。

2.

翻开ReportManager。您能够从ReportingServices程序菜单翻开它或经由过程从扫瞄器会见Reports假造目次来翻开它。

3.

输出用户名和暗码,然后单击“注册用户”,将用户增加到帐户数据库中。

4.

翻开RSReportServer.config文件。找到<Security>元素,然后按以下体例增加之前注册的用户名:

<Security><ExtensionName="Forms"Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization,Microsoft.Samples.ReportingServices.CustomSecurity"><Configuration><AdminConfiguration><UserName>username</UserName></AdminConfiguration></Configuration></Extension></Security>

5.

前往到UILogon.aspx页,从头输出用户名和暗码,然后单击“登录”。

您应当可以不受限定地会见ReportManager和呈报服务器。创立的办理员用户对呈报服务器的权限与对当地盘算机上的内置办理员帐户的权限不异。在本示例中,只能将一名用户指定为办理员。具有内置办理员帐户后,便可注册其他用户,并指派他们在呈报服务器中的脚色。

注重:倡议将办理员用户增加到呈报服务器的正式SystemAdministrator和ContentManager(根文件夹)脚色中。这可避免呈报服务器数据库中呈现空的平安形貌符。有关SystemAdministrator和ContentManager脚色的具体信息,请参阅ReportingServices联机丛书。
将WebService用于自界说平安
您能够将WebserviceAPI用于窗体身份考证,就像将WindowsAuthentication用于窗体身份考证一样。不外,您必需挪用Webservice代码中的LogonUser,并传送以后用户的凭证。别的,Webservice客户端将不具有InternetExplorer或其他Web扫瞄器供应的主动Cookie办理功效。您必需扩大ReportingService代办署理类以包括Cookie办理。为此,能够掩盖Webservice类的GetWebRequest和GetWebResponse办法。

有关这方面的示例,请参阅MSDN上的“ReportingService.LogonUserMethod”,其网址为http://msdn.microsoft.com/library/en-us/rsprog/htm/rsp_ref_soapapi_service_lz_3d7q.asp(英文)。
调试示例扩大
在调试程序中运转示例扩大不但可匡助您办理疑问成绩,并且使您可以无效地扫瞄代码并检察运转中的呈报服务器身份考证和受权历程。

Microsoft.NETFramework供应了多个可匡助您剖析示例代码的调试工具。工具的利用效果取决于您试图完成的义务。在本指南中,所选的调试工具是VisualStudio.NET2003。
调试窗体身份考证示例代码
1.

确保依照以下步骤部署示例。

2.

启动VisualStudio.NET2003,并翻开测试呈报服务器上的CustomSecurity.sln。

3.

翻开InternetExplorer,并导航至ReportManager,同时使示例代码在VisualStudio中坚持翻开形态。

4.

导航至VisualStudio和自界说平安扩大项目,并在代码中设置一些断点。

5.

当扩大项目仍为举动窗口时,单击“调试”菜单上的“历程”。

“历程”对话框将翻开。

6.

从历程列表中,选择aspnet_wp.exe历程(假如您的使用程序部署在IIS6.0上,请选择w3wp.exe),然后单击“附加”。当“附加到历程”对话框翻开时,确保选择了程序范例“大众言语运转库”,然后单击“断定”。为进步调试功能,确保未选择程序范例“本机”。

7.

如今,请在登录窗体中输出用户凭证,然后单击“登录”。假如碰到对应于断点的代码,调试程序将在第一个断点处中断实行。

8.

利用F11键扫瞄代码。有关利用VisualStudio举行调试的具体信息,请参阅VisualStudio.NET文档。

注重:以这类体例举行调试必要大批的资本和处置器工夫。假如碰到成绩,请封闭VisualStudio,重置IIS,然后经由过程将CustomSecurity办理计划附加到ASP.NET事情历程并登录到ReportManager来从头入手下手。
删除示例扩大
只管一般不倡议这么做,但删除示例后,仍能够恢复到WindowsAuthentication。要恢复到Windows平安,请实行以下操纵:

从备份正本复原以下文件:Web.config、RSReportServer.config和RSWebApplication.config。这将把呈报服务器的身份考证和受权办法设置为默许的Windows平安。这还将删除您在ReportServer或ReportManager设置文件中为扩大输出的内容。

在Internet信息服务器(IIS)中禁用呈报服务器假造目次的匿名会见。

删除设置信息后,平安扩大关于呈报服务器将不成用。您不用删除在示例平安扩大下运转呈报服务器时所创立的任何平安形貌符。启用WindowsAuthentication时,呈报服务器主动将SystemAdministrator脚色分派给托管呈报服务器的盘算机上的BUILTINAdministrators组。不外,您必需为Windows用户从头手动使用任何基于脚色的平安。

一般,在迁徙到分歧的平安扩大后,倡议您不要恢复到WindowsAuthentication。不然,当您试图会见呈报服务器中的项目时,假如它们具有自界说平安形貌符而不具有WindowsAuthentication平安形貌符,则大概会碰到毛病。
前往页首结论
MicrosoftSQLServer2000ReportingServices是一个可用于企业呈报开辟和部署的可扩大呈报平台。ReportingServices包括一个WindowsAuthentication模块,该模块利用Windows帐户确保对呈报服务器会见的平安,但在某些情形下,大概必要撑持分歧平安模块。为此,ReportingServices中包括了一组撑持创立自界说平安扩大的平安扩大API。在所供应的示例中,您已懂得了经由过程窗体身份考证完成自界说平安的办法。Microsoft正努力于经由过程在ReportingServices确当前版本和后续版本中供应平安扩大性,来满意企业中不休增加的平安需求。作为开辟者,您应当意想到完成自界说平安扩大的风险,并应当审慎思索呈报服务器所用的平安体系是不是失掉准确完成和使用。
前往页首参考材料
有关具体信息,请参阅MSDN上的以下资本:

HowTo:UseFormsAuthenticationwithSQLServer2000(英文)

FormsAuthenticationProvider(英文)

UsingRole-BasedSecurity(英文)

Microsoft.ReportingServices.InterfacesNamespace(英文)
版本一切
本文档中包括的信息代表MicrosoftCorporation在公布时对所会商成绩的最新概念。因为Microsoft必需顺应不休变更的市场情形,因而,这些信息并不是Microsoft方面所作的答应,Microsoft也不克不及包管出书日以后供应的任何信息都完整准确。

本白皮书仅供参考。MICROSOFT对本文档中的有关信息不作任何昭示或表示的包管。

用户有义务服从一切合用的版权法。除版权法所付与的权力之外,未经MicrosoftCorporation明白书面允许,不得私自将本文档的任何部分举行复制、存储或输出可检索体系,或以任何情势或体例(电子、机器、影印、录制或其他体例)举行传布,或用作其他目标。

Microsoft对本文档中的主题持有专利权、专利请求权、商标权、版权或其他相干的常识产权。Microsoft只供应在任何书面允许协定中明白划定的权力,而不授与您本文档的上述专利权、商标权、版权或其他常识产权。

©2004MicrosoftCorporation版权一切。保存一切权力。

Microsoft、VisualStudio和Windows是MicrosoftCorporation在美国和/或其他国度的注册商标。

此处提到的实在的公司和产物称号是其各自一切者的商标。

©2004MicrosoftCorporation版权一切。保存一切权力。利用划定。
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。
沙发
发表于 2015-1-19 18:02:30 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
柔情似水 该用户已被删除
板凳
发表于 2015-1-25 18:50:47 | 只看该作者
总感觉自己还是不会SQL
老尸 该用户已被删除
地板
发表于 2015-2-3 13:37:16 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
乐观 该用户已被删除
5#
发表于 2015-2-9 02:57:38 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
不帅 该用户已被删除
6#
发表于 2015-2-26 19:38:40 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
莫相离 该用户已被删除
7#
发表于 2015-3-8 17:07:01 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-16 07:20:53 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
兰色精灵 该用户已被删除
9#
发表于 2015-3-22 21:09:43 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
爱飞 该用户已被删除
10#
发表于 2015-3-22 21:09:43 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 03:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表