<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Integration of SQL Server Reporting Services into modern application infrastructure</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Volodymyr</forename><surname>Kuharsky</surname></persName>
							<email>volodimir.kukharskiy@windowslive.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Ternopil Ivan Puluj National Technical University</orgName>
								<address>
									<addrLine>56, Ruska Street</addrLine>
									<postCode>46001</postCode>
									<settlement>Ternopil</settlement>
									<country key="UA">Ukraine</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Dmytro</forename><surname>Mykhalyk</surname></persName>
							<email>d.mykhalyk@gmail.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Ternopil Ivan Puluj National Technical University</orgName>
								<address>
									<addrLine>56, Ruska Street</addrLine>
									<postCode>46001</postCode>
									<settlement>Ternopil</settlement>
									<country key="UA">Ukraine</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Integration of SQL Server Reporting Services into modern application infrastructure</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">7EB338A10996413785B2FD683C2E04EC</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2025-04-23T17:42+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>SSRS</term>
					<term>NTLM</term>
					<term>Authentication</term>
					<term>Integration</term>
					<term>Visual Studio</term>
					<term>Database</term>
					<term>UI</term>
					<term>API</term>
					<term>Server</term>
					<term>URL D. Mykhalyk) 0009-0009-6937-9526 (V. Kuharsky); 0000-0001-9032-695X (D. Mykhalyk)</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>The proposed research delves into the integration of the SSRS report viewer with Angular applications. While a singular component was selected for its independence from proprietary services, significant architectural limitations were present.</p><p>The key objectives for addressing these limitations have been identified and described, among them: enhancing security by imposing access restrictions, giving access to authenticated and authorized users only, ensuring proper and transparent NTLM authentication handling, and enhancing the security of the report catalog. The further advantages offered by SSRS integration through a standalone native service have been revealed. The article highlights the complexities and opportunities in integrating SQL Server Reporting Services with Angular applications, emphasizing the importance of addressing security and architectural challenges while broadening the scope of integration for enhanced functionality. The concept of integration service in modern .NET runtime. has been implemented taking into account best practices for architecture and application design.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>BIRT -free open-source solution by Eclipse.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Zoho Reports -cloud-based reporting and business intelligence solution.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Google Data Studio -free solution by Google And many others offer a variety of specialized reporting solutions for industries such as healthcare, transportation, energy, and construction. SSRS was a natural choice for a couple of reasons. First, it is a part of the Microsoft ecosystem that is at the core of the University's current programming stack. Additionally, it is a very mature solution for report design, publication, and rendering.</p><p>2.Brief overview of SQL Server Reporting Services architecture SQL Server Reporting Services is a mature and very stable reporting platform that allows us to deploy, publish, schedule, and manage reports. SSRS can be used to manage and publish enrichment and interactive reports, key performance indicators, datasets, and mobile reports <ref type="bibr" target="#b1">[3]</ref><ref type="bibr" target="#b2">[4]</ref><ref type="bibr" target="#b3">[5]</ref><ref type="bibr" target="#b4">[6]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Figure 1: SSRS components diagram</head><p>As we can see in Figure <ref type="figure">1</ref>, SSRS has a broad architecture:</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Report Builder and Report Designer are used for report development and deployment but differ in features. The former has features for simple reports and is suitable mainly for business users and power users. The latter is more feature-rich, has deep integration with Visual Studio, and is ideal for experienced report developers.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Report Manager is a web-based tool that allows users to view, manage, and distribute SSRS reports.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Report database stores all catalog items, their properties, and necessary security information for access management, and configuration.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>TempDB, the Report Database, stores session and execution data, information related to cached reports, and work tables generated by the Report Server.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Data sources -abstracted data providers for reports. Report Server is based on a three-tier application architecture and these tiers are Middletier, Data-tier, and Presentation-tier, and runs inside of Windows service context</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Middle-tier -consists of a set of various extensions like security, data-processing, rendering, delivery extensions, etc.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Data tier -a place where interactions with its database and various data sources exist.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>•</head><p>Presentation tier -a place where web portal and application programming interfaces exist.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Problem definition</head><p>To integrate the SSRS report viewer with the Angular application initial research was done. At the end of the research, the single component was chosen because it does not use any proprietary services as a bridge between itself and the Report Server <ref type="bibr" target="#b5">[7]</ref>. Unfortunately, that component has a big architectural limitation. Because it uses a simple SSRS request URL to manipulate or render a deployed report, there is no way to securely pass authentication credentials. Alas, this is not secure and means the need to share the Report Server user for the task with an arbitrary authenticated user within the informational system who needs to view a specific report, or the creation and management of a separate account per authenticated user on the Report Server side, because he or she may need to have access to view specific reports somewhere in the future.</p><p>Report Server provides UI for report rendering but its usage inside of client-side application is problematic. Back in the days of server-side applications, it was easy to implement such integration because all security and configuration management was done on a server <ref type="bibr" target="#b2">[4]</ref>. Today applications most of the time run on the client-side effectively rendering the previously developed server-side components and plug-ins for Report Server unusable.</p><p>When considering the user's viewpoint, a streamlined user interface is crucial for ensuring a positive experience. However, if an application requires a highly tailored user interface, it may present some challenges. As mentioned earlier, the rendering component is limited to a predefined set of HTML and CSS scripts, which can be a potential obstacle.</p><p>In rarer situations, network bandwidth can become a problem. Rendering reports using the ngx-ssrs-reportviewer component takes sometimes significant amount of time because of report size and complexity. Large multi-page reports tend to load slowly because of how the component fetches the report data from the SSRS. The report is rendered in the browser, so the rendering performance can depend on the user's device (CPU, memory, etc.) According to the reference in Figure <ref type="figure" target="#fig_0">2</ref>, obtaining a report involves a lengthy and intricate process. The user must first authenticate on the Report Server before any user interface is displayed. If the user provides incorrect credentials, no user interface will be generated. Unfortunately, this cannot be resolved as the SSRS report viewer relies on basic URL parameter passing. To integrate SSRS with a single-page application, the decision was made to develop a separate service that will be running on a server and handle NTLM authentication transparently to the client. Fortunately, Report Server has several programming extension points along with a rich set of application interfaces.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>4.Integration</head><p>The key aspects that the integration service had to resolve:</p><p>1. Report Server access restrictions to improve security. 2. Reports access restriction to everyone but authenticated and authorized to view users only. 3. NTLM authentication proper and transparent handling.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Report catalog security improvements</head><formula xml:id="formula_0">o N es Y o N es Y</formula><p>Report Server access restriction Any component of the larger system that has no need to be visible should be hidden within. It is a good practice to hide a Report Server from the outside world behind a firewall and expose a connection port only to a machine where the integration service will be run.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Implementation of authorization checking</head><p>The integration service should use a common SSO(Single Sign-On) ticket to prevent unauthorized users from accessing the report rendering and other report functionality without checking who they are. This also improves the security and stability of the system because non-authenticated malicious actors will be unable to sniff a direct Report Server URL and generate malicious requests to the server itself using the same technique ngxssrsreportviewer is using to render a report on a client side.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>NTLM authentication proper and transparent handling</head><p>The integration service should handle authentication on the Report Server transparently to the client itself. Fortunately, modern runtimes have already been developed with proper NTLM authentication mechanisms, and the authentication application will be relatively trivial.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Report Server catalog security improvements</head><p>The integration service should use a set of lowest privileged users for the tasks they will perform. It is also a good security practice to not use an administrative account with full access in the context of any service. Such bad decisions allow malicious actors to steal sensitive information from a service or server where the service is running and further compromise or do damage to the report catalog or the report server itself. It is also clear that after some exploits against the service have been developed, users created for concrete lowaccess tasks will be unable to do any structural or significant damage to the system.</p><p>The integration also shortens report generation for any particular user who has a right to view the report. This is shown in Figure <ref type="figure">3</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Figure 3: Acquisition of report through integration service</head><p>This is an exhaustive but not complete list of problems that the integration service should solve.</p><p>Finally, code, design practices, and software architecture must follow current standards in the software development industry. <ref type="bibr" target="#b7">[9,</ref><ref type="bibr" target="#b9">11]</ref> </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>5.Discussion of obtained results</head><p>Based on design requirements the integration service was developed. It is a RESTful service built on a modern (at the time of writing) .NET 7 runtime with Open Api 3 specification in mind. <ref type="bibr" target="#b10">[12]</ref> Figure <ref type="figure">4</ref> shows the look of the initial stage of documented service endpoints. /reports endpoints fully cover the necessity of report rendering, while /supported-formats endpoint presents the information about supported by SSRS rendering extensions (e.g., PDF, MS Word, MS Excel, etc.).</p><p>Conceptually all available endpoints are served by making calls to the old SOAP Web services on the part of Report Server Presentation Layer engine. URLs for those Web services are abstracted in the configuration layer of the integration service. <ref type="bibr" target="#b6">[8,</ref><ref type="bibr" target="#b8">10]</ref> </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Figure 4: Open Api Endpoints Documentation</head><p>The same is true for authentication information for the internal user with granted rights to render specific catalog reports accessible from the integration service by the service client.</p><p>Here is an example listing of what the initial configuration of the service can look like. The NTLM authentication ticket is passed at the Web service client construction stage and after the construction, no further steps are needed. <ref type="bibr" target="#b8">[10]</ref> The code needed for the authentication process looks like the one on Listing 1.</p><p>The same approach was used for the construction of another Report Server catalog service client.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>6.Conclusion</head><p>Integrating SQL Reporting Services through a standalone native service has several advantages already discussed in this article. It also broadens the scope of application of such integration. The only scope of ngx-ssrs-reportviewer is report rendering, while the discussed service can be used not only for rendering but for other Report Server tasks that can be done programmatically.</p><p>The potential disadvantage of using such an approach is UI availability. SSRS has its UI for report rendering available for users through iframe when using ngx-ssrs-reportviewer but with a standalone service approach, developers need to build an acceptable UI by themselves for paginated reports rendering if their tasks involve preview mode.</p><p>Further research could be devoted to widening the functionality of the integration service itself. Also, research in the security field to prevent some sort of crafted exploits against service may be needed in the future. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>7.References</head></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: Acquisition of report through ngx-ssrs-reportviewer component</figDesc><graphic coords="4,411.65,288.90,81.90,100.10" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>1</head><label></label><figDesc>[ ] I.V. Boyko , M.R. Petryk. Interaction of electrons with acoustic phonons in AlN/GaN resonant tunnelling nanostructures at different temperatures. Condensed Matter Physics, 2020, vol. 23, No. 3, 33708 DOI:10.5488/CMP.23.33708 [2] Petryk, M.R., Boyko, I.V., Khimich, O.M. et al. High-Performance Supercomputer Technologies of Simulation and Identification of Nanoporous Systems with Feedback</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0"><head></head><label></label><figDesc></figDesc><graphic coords="2,163.40,391.65,251.55,225.75" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0"><head></head><label></label><figDesc></figDesc><graphic coords="6,85.45,273.05,424.85,267.65" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>•</head><label></label><figDesc>SQL Server Reporting Services -commercial solution by Microsoft • Power BI Report Server -commercial cloud-based solution by Microsoft. • Jaspersoft -highly scalable commercial open-source solution. •</figDesc><table /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head></head><label></label><figDesc>Lambda function of report execution service client construction with NTLM authentication.</figDesc><table><row><cell>var bindings = new BasicHttpBindings();</cell><cell></cell></row><row><cell>bindings.MaxBufferSize = ssrsSettings.Client.MaxBufferSize;</cell><cell></cell></row><row><cell>bindings.MaxReceivedMessageSize = ssrsSettings.Client.MaxReceivedMessageSize;</cell><cell></cell></row><row><cell>bindings.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;</cell><cell></cell></row><row><cell>bindings.Security.Transport.ClientCredentialType</cell><cell>=</cell></row><row><cell>HttpClientCredentialType.Ntlm;</cell><cell></cell></row><row><cell>var endpointAddress = new EndpointAddress(ssrsSettings.ExecutionServiceUrl);</cell><cell></cell></row><row><cell>var client = new ExecutionServiceSoapClient(bindings, endpointAddress);</cell><cell></cell></row><row><cell>var serviceCredentials =</cell><cell></cell></row><row><cell>new NetworkCredential(ssrsSettings.Authentication.UserName,</cell><cell></cell></row><row><cell>ssrsSettings.Authentication.Password);</cell><cell></cell></row><row><cell>client.ClientCredentials.Windows.ClientCredentials = serviceCredentials;</cell><cell></cell></row><row><cell>client.ClientCredentials.Windows.AllowedImpersonationLevel =</cell><cell></cell></row><row><cell>TokenImpersonationLevel.Impersonation;</cell><cell></cell></row><row><cell>return client;</cell><cell></cell></row><row><cell>}</cell><cell></cell></row><row><cell>Listing 1:</cell><cell></cell></row><row><cell>serviceProvider =&gt;</cell><cell></cell></row><row><cell>{</cell><cell></cell></row><row><cell>var ssrsSettings = serviceProvider.GetRequiredService&lt;IOptions&lt;SSRSOptions&gt;&gt;()</cell><cell></cell></row><row><cell>Value;</cell><cell></cell></row></table></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">n-Component Competitive Adsorption</title>
		<idno type="DOI">10.1007/s10559-021-00357-7</idno>
		<ptr target="https://doi.org/10.1007/s10559-021-00357-7" />
	</analytic>
	<monogr>
		<title level="j">Cybern Syst Anal</title>
		<imprint>
			<biblScope unit="volume">57</biblScope>
			<biblScope unit="page" from="316" to="328" />
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<title level="m" type="main">Pro SQL Server 2012 Reporting Services (Expert&apos;s Voice in SQL Server)</title>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">K</forename><surname>Mcdonald</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Mcgehee</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Landrum</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2012">2012</date>
			<publisher>Apress</publisher>
			<pubPlace>Berkeley, CA</pubPlace>
		</imprint>
	</monogr>
	<note>3rd ed</note>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<author>
			<persName><forename type="first">B</forename><surname>Larson</surname></persName>
		</author>
		<title level="m">Microsoft SQL Server 2016 Reporting Services, Fifth Edition</title>
				<meeting><address><addrLine>New York, NY</addrLine></address></meeting>
		<imprint>
			<publisher>McGraw Hill</publisher>
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
	<note>5th ed</note>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<author>
			<persName><forename type="first">S</forename><surname>Misner</surname></persName>
		</author>
		<title level="m">Microsoft SQL Server 2012 Reporting Services</title>
				<meeting><address><addrLine>Redmond, WA</addrLine></address></meeting>
		<imprint>
			<publisher>Microsoft Press</publisher>
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
	<note>1st ed</note>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Machanic</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Aitchison</surname></persName>
		</author>
		<title level="m">Expert SQL Server 2008 Development</title>
				<meeting><address><addrLine>Berkeley, CA</addrLine></address></meeting>
		<imprint>
			<publisher>Apress</publisher>
			<date type="published" when="2009">2009</date>
		</imprint>
	</monogr>
	<note>1st ed</note>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">NET Core 5 and Angular: Hands-On Full Stack Development with</title>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">De</forename><surname>Sanctis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">NET 5 and Angular</title>
				<imprint>
			<publisher>Packt</publisher>
			<date type="published" when="2021">2021</date>
			<biblScope unit="volume">11</biblScope>
		</imprint>
	</monogr>
	<note>ASP. 4th ed</note>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">NET Web API 2: Building a REST Service from Start to Finish</title>
		<author>
			<persName><forename type="first">J</forename><surname>Kurtz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Wortman</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ASP</title>
				<meeting><address><addrLine>Berkeley, CA</addrLine></address></meeting>
		<imprint>
			<publisher>Apress</publisher>
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
	<note>2nd ed</note>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<title level="m" type="main">Clean Code: A Handbook of Agile Software Craftsmanship</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">C</forename><surname>Martin</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2008">2008</date>
			<pubPlace>Pearson, London</pubPlace>
		</imprint>
	</monogr>
	<note>1st ed</note>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Troelsen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Japikse</surname></persName>
		</author>
		<title level="m">Pro C# 10 with .NET 6</title>
				<meeting><address><addrLine>Berkeley, CA</addrLine></address></meeting>
		<imprint>
			<publisher>Apress</publisher>
			<date type="published" when="2022">2022</date>
		</imprint>
	</monogr>
	<note>11st ed</note>
</biblStruct>

<biblStruct xml:id="b9">
	<monogr>
		<title level="m" type="main">NET -Architecting Applications for the Enterprise</title>
		<author>
			<persName><forename type="first">D</forename><surname>Esposito</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Saltarello</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Microsoft</forename></persName>
		</author>
		<imprint>
			<date type="published" when="2014">2014</date>
			<publisher>Microsoft Press</publisher>
			<pubPlace>Redmond, WA</pubPlace>
		</imprint>
	</monogr>
	<note>2nd ed</note>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Architecting Modern Web Applications with ASP</title>
		<author>
			<persName><forename type="first">S</forename><surname>Smith</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">NET, and Visual Studio product teams</title>
				<meeting><address><addrLine>Redmond, WA</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2023">2023</date>
		</imprint>
		<respStmt>
			<orgName>Microsoft Developer Division</orgName>
		</respStmt>
	</monogr>
	<note>NET Core and Azure</note>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
