每次访问报表都需要windows验证,这样的报表给客户确实很说不过去.SSRS可以匿名登录的设定步骤:环境: 开发工具:SQLServerBusinessIntelligenceDevelopmentStudio 数据库:SQL2008首先确定你的ReportingServices目录位置默认为:C:ProgramFilesMicrosoftSQLServerMSRS11
每次访问报表都需要windows验证,这样的报表给客户确实很说不过去.
环境:
开发工具:SQL Server Business Intelligence Development Studio
数据库: SQL2008
默认为:C:Program FilesMicrosoft SQL ServerMSRS11.MSSQLSERVERReporting ServicesReportServer
打开目录会修改该目录下的3个配置文件,分别为:rsreportserver.config ,rssrvpolicy.config ,web.config
解决步骤:
1.打开rsreportserver.config
修改Configuration/Authentication/AuthenticationTypes
修改前:
<Authentication> <AuthenticationTypes> <RSWindowsNTLM/> </AuthenticationTypes> </Authentication>
修改后:
<Authentication> <AuthenticationTypes> <Custom/> </AuthenticationTypes> </Authentication>
2. 修改web.config
<!--节点:configuration/system.web/authentication --><!-- 修改前 --><authentication mode="Windows" /><identity impersonate="true" /><!-- 修改后 --><authentication mode="None" /><identity impersonate="false" />
3. 从微软下载匿名登录的范例项目
( 下载网址 http://blog.quasarinc.com/wp-content/uploads/2012/03/Microsoft.Samples.ReportingServices.AnonymousSecurity.zip),
并且重新编译出一个新的 Microsoft.Samples.ReportingServices.AnonymousSecurity.dll 动态库,
范例为2010解决方案,其实里面用到的只是class1.cs文件,还有项目名称不能变,和我们下面配置有直接关系.
打开解决方案 将 Microsoft.ReportingServices.Interfaces.dll 的引用移除,并添加本地服务器的这个文件,位置在 ..Reporting ServicesReportServerbin 下, (注意别把这个dll当成万能的)
重新编译会生成 :Microsoft.Samples.ReportingServices.AnonymousSecurity.dll 将该文件放置bin目录下
4.再次修改rsreportserver.config
<!--修改节点:Configuration/Extensions/Security/Extension --><!-- 修改前 --><Security> <Extension Name="Windows" Type="Microsoft.ReportingServices.Authorization.WindowsAuthorization, Microsoft.ReportingServices.Authorization" /></Security><Authentication> <Extension Name="Windows" Type="Microsoft.ReportingServices.Authentication.WindowsAuthentication, Microsoft.ReportingServices.Authorization" /></Authentication><!-- 修改后 --><Security> <Extension Name="None" Type="Microsoft.Samples.ReportingServices.AnonymousSecurity.Authorization, Microsoft.Samples.ReportingServices.AnonymousSecurity" /></Security><Authentication> <Extension Name="None" Type="Microsoft.Samples.ReportingServices.AnonymousSecurity.AuthenticationExtension, Microsoft.Samples.ReportingServices.AnonymousSecurity" /></Authentication>
5. 在 rssrvpolicy.config 内新增一个节点
<!-- 要增加的节点 configuration/mscorlib/security/PolicyLevel 之下 --><CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust" Name="Private_assembly" Description="This code group grants custom code full trust. "> <IMembershipCondition class="UrlMembershipCondition" version="1" Url="C:Program FilesMicrosoft SQL ServerMSRS11.MSSQLSERVERReporting ServicesReportServerbinMicrosoft.Samples.ReportingServices.AnonymousSecurity.dll" /></CodeGroup>
注意:这个Url,路径是reporting services 目录下新编译的文件,不同数据库版本,或安装目录不同,会有差异
6. 重新启动 Reporting Services
完美解决,历时半个月,这个问题终于告以段落,以后可以专心设计报表了.
以上解决方案参考于msdn上的一篇文章,做了些整理.
由于是程序员,所有手工做的事还是交给程序做,以上5个步骤,已使用程序实现:
起个名字叫:ssrs_onekey_nologin 全称:sql server report serveics 一键匿名登录配置.
主要功能,修改xml ,自己生成dll,copy至 bin目录下.
使用说明:需录入report services 目录
代码共享:
class Program { static void Main(string[] args) { Console.WriteLine("请输入Reporting Services目录:为空则与c盘默认sql2008"); string a = Console.ReadLine(); string basePath; if (string.IsNullOrEmpty(a)) { basePath = @"c:Program FilesMicrosoft SQL ServerMSRS10.MSSQLSERVERReporting ServicesReportServer"; }else { basePath = a; } Console.WriteLine("Reporting Services 目录为:{0}", basePath); Console.WriteLine("确认请按任意键..."); Console.ReadKey(); string bakPath = @"c:SSRS_noLogin_bak" + DateTime.Now.ToString("yyyyMMddHHmmss"); Directory.CreateDirectory(bakPath); File.Copy(basePath + "rsreportserver.config", bakPath + "rsreportserver.config"); File.Copy(basePath + "web.config", bakPath + "web.config"); File.Copy(basePath + "rssrvpolicy.config", bakPath + "rssrvpolicy.config"); Console.WriteLine("第1步开始:"); Step1(basePath); Console.WriteLine("第1步结束."); Console.WriteLine("第2步开始:"); Step2(basePath); Console.WriteLine("第2步结束."); Console.WriteLine("第3步开始:"); Step3(basePath); Console.WriteLine("第3步结束."); Console.WriteLine("第4步开始:"); Step4(basePath); Console.WriteLine("第4步结束."); Console.WriteLine("第5步开始:"); Step5(basePath); Console.WriteLine("第5步结束."); Console.WriteLine("完成"); Console.ReadKey(); } static void Step1(string basePath) { string file = basePath + "rsreportserver.config"; XmlDocument doc = new XmlDocument(); doc.Load(file); //Configuration XmlNode xn = doc.SelectSingleNode("Configuration/Authentication/AuthenticationTypes"); XmlNode oldXn = xn.SelectSingleNode("RSWindowsNTLM"); if (oldXn == null) { Console.WriteLine("未找到RSWindowsNTLM,或已更改"); } else { XmlNode newXn = doc.CreateElement("Custom"); xn.ReplaceChild(newXn, oldXn); } doc.Save(file); } static void Step2(string basePath) { XmlDocument doc = new XmlDocument(); string file = basePath + "web.config"; doc.Load(file); XmlNode xn2 = doc.SelectSingleNode("configuration/system.web/authentication"); XmlElement xm2 = (XmlElement)xn2; xm2.SetAttribute("mode", "None"); XmlNode xn3 = doc.SelectSingleNode("configuration/system.web/identity"); XmlElement xm3 = (XmlElement)xn3; xm3.SetAttribute("impersonate", "false"); doc.Save(file); } static void Step3(string basePath) { CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(); CompilerParameters objCompilerParameters = new CompilerParameters(); objCompilerParameters.ReferencedAssemblies.Add("System.dll"); objCompilerParameters.ReferencedAssemblies.Add(basePath + @"binMicrosoft.ReportingServices.Interfaces.dll"); string strSourceCode = Resources.Class1; objCompilerParameters.GenerateInMemory = false; objCompilerParameters.OutputAssembly = "Microsoft.Samples.ReportingServices.AnonymousSecurity.dll"; CompilerResults cr = objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters, strSourceCode); if (cr.Errors.HasErrors) { string strErrorMsg = cr.Errors.Count.ToString() + " Errors:"; for (int x = 0; x < cr.Errors.Count; x++) { strErrorMsg = strErrorMsg + "/r/nLine: " + cr.Errors[x].Line.ToString() + " - " + cr.Errors[x].ErrorText; } Console.WriteLine(strErrorMsg); return; } File.Copy("Microsoft.Samples.ReportingServices.AnonymousSecurity.dll", basePath + @"binMicrosoft.Samples.ReportingServices.AnonymousSecurity.dll", true); File.Delete("Microsoft.Samples.ReportingServices.AnonymousSecurity.dll"); } static void Step4(string basePath) { XmlDocument doc = new XmlDocument(); string file = basePath + "rsreportserver.config"; doc.Load(file); XmlNode xn2 = doc.SelectSingleNode("Configuration/Extensions/Security/Extension"); XmlElement xm2 = (XmlElement)xn2; xm2.SetAttribute("Name", "None"); xm2.SetAttribute("Type", "Microsoft.Samples.ReportingServices.AnonymousSecurity.Authorization, Microsoft.Samples.ReportingServices.AnonymousSecurity"); XmlNode xn3 = doc.SelectSingleNode("Configuration/Extensions/Authentication/Extension"); XmlElement xm3 = (XmlElement)xn3; xm3.SetAttribute("Name", "None"); xm3.SetAttribute("Type", "Microsoft.Samples.ReportingServices.AnonymousSecurity.AuthenticationExtension, Microsoft.Samples.ReportingServices.AnonymousSecurity"); doc.Save(file); } static void Step5(string basePath) { XmlDocument doc = new XmlDocument(); string file = basePath + "rssrvpolicy.config"; doc.Load(file); XmlNode xn1 = doc.SelectSingleNode("configuration/mscorlib/security/PolicyLevel/CodeGroup[@class=UnionCodeGroup]"); if (xn1 != null) { //已添加 } else { XmlNode xn = doc.SelectSingleNode("configuration/mscorlib/security/policy/PolicyLevel"); XmlElement xe = doc.CreateElement("CodeGroup"); xe.SetAttribute("class", "UnionCodeGroup"); xe.SetAttribute("version", "1"); xe.SetAttribute("PermissionSetName", "FullTrust"); xe.SetAttribute("Name", "Private_assembly"); xe.SetAttribute("Description", "This code group grants custom code full trust."); XmlElement xe2 = doc.CreateElement("IMembershipCondition"); xe2.SetAttribute("class", "UrlMembershipCondition"); xe2.SetAttribute("version", "1"); xe2.SetAttribute("Url", basePath + @"binMicrosoft.Samples.ReportingServices.AnonymousSecurity.dll"); xe.AppendChild(xe2); xn.AppendChild(xe); } doc.Save(file); } } }ssrs onkey no login
程序共享:
下载
解决后测试页的展示:
到此这篇关于关于 SQL Server Reporting Services 匿名登录的解决方案的文章就介绍到这了,更多相关SQL Server Reporting Services内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
标签: SQL Server Reporting Services 匿名 登录 问题 解决方案
声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!