<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Jeff Sani's Blogito</title>
	<atom:link href="http://jeffsani.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jeffsani.wordpress.com</link>
	<description>My Somewhat Technical Musings...</description>
	<lastBuildDate>Fri, 18 Nov 2011 01:43:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jeffsani.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/2d3d653cbda01e3543fffb83b8ba8d83?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Jeff Sani's Blogito</title>
		<link>http://jeffsani.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jeffsani.wordpress.com/osd.xml" title="Jeff Sani&#039;s Blogito" />
	<atom:link rel='hub' href='http://jeffsani.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Solving OWA Attachment Security with Citrix NetScaler</title>
		<link>http://jeffsani.wordpress.com/2011/09/22/owa-attachment-security-and-netscaler/</link>
		<comments>http://jeffsani.wordpress.com/2011/09/22/owa-attachment-security-and-netscaler/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 18:56:00 +0000</pubDate>
		<dc:creator>nerdlingerer</dc:creator>
				<category><![CDATA[Citrix]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[NetScaler]]></category>
		<category><![CDATA[OWA]]></category>
		<category><![CDATA[Remote Access]]></category>
		<category><![CDATA[SSL VPN]]></category>
		<category><![CDATA[AAA Traffic Management]]></category>
		<category><![CDATA[Access Gateway]]></category>
		<category><![CDATA[Citrix NetScaler]]></category>
		<category><![CDATA[OWA Attachment Security]]></category>

		<guid isPermaLink="false">https://jeffsani.wordpress.com/?p=168</guid>
		<description><![CDATA[What’s the problem exactly? With the rise of the availability of web based applications, web based versions of their client-server counterparts, and workforce mobility, comes the increased risk of potentially leaving behind sensitive information on remote devices not under the control of corporate IT.&#160; While there are no 100% solutions to this problem, organizations can [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=168&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2><strong>What’s the problem exactly?</strong></h2>
<p>With the rise of the availability of web based applications, web based versions of their client-server counterparts, and workforce mobility, comes the increased risk of potentially leaving behind sensitive information on remote devices not under the control of corporate IT.&#160; While there are no 100% solutions to this problem, organizations can implement numerous preventative measures to deal with it which are available from the developer as well as 3rd party technologies.</p>
<p>Microsoft Outlook Web Access is no exception to this problem and is often at the forefront of the concerns of security teams because of it’s popularity and the fact it is very often exposed to the public internet so that mobile work forces can remain productive from anywhere.&#160; This is of course exacerbated by the fact that OWA and other web based email interfaces like it provide access to email attachments.&#160; These attachments, when opened, are cached in a browser’s Temporary Internet Files folder or worse perhaps saved to a folder location that is easily accessible by anyone.&#160; End-users could potentially walk-away from these devices leaving corporate information behind to possibly be exploited for malicious purposes.&#160; </p>
<p>As mentioned, there is no solution that is 100% safe to the aforementioned problem.&#160; There are numerous solutions to these issues, ranging from <a href="http://www.citrix.com/English/ps2/products/product.asp?contentID=15005&amp;ntref=prod_top" target="_blank">VPN Cleanup Agents</a>, to access via Virtualization technologies such as <strong><a href="http://www.citrix.com/English/ps2/products/product.asp?contentID=186&amp;ntref=prod_top" target="_blank">Citrix XenApp</a></strong><strong></strong> or <strong><a href="http://www.citrix.com/English/ps2/products/product.asp?contentID=163057&amp;ntref=prod_top" target="_blank"><strong>Citrix</strong> XenDesktop</a></strong>, to proxy devices such as <a href="http://www.citrix.com/English/ps2/products/product.asp?contentID=21679&amp;ntref=prod_top" target="_blank">Citrix NetScaler</a>.&#160; Each method has their own set of pros and cons and have varying levels of cost and preventative .&#160; This article focuses on utilizing the power of Citrix NetScaler ADC</p>
<h2><strong>How can one solve this problem?</strong></h2>
<p>Starting with Exchange Server 2007, Microsoft introduced the concept of Public and Private computers allowing end-users to select whether their end device was to be trusted or not.&#160; </p>
<div align="center">
<table border="0" cellspacing="0" cellpadding="0" width="550" align="center">
<tbody>
<tr>
<td valign="top" width="274"><a href="http://jeffsani.files.wordpress.com/2011/11/image.png" target="_blank"><img style="display:inline;border-width:0;margin:5px;" title="image" border="0" alt="image" src="http://jeffsani.files.wordpress.com/2011/11/image_thumb.png?w=244&#038;h=222" width="244" height="222" /></a></td>
<td valign="top" width="274"><a href="http://jeffsani.files.wordpress.com/2011/11/image3.png" target="_blank"><img style="display:inline;border-width:0;margin:5px;" title="image" border="0" alt="image" src="http://jeffsani.files.wordpress.com/2011/11/image3_thumb.png?w=244&#038;h=222" width="244" height="222" /></a></td>
</tr>
<tr>
<td valign="top" width="274"><strong>OWA 2007 Login Form</strong></td>
<td valign="top" width="274"><strong>OWA 2010 Logon Form</strong></td>
</tr>
</tbody>
</table></div>
<p>On the Exchange Server end, these options pertain to settings that can be used to control the behaviour of how attachments are dealt with.&#160; These include the ability to block all attachment access or allow attachment access but only via the built-in document conversion utilities which convert the attachment to HTML for view right in the browser.</p>
<table border="0" cellspacing="0" cellpadding="2" width="550">
<tbody>
<tr>
<td valign="top" width="274">
<p align="center"><a href="http://jeffsani.files.wordpress.com/2011/11/image11.png" target="_blank"><img style="display:block;float:none;border-width:0;margin:5px auto;" title="image" border="0" alt="image" src="http://jeffsani.files.wordpress.com/2011/11/image11_thumb.png?w=244&#038;h=285" width="244" height="285" /></a></p>
</td>
<td valign="top" width="274"><a href="http://jeffsani.files.wordpress.com/2011/11/image8.png"><img style="display:block;float:none;border-width:0;margin:5px auto;" title="image" border="0" alt="image" src="http://jeffsani.files.wordpress.com/2011/11/image8_thumb.png?w=270&#038;h=285" width="270" height="285" /></a></td>
</tr>
<tr>
<td valign="top" width="274" align="center">
<p align="center">Disallow all attachment access or only allow file preview</p>
</td>
<td valign="top" width="275">Allow attachments with restrictions or certain file types only or force use of file preview</td>
</tr>
</tbody>
</table>
<p>These settings in turn control the end-user experience with regards to attachment access.&#160; </p>
<div></div>
<table border="0" cellspacing="0" cellpadding="2" width="563">
<tbody>
<tr>
<td valign="top" width="561"><a href="http://jeffsani.files.wordpress.com/2011/11/image1.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://jeffsani.files.wordpress.com/2011/11/image_thumb1.png?w=554&#038;h=203" width="554" height="203" /></a></td>
</tr>
<tr>
<td valign="top" width="561">Public computer with no access to attachment</td>
</tr>
<tr>
<td valign="top" width="561"><a href="http://jeffsani.files.wordpress.com/2011/11/image2.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://jeffsani.files.wordpress.com/2011/11/image_thumb2.png?w=554&#038;h=194" width="554" height="194" /></a> <a href="http://jeffsani.files.wordpress.com/2011/11/image1.png"></a></td>
</tr>
<tr>
<td valign="top" width="561">Private computer with attachment access and preview</td>
</tr>
</tbody>
</table>
<h2>Giving end-users the control is <u>not</u> the answer </h2>
<p>All of the above are great options if you actually trust your end users to select the correct option at login to classify the type of device or location they are accessing your network from. But a more realistic solution is to profile the device, user, or location and enforce the behaviours based on this discovery information.&#160; Some examples of the information you could base a decision on include:</p>
<ul>
<li><font color="#656565">Client IP Source Address</font> </li>
<li><font color="#656565">SSL Certificate Auth/Details</font> </li>
<li><font color="#656565">Browser/Device Type</font> </li>
<li><font color="#656565">User Identity or Group Membership</font> </li>
<li><font color="#656565">Presence of Anti-Virus or Anti-Spam software</font> </li>
</ul>
<h2>How can <a href="http://www.citrix.com/English/ps2/products/product.asp?contentID=21679&amp;ntref=prod_top" target="_blank">Citrix NetScaler</a> ADC help?&#160; </h2>
<p>NetScaler has three core features which can be leveraged to secure Outlook Web Access attachment functionality based on the methods described above. The NetScaler AAATM feature (Authentication, Authorization, and Accounting for Traffic Management) enables the ability to use the NetScaler to perform authentication to user account directories based on LDAP, RADIUS, TACACS+, or Client SSL certificates.&#160; Secondly, Access Gateway functionality provides bi-directional SSL VPN tunnelling and ICA Proxy capabilities and adds the ability to perform endpoint analysis to the aforementioned AAA features provided by AAATM.&#160; And lastly, the NetScaler Rewriting feature allows us to alter or inject html in Requests and Responses based on conditions we define by the very extensible AppExpert policy engine.&#160; </p>
<p>Instead of letting the End User control the attachment behavior, the NetScaler can be inserted in front of the solution to provide </p>
<ul>
<li><strong>DMZ Authentication and Authorization</strong> </li>
<li><strong>Single Sign-On to Outlook Web Access</strong> </li>
<li><strong>Attachment control based on end user, location, or device attributes</strong> </li>
</ul>
<p><font color="#697c83">In the configuration example below, Source Address and Group Membership are chosen for example to determine the level of attachment security applied to the session.</font></p>
<p><a href="http://jeffsani.files.wordpress.com/2011/11/image4.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://jeffsani.files.wordpress.com/2011/11/image_thumb3.png?w=554&#038;h=288" width="554" height="288" /></a> </p>
<p>In addition to providing attachment security, Citrix NetScaler can be leveraged to provide High Availability, High Scalability, and Consolidation through additional on-box features such as SSL Offload, Content Switching, Load Balancing, Content Compression, and Integrated Cache.&#160; </p>
<p><a href="http://jeffsani.files.wordpress.com/2011/11/owa_tmaaa_example.jpg"><img style="display:inline;border-width:0;" title="owa_tmaaa_example" border="0" alt="owa_tmaaa_example" src="http://jeffsani.files.wordpress.com/2011/11/owa_tmaaa_example_thumb.jpg?w=554&#038;h=360" width="554" height="360" /></a>     </p>
<h4><strong><font color="#808000"><a title="Sample NetScaler AAATM Configuration for OWA 2010" href="http://www.jeffsani.com/downloads/owa_attachment_config.txt" target="_blank">Sample NetScaler AAATM Configuration for OWA 2010</a></font><font color="#808000">        </p>
<p></font></strong><strong><font color="#808000">Sample Access Gateway Configuration (coming soon) </font></strong></h4>
<h4><strong><font color="#808000">       <br /></font></strong><strong>More Information</strong></h4>
<ul>
<li><a title="Citrix NetScaler Deployment Guide for Microsoft Exchange 2010" href="http://www.citrix.com/site/resources/dynamic/salesdocs/netscaler_exchange2010.pdf" target="_blank">Citrix NetScaler Deployment Guide for Microsoft Exchange 2010</a> </li>
<li><a title="Citrix NetScaler AppExpert Template for OWA" href="http://community.citrix.com/display/ns/AppExpert+Templates" target="_blank">Citrix NetScaler AppExpert Template for Outlook Web Access</a> </li>
<li><a title="How to Configure Single Sign-On for Outlook Web Access 2010" href="http://support.citrix.com/article/CTX128197" target="_blank">How to Configure Single Sign-On for Outlook Web Access 2010</a> </li>
<li><a title="How to Configure Single Sign-On for Outlook Web Access 2007" href="http://support.citrix.com/article/CTX129182" target="_blank">How to Configure Single Sign-On for Outlook Web Access 2007</a> </li>
</ul>
</p>
<p>&#160;</p>
<p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2e4c680b-2c7d-41c4-807a-8a3a8ae43843" class="wlWriterEditableSmartContent">del.icio.us Tags: <a href="http://del.icio.us/popular/OWA+Attachment+Security" rel="tag">OWA Attachment Security</a>,<a href="http://del.icio.us/popular/Citrix+NetScaler" rel="tag">Citrix NetScaler</a>,<a href="http://del.icio.us/popular/AAA+Traffic+Management" rel="tag">AAA Traffic Management</a>,<a href="http://del.icio.us/popular/Access+Gateway" rel="tag">Access Gateway</a></div></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffsani.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffsani.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffsani.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffsani.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffsani.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffsani.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffsani.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffsani.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffsani.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffsani.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffsani.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffsani.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffsani.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffsani.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=168&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffsani.wordpress.com/2011/09/22/owa-attachment-security-and-netscaler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f5b76a54c625fc7b9488b315b43ff60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nerdlingerer</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image3_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image11_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image8_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/owa_tmaaa_example_thumb.jpg" medium="image">
			<media:title type="html">owa_tmaaa_example</media:title>
		</media:content>
	</item>
		<item>
		<title>Symphony Skin for Citrix NetScaler</title>
		<link>http://jeffsani.wordpress.com/2011/03/26/symphony-skin-for-netscaler-access-gateway-enterprise/</link>
		<comments>http://jeffsani.wordpress.com/2011/03/26/symphony-skin-for-netscaler-access-gateway-enterprise/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 03:22:25 +0000</pubDate>
		<dc:creator>nerdlingerer</dc:creator>
				<category><![CDATA[Citrix]]></category>
		<category><![CDATA[NetScaler]]></category>
		<category><![CDATA[SSL VPN]]></category>
		<category><![CDATA[Access Gateway]]></category>
		<category><![CDATA[Citrix NetScaler]]></category>
		<category><![CDATA[Symphony Theme]]></category>

		<guid isPermaLink="false">https://jeffsani.wordpress.com/2011/03/26/symphony-skin-for-netscaler-access-gateway-enterprise/</guid>
		<description><![CDATA[Overview: So for those of you who tire of the old Caxton style of Citrix NetScaler, this article will be of great interest to you. This theme will update the look and feel of NetScaler AAATM/Access Gateway Enterprise to the new Symphony theme which you have likely already seen in Web Interface 5.4. How to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=105&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div align="center">
<table border="0" cellspacing="0" cellpadding="2" width="551" align="center">
<tbody>
<tr>
<td valign="top" width="274"><strong><a href="http://jeffsani.files.wordpress.com/2011/11/image31.png" target="_blank"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="login" border="0" alt="login" src="http://jeffsani.files.wordpress.com/2011/11/image3_thumb1.png?w=204&#038;h=119" width="204" height="119" /></a></strong></td>
<td valign="top" width="275"><strong><a href="http://jeffsani.files.wordpress.com/2011/11/clip_image002.jpg" target="_blank"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;margin:0 5px;" title="portal" border="0" alt="portal" src="http://jeffsani.files.wordpress.com/2011/11/clip_image002_thumb.jpg?w=204&#038;h=119" width="204" height="119" /></a></strong></td>
</tr>
<tr>
<td valign="top" width="274"><strong><a href="http://jeffsani.files.wordpress.com/2011/11/agee_symphony_choices.jpg"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="choices" border="0" alt="choices" src="http://jeffsani.files.wordpress.com/2011/11/agee_symphony_choices_thumb.jpg?w=204&#038;h=119" width="204" height="119" /></a></strong></td>
<td valign="top" width="275"><a href="http://jeffsani.files.wordpress.com/2011/11/image5.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://jeffsani.files.wordpress.com/2011/11/image_thumb4.png?w=204&#038;h=119" width="204" height="119" /></a> </td>
</tr>
</tbody>
</table></div>
<h2><font size="3"><strong>Overview:</strong></font></h2>
<p>So for those of you who tire of the old Caxton style of Citrix NetScaler, this article will be of great interest to you. This theme will update the look and feel of NetScaler AAATM/Access Gateway Enterprise to the new Symphony theme which you have likely already seen in Web Interface 5.4. </p>
<h2><font size="3"><strong>How to Implement the Skin: </strong></font></h2>
<p><font size="3"><strong></strong></font>Since this is a post-build customization, you will need to perform some special steps to ensure that the customizations survive a reboot of the appliance or vpx. At NetScaler initialization, the UI files are copied from the flash drive to the /netscaler directory so anything located there will be overwritten.&#160; </p>
<ol>
<li>Download the attached Symphony.gz file to your local computer or management server </li>
<li>Use an SFTP or SCP file transfer client such as <a href="http://filezilla-project.org/" target="_blank">Filezilla</a> or <a href="http://winscp.net/eng/index.php" target="_blank">WinSCP</a> to create a <strong>customizations</strong> folder under <strong>/var/vpn</strong> and then copy the <strong>symphony.gz</strong> archive to the <strong>/var/vpn/customizations</strong> location </li>
<li>Log-in to the Command Line Interface with an SSH client like <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank">Putty</a> or the local console and run the following command:
<p><strong>tar –xzvf Symphony.gz        <br /></strong></li>
<li>Follow the steps below to update the files which contain build-specific references.      </li>
</ol>
<h2><font size="3"><strong>NetScaler Build Version Specific Changes:</strong><strong> </strong></font></h2>
<p> <strong></strong>
<p><strong><font size="3"></font></strong><strong><font size="3"></font></strong>Several files in the AGEE UI have the build version embedded in various URLS. These are normally updated during the build process to reflect the current version but must be done manually here since this is an off-box Skin. Text in <strong><font color="#ff0000">bold</font></strong> <font color="#ff0000"><strong>red</strong></font> indicate the required version specific change.</p>
<p>Find your Build number in the NS Management UI or via the shell:</p>
<p><font face="Courier New">&gt; show ver      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; NetScaler <font color="#ff0000"><strong>NS9.3</strong></font>: Build <font color="#ff0000"><strong>51.5</strong></font>.nc, Date: Sep 30 2011, 16:42:16       <br />Done</font></p>
<p>Use the <strong>find</strong> and <strong>sed</strong> commands in the shell to replace the build specific information found in various files of the UI.&#160; </p>
<p><font face="Courier New">&gt; shell      <br /># find /var/vpn/customizations/Symphony/ns_gui -type f -exec sed –i ‘’ ‘s/9\.2\.48\.6/<font color="#ff0000"><strong>9</strong></font>\.<font color="#ff0000"><strong>3</strong></font>\.<font color="#ff0000"><strong>51</strong></font>\.<font color="#ff0000"><strong>5</strong></font>/g’ {} \;       <br /># find /var/vpn/customizations/Symphony/ns_gui -type f -exec sed –i ‘’ ‘s/9\,2\,48\,6/<font color="#ff0000"><strong>9</strong></font>\,<font color="#ff0000"><strong>3</strong></font>\,<font color="#ff0000"><strong>51</strong></font>\,<font color="#ff0000"><strong>5</strong></font>/g’ {} \;</font></p>
<p><em><strong>Note:</strong> You will need to run the above commands with the correct build number each time you update the build on the box or you will encounter issues with the functionality of the UI. All quotes are single quotes.</em></p>
<p>The modified file list should include:</p>
<ul>
<li><strong>ns_gui/vpns/f_ndisagent.html &#8211; line 124:        <br /></strong><font face="Courier New">image.src = &quot;http://localhost:&quot;+agentPort+&quot;/svc?NSC_AAAC=&quot;+ns_aaac+&quot;&amp;nsloc=&quot;+nsloc+&quot;&amp;nsversion=<font color="#ff0000"><strong>9.3.51.5</strong></font>&amp;nstrace=DEBUG&amp;nsvip=255.255.255.255&amp;nstdi=ON&quot;;</font> </li>
<li><strong>ns_gui/vpns/</strong><strong>f_services.html – line 71:        <br /></strong><font face="Courier New">image.src = &quot;http://localhost:&quot;+agentPort+&quot;/svc?NSC_AAAC=&quot;+ns_aaac+&quot;&amp;nsloc=&quot;+nsloc+&quot;&amp;nsversion=<font color="#ff0000"><strong>9,3,51,5</strong></font>&amp;nstrace=DEBUG&amp;nsvip=255.255.255.255&amp;nstdi=ON&quot;;</font> </li>
<li><strong>ns_gui/vpns/postepa.html –</strong> <strong>line 71        <br /></strong><font face="Courier New"><strong>var</strong> <strong>nsversion=&quot;<font color="#ff0000">9,3,51,5</font></strong>&quot;; </font></li>
<li><strong>ns_gui/epa/epa.html – line 19:        <br /></strong><font face="Courier New"><strong>var</strong> <strong>nsversion=&quot;<font color="#ff0000">9,3,51,5</font></strong>&quot;; </font></li>
</ul>
<h2><strong><font size="3">Copy Content to Working Directory:</font></strong></h2>
<p><font size="3"><strong></strong></font>Once you are done editing the above files, copy the customized content to the active working directory where the UI is loaded from with the following steps:</p>
<ol>
<li>Log-in again to the Command Line Interface with an SSH client the local console and run the following command:      </p>
<p><strong>cp -rf /var/vpn/customizations/Symphony/ /netscaler/&#160; <br /></strong></li>
</ol>
<h2><font size="3"><strong>To Persist the Changes: </strong></font></h2>
<p><strong><font size="3"></font></strong>To persist the changes through a reboot, browse to the <strong>/flash/nsconfig directory</strong> and edit <strong>rc.netscaler</strong> with the following command on a new line: </p>
<ol>
<li><strong>cd /flash/nsconfig </strong></li>
<li><strong>touch rc.netscaler </strong></li>
<li><strong>echo cp -rf /var/vpn/customizations/Symphony/ /netscaler/ &gt;&gt; rc.netscaler</strong> </li>
</ol>
<p><em><strong>Note:</strong> If the file rc.netscaler does not exist, you will need to create it but if you have previously configured NTP settings, this file should already exist and you will already see an entry for NTP source servers there</em> </p>
<h2><strong><font size="3">Testing Notes:</font></strong></h2>
<ul>
<li>When testing the new skin, be sure to clear your browser cache via Ctrl-F5 if you had previously loaded the default theme </li>
<li>If you have the Integrated Cache enabled on the NetScaler, you may also need to flush or invalidate the Access Gateway specific portal content<strong> </strong></li>
</ul>
<p></p>
<h2><img style="display:inline;margin-left:0;margin-right:0;border-width:0;" title="zip" border="0" alt="zip" align="left" src="http://www.jeffsani.com/downloads/zip.jpg" width="46" height="38" />&#160; <a title="Symphony Skin for Citrix NetScaler" href="http://www.jeffsani.com/downloads/Symphony.gz">Download Symphony Theme for NetScaler Access Gateway and AAATM 9.3</a><br />
<h2><strong><font color="#0080ff" size="3"></font></strong></h2>
<p><strong></strong></p>
<h2><font size="3"><strong>Acknowledgements</strong> </font></h2>
<p><font size="2">Special shout out to Jesse Boehm and team of Techstur.com for the creation of this skin.&#160; Techstur.com is a pioneer in the field of </font><a href="http://www.techstur.com/Solutions/ICS/Tech.aspx" target="_blank"><font size="2">Interface Customization Services</font></a><font size="2">, adding clients’ branding elements to the Web interfaces that employees, customers and vendors rely on for application delivery and remote access. Techstur.com customizes many of the most widely-used interfaces, including all versions of Citrix Web Interface, Citrix NetScaler, Citrix Access Gateway, Microsoft Outlook Web App, Microsoft Outlook Web Access, Microsoft RD Web Access, Microsoft Threat Management Gateway 2010 and a number of others. Visit their company website </font><a href="http://www.techstur.com/"><font size="2">techstur.com</font></a>       </p>
</h2>
<p>Thanks as well to Jonathan Devenish for the slick streamlined <strong>sed</strong> command method of find and replace in the shell</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e118256d-09aa-462f-89e6-8791658f4e7a" class="wlWriterEditableSmartContent">del.icio.us Tags: <a href="http://del.icio.us/popular/Citrix+NetScaler" rel="tag">Citrix NetScaler</a>,<a href="http://del.icio.us/popular/Access+Gateway" rel="tag">Access Gateway</a>,<a href="http://del.icio.us/popular/Symphony+Theme" rel="tag">Symphony Theme</a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffsani.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffsani.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffsani.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffsani.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffsani.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffsani.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffsani.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffsani.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffsani.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffsani.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffsani.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffsani.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffsani.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffsani.wordpress.com/105/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=105&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffsani.wordpress.com/2011/03/26/symphony-skin-for-netscaler-access-gateway-enterprise/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f5b76a54c625fc7b9488b315b43ff60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nerdlingerer</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image3_thumb1.png" medium="image">
			<media:title type="html">login</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/clip_image002_thumb.jpg" medium="image">
			<media:title type="html">portal</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/agee_symphony_choices_thumb.jpg" medium="image">
			<media:title type="html">choices</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2011/11/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://www.jeffsani.com/downloads/zip.jpg" medium="image">
			<media:title type="html">zip</media:title>
		</media:content>
	</item>
		<item>
		<title>Citrix NetScaler Visio Stencils</title>
		<link>http://jeffsani.wordpress.com/2010/04/02/citrix-netscaler-visio-stencils/</link>
		<comments>http://jeffsani.wordpress.com/2010/04/02/citrix-netscaler-visio-stencils/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 19:16:41 +0000</pubDate>
		<dc:creator>nerdlingerer</dc:creator>
				<category><![CDATA[Citrix]]></category>
		<category><![CDATA[NetScaler]]></category>

		<guid isPermaLink="false">http://jeffsani.wordpress.com/?p=97</guid>
		<description><![CDATA[This is for those of you out there that have struggled to find a complete set of Microsoft Visio stencils for the Citrix NetScaler product line. Enjoy! Citrix NetScaler Visio Stencils<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=97&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is for those of you out there that have struggled to find a complete set of Microsoft Visio stencils for the Citrix NetScaler product line. Enjoy!</p>
<p><a title="Citrix NetScaler Visio Stencils" rel="tag" href="http://www.jeffsani.com/downloads/NetScaler.zip" target="_blank">Citrix NetScaler Visio Stencils</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffsani.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffsani.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffsani.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffsani.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffsani.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffsani.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffsani.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffsani.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffsani.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffsani.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffsani.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffsani.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffsani.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffsani.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=97&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffsani.wordpress.com/2010/04/02/citrix-netscaler-visio-stencils/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f5b76a54c625fc7b9488b315b43ff60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nerdlingerer</media:title>
		</media:content>
	</item>
		<item>
		<title>How to Automate SQL Mirroring</title>
		<link>http://jeffsani.wordpress.com/2009/03/17/how-to-automate-sql-mirroring/</link>
		<comments>http://jeffsani.wordpress.com/2009/03/17/how-to-automate-sql-mirroring/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 20:26:13 +0000</pubDate>
		<dc:creator>nerdlingerer</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[TSQL]]></category>
		<category><![CDATA[SQL 2005]]></category>
		<category><![CDATA[SQL Automation]]></category>
		<category><![CDATA[SQL Mirroring]]></category>

		<guid isPermaLink="false">http://jeffsani.wordpress.com/?p=29</guid>
		<description><![CDATA[4 T-SQL scripts to help you automate the configuration of Database Mirroring<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=29&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Starting with SQL 2005 SP1 Standard Edition, you had the ability to setup and configure Database Mirroring.  This was a step up from the previous Data Replication options of Log Shipping (Only available in SQL 2000 Enterprise), and Database Publishing/Subscription and more cost effective than SQL Clustering as a means to provide local redundancy for your databases.  The process of setting up DB Mirroring is a manual one.  You must either use the management Console UI Wizard, or perform the like steps through individual T-SQL Scripts.  There is currently no way to configure SQL initially to create Mirrors of your databases that you create by inputting the name of another SQL Server somewhere.</p>
<p>At one of my previous jobs, I was tasked with automating this for a Hosting Environment where the creation of Databases was dynamic and part of a sign-up process for a SaaS web application. Since many databases could be created throughout a given day, it was desired to have a means to automatically create redundancy for those databases via SQL Mirroring.  So I starting investigating how this could be done.  The individual steps were easily scriptable to setup mirring.  It was the creation of the Database event that I needed to have visibility on since databases could be created from the SQL Server Management Console, the Web Application Managed Code, or the Administration Management Console for the web application.  The logical place for this was on the SQL Server.  I had worked with Triggers before so I decided to start looking there.</p>
<p>Regular DML triggers would not work since those fire in response to UPDATE, INSERT, or DELETE statements on a table or view. DDL Triggers however, fire in response to a variety of Data Definition Language (DDL) events. These events primarily correspond to Transact-SQL statements that start with the keywords CREATE, ALTER, and DROP.   This was obviously a perfect fit for the solution as I needed to have visibility over CREATE DATABASE events.  Now I was ready.</p>
<p><strong>Prerequisites and Preliminary Steps</strong></p>
<ul>
<li>Setup and Configure a Secondary SQL Server (Should be identical to source server &#8211; version, service pack, and license type)</li>
<li>Enable TCP/IP protocol for SQL Server in Connections</li>
<li>Setup a Network Share for Backup ad Restore operations &#8211; something like \\dfsroot\sqlbackup</li>
<li>Enable use of xp_cmdshell stored procedure (Surface Area Configuration Tool or Facet if using SQL 2008)</li>
</ul>
<p>It is unfortunately not possible to just create a trigger to perform all the actions you desire &#8211; I tried that first <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .  So this method involves the creation of 4 components &#8211; an <span style="text-decoration:underline;">event sink table</span>, a workload <span style="text-decoration:underline;">stored procedure</span>, a <span style="text-decoration:underline;"><a title="DDL Triggers" href="http://msdn.microsoft.com/en-us/library/ms175941.aspx" target="_blank">Data Definition Language (DDL) Trigger</a></span>, and a <span style="text-decoration:underline;">SQL Server Agent Job</span> which executes the aforementioned stored procedure on a desired interval.</p>
<p><strong>Script 1 &#8211; Create an Event Sink Table<br />
</strong>This table will hold the names and events of the SQL events where a CREATE database action occurred. The event type is really no necessary since we are ony interested in the Database Name<strong><br />
</strong></p>
<p>USE [master]<br />
GO<br />
/****** Object:  Table [dbo].[new_db_table]    Script Date: 05/19/2008 15:26:56 ******/<br />
SET ANSI_NULLS ON<br />
GO<br />
SET QUOTED_IDENTIFIER ON<br />
GO<br />
CREATE TABLE [dbo].[new_db_table](<br />
[name] [nvarchar](100) NULL,<br />
[event] [nvarchar](100) NULL<br />
) ON [PRIMARY]</p>
<p><strong>Script 2 &#8211; Create the Automation Stored Procedure<br />
</strong>This is the main script that does the job of checking the actions table, performing the initial backupsIn SQL 2005, there is no database event for an attach database action even though in reality this is a CREATE_DATABASE event.  This is resolved in SQL 2008 which will cause the trigger to add an entry in the actions table for both ATTACH and CREATE actions.</p>
<p>USE [master]<br />
GO<br />
/****** Object:  StoredProcedure [dbo].[sp_auto_mirror_config]    Script Date: 07/10/2008 10:56:15 ******/<br />
SET ANSI_NULLS ON<br />
GO<br />
SET QUOTED_IDENTIFIER ON<br />
GO</p>
<p>&#8211; ============================================================================<br />
&#8211; Author:        &lt;Jeff Sani,jeffs@sitemasher.com&gt;<br />
&#8211; Create date: &lt;4/9/2008&gt;<br />
&#8211; Description:    &lt;This stored proc automates the configuration of db mirroring&gt;<br />
&#8211; Syntax:      &lt;exec sp_auto_mirror_config&gt;<br />
&#8211; =============================================================================</p>
<p>CREATE proc [dbo].[sp_auto_mirror_config]<br />
as<br />
declare @dbname sysname, @bckstmt nvarchar(500), @cmd varchar(250), @bupath varchar(100)<br />
declare @mirrorsp nvarchar(100), @mirrorsql nvarchar(500), @altersql nvarchar(250)<br />
declare @primarysrvr nvarchar(50), @mirrorsrvr nvarchar(50), @witnesssrvr nvarchar(50), @domain nvarchar(50)</p>
<p>&#8211;set your sql server and backup paths here<br />
set @bupath = &#8216;\\sql1\sqlbackup&#8217;<br />
set @primarysrvr = &#8216;sql1&#8242;<br />
set @mirrorsrvr = &#8216;sql2&#8242;<br />
set @domain = &#8216;.staging.local&#8217;<br />
set @witnesssrvr = &#8216;smres2&#8242;<br />
set @mirrorsp = @mirrorsrvr + &#8216;.master.dbo.sp_executesql &#8216;</p>
<p>begin<br />
if (select count(*) from new_db_table where event = &#8216;CREATE_DATABASE&#8217;) &gt; 0<br />
begin<br />
create table #userdbs (name sysname)<br />
insert into #userdbs select name from new_db_table<br />
declare cdb cursor for select name from #userdbs<br />
open cdb<br />
fetch cdb into @dbname<br />
while @@fetch_status = 0<br />
begin</p>
<p>&#8211;Check to make sure that Auto_Close and Auto_Shrink DB Properties are correct and that Recovery is Full<br />
set     @altersql = &#8216;alter database &#8216; + char(91) + @dbname + char(93) + &#8216; set AUTO_CLOSE off&#8217;<br />
exec (@altersql)</p>
<p>set     @altersql = &#8216;alter database &#8216; + char(91) + @dbname + char(93) + &#8216; set AUTO_SHRINK on&#8217;<br />
exec (@altersql)</p>
<p>set     @altersql = &#8216;alter database &#8216; + char(91) + @dbname + char(93) + &#8216; set RECOVERY full&#8217;<br />
exec (@altersql)</p>
<p>&#8211;perform initial database backup<br />
set @bckstmt = &#8216;backup database &#8216; + char(91) + @dbname + char(93)+ &#8216; to &#8216; +<br />
&#8216;disk = N&#8217; + char(39) + @bupath  + &#8216;\&#8217; + @dbname + &#8216;.bak&#8217; + char(39)<br />
exec (@bckstmt)</p>
<p>&#8211;perform initial database log backup<br />
set @bckstmt = &#8216;backUp log &#8216; + char(91) + @dbname + char(93)+ &#8216; to &#8216; +<br />
&#8216;disk = N&#8217; + char(39)  + @bupath  + &#8216;\&#8217; + @dbname + &#8216;_log.bak&#8217; + char(39)<br />
exec (@bckstmt)</p>
<p>&#8211;perform database restore on linked remote mirror sql server<br />
set @bckstmt = &#8216;restore database &#8216; + char(91) + @dbname + char(93) + &#8216; from &#8216; +<br />
&#8216;Disk = N&#8217; + char(39)  + @bupath  + &#8216;\&#8217; + @dbname + &#8216;.bak&#8217; + char(39) + &#8216; with norecovery, replace&#8217;<br />
exec @mirrorsp @bckstmt</p>
<p>&#8211;perform database log restore on linked remote mirror sql server<br />
set @bckstmt = &#8216;restore log &#8216; + char(91) + @dbname + char(93) + &#8216; from &#8216; +<br />
&#8216;Disk = N&#8217; + char(39)  + @bupath  + &#8216;\&#8217; + @dbname + &#8216;_log.bak&#8217; + char(39) + &#8216; with norecovery, replace&#8217;<br />
exec @mirrorsp @bckstmt</p>
<p>&#8211;Initiate the mirroring on The Mirror server:<br />
set     @mirrorsql = &#8216;alter database &#8216; + char(91) + @dbname + char(93) + &#8216; set partner= N&#8217;+ char(39) + &#8216;TCP://&#8217; + @primarysrvr + @domain + &#8216;:5022&#8242; + char(39)<br />
exec @mirrorsp @mirrorsql</p>
<p>&#8211;Initiate the mirroring on The Primary server:<br />
set @mirrorsql = &#8216;alter database &#8216; + char(91) + @dbname + char(93) + &#8216; set partner= N&#8217;+ char(39) + &#8216;TCP://&#8217; + @mirrorsrvr + @domain + &#8216;:5022&#8242; + char(39)<br />
exec (@mirrorsql)</p>
<p>&#8211;Enable the mirroring session on the Witness server:<br />
set     @mirrorsql = &#8216;alter database &#8216; + char(91) + @dbname + char(93) + &#8216; set witness= N&#8217;+ char(39) + &#8216;TCP://&#8217; + @witnesssrvr + @domain + &#8216;:5022&#8242; + char(39)<br />
exec (@mirrorsql)</p>
<p>&#8211;cleanup<br />
delete from new_db_table where name = @dbname<br />
set @cmd = &#8216;del &#8216; + @bupath  + &#8216;\&#8217; + @dbname + &#8216;.bak&#8217;<br />
exec xp_cmdshell @cmd<br />
set @cmd = &#8216;del &#8216; + @bupath  + &#8216;\&#8217; + @dbname + &#8216;_log.bak&#8217;<br />
exec xp_cmdshell @cmd<br />
fetch cdb into @dbname<br />
end<br />
close cdb<br />
deallocate cdb<br />
drop table #userdbs<br />
end<br />
end</p>
<p><strong>Script 3 &#8211; Create the Trigger<br />
</strong>This will fire when an event occurs that matches CREATE_DATABASE and will populate the event sink table with the DB name.<strong><br />
</strong></p>
<p>/****** Object:  DdlTrigger [trg_MirrorDDL]    Script Date: 05/19/2008 15:31:55 ******/<br />
SET ANSI_NULLS ON<br />
GO<br />
SET QUOTED_IDENTIFIER ON<br />
GO<br />
CREATE TRIGGER [trg_MirrorDDL]<br />
ON ALL SERVER<br />
FOR CREATE_DATABASE<br />
AS<br />
BEGIN<br />
SET NOCOUNT ON;</p>
<p>DECLARE @data XML;<br />
DECLARE @eventType sysname;<br />
DECLARE @dbname varchar(100);<br />
DECLARE @mirrorsql varchar(500);</p>
<p>SET @data = EVENTDATA();<br />
SET @eventType = @data.value(&#8216;(/EVENT_INSTANCE/EventType)[1]&#8216;, &#8216;sysname&#8217;);<br />
SET @dbname = @data.value(&#8216;(/EVENT_INSTANCE/ DatabaseName)[1]&#8216;, &#8216;sysname&#8217;);</p>
<p>&#8211;Add to new_db_table<br />
Insert new_db_table(name,event) select @dbname,@eventType where not exists (select * from new_db_table where name = @dbname);<br />
END</p>
<p>GO<br />
SET ANSI_NULLS OFF<br />
GO<br />
SET QUOTED_IDENTIFIER OFF<br />
GO<br />
ENABLE TRIGGER [trg_MirrorDDL] ON ALL SERVER</p>
<p><strong>Script 4 &#8211; Create the SQL Agent SVC Job<br />
</strong>Main purpose of this job is to monitor the even sink for new entries.  I had thought about having a tigger on the vent sink table, but you might not want to have the automation be on-demand so I thought a job which governed the execution of the workload stored procedure, would be better.</p>
<p>USE [msdb]<br />
GO<br />
/****** Object:  Job [Mirroring Agent]    Script Date: 05/19/2008 15:32:54 ******/<br />
BEGIN TRANSACTION<br />
DECLARE @ReturnCode INT<br />
SELECT @ReturnCode = 0<br />
/****** Object:  JobCategory [[Uncategorized (Local)]]]    Script Date: 05/19/2008 15:32:54 ******/<br />
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N&#8217;[Uncategorized (Local)]&#8216; AND category_class=1)<br />
BEGIN<br />
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N&#8217;JOB&#8217;, @type=N&#8217;LOCAL&#8217;, @name=N&#8217;[Uncategorized (Local)]&#8216;<br />
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback</p>
<p>END</p>
<p>DECLARE @jobId BINARY(16)<br />
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N&#8217;Mirroring Agent&#8217;,<br />
@enabled=1,<br />
@notify_level_eventlog=2,<br />
@notify_level_email=0,<br />
@notify_level_netsend=0,<br />
@notify_level_page=0,<br />
@delete_level=0,<br />
@description=N&#8217;No description available.&#8217;,<br />
@category_name=N&#8217;[Uncategorized (Local)]&#8216;,<br />
@owner_login_name=N&#8217;SMNET\administrator&#8217;, @job_id = @jobId OUTPUT<br />
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback<br />
/****** Object:  Step [Run Mirroring Stored Procedure]    Script Date: 05/19/2008 15:32:55 ******/<br />
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N&#8217;Run Mirroring Stored Procedure&#8217;,<br />
@step_id=1,<br />
@cmdexec_success_code=0,<br />
@on_success_action=1,<br />
@on_success_step_id=0,<br />
@on_fail_action=2,<br />
@on_fail_step_id=0,<br />
@retry_attempts=0,<br />
@retry_interval=0,<br />
@os_run_priority=0, @subsystem=N&#8217;TSQL&#8217;,<br />
@command=N&#8217;USE [master]<br />
GO</p>
<p>DECLARE    @return_value int</p>
<p>EXEC    @return_value = [dbo].[sp_auto_mirror_config]</p>
<p>SELECT    &#8221;Return Value&#8221; = @return_value</p>
<p>GO&#8217;,<br />
@database_name=N&#8217;master&#8217;,<br />
@flags=4<br />
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback<br />
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1<br />
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback<br />
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N&#8217;Mirror Agent Schedule&#8217;,<br />
@enabled=1,<br />
@freq_type=4,<br />
@freq_interval=1,<br />
@freq_subday_type=4,<br />
@freq_subday_interval=5,<br />
@freq_relative_interval=0,<br />
@freq_recurrence_factor=0,<br />
@active_start_date=20080410,<br />
@active_end_date=99991231,<br />
@active_start_time=0,<br />
@active_end_time=235959<br />
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback<br />
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N&#8217;(local)&#8217;<br />
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback<br />
COMMIT TRANSACTION<br />
GOTO EndSave<br />
QuitWithRollback:<br />
IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION<br />
EndSave:</p>
<p>There may very well be a more eloquent way of doing this, but this method does work. Some other relevant info &#8211; While there is a really high limit of 32K databases that you can create on one SQL server, you would never want to do this as it would become a management nightmare.  Further, you will reach a limit on the host at which mirroring (and really any feature such as replicaiton that uses TCP socket connections) will cease to function.  I found this number to be 100.  Having multiple instances on the same box does not help as this does not decrease the number of sockets consumed per database for mirroring or replication.  Microsoft support recommends no more than 50 databases per server in a mirrored configuration.  So if you are provisioning for the masses, make sure you have enought physical or virtual SQL server instances to accommdate the number of customers you plan on supporting.  Hope this helps!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffsani.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffsani.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffsani.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffsani.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffsani.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffsani.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffsani.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffsani.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffsani.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffsani.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffsani.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffsani.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffsani.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffsani.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=29&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffsani.wordpress.com/2009/03/17/how-to-automate-sql-mirroring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f5b76a54c625fc7b9488b315b43ff60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nerdlingerer</media:title>
		</media:content>
	</item>
		<item>
		<title>Server Name Indication and SSL VPN</title>
		<link>http://jeffsani.wordpress.com/2009/03/15/sni/</link>
		<comments>http://jeffsani.wordpress.com/2009/03/15/sni/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 01:15:08 +0000</pubDate>
		<dc:creator>nerdlingerer</dc:creator>
				<category><![CDATA[Remote Access]]></category>
		<category><![CDATA[RFC 4366]]></category>
		<category><![CDATA[Server Name Indication]]></category>
		<category><![CDATA[SSL VPN]]></category>
		<category><![CDATA[SNI]]></category>

		<guid isPermaLink="false">http://jeffsani.wordpress.com/?p=34</guid>
		<description><![CDATA[An extension to SSL/TLS called Server Name Indication (SNI) can overcome the limitation of single SSL certificate &#62; IP address binding that normally has to be implemented when you want to secure virtual hosted applications or multiple remote access points that have unique Fully Qualified Domain Names.  This extension adds a header containing the virtual host name as part of the SSL/TLS negotiation so the correct certificate can be presented to the client.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=34&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3><strong>The Problem</strong></h3>
<p>Many People are unfamiliar with Server Name Indication (SNI) despite having been introduced as an extension to the TLS protocol back in 2005. In a nutshell, when client computer browsers or SSL based VPNs are negotiating encryption with a server, there is no information which can be gleaned by the server in order to determine which virtual host the client is actually requesting.  This is due to the fact that the hostname of the subsequent request is contained in the encrypted header which would not be visible until after the received data was decrypted as it made its way down the stack.  This is problematic with respect to virtual hosting since each server or appliance can serve many hosts through the same address.  If it is desired to secure the data of that host through SSL, then a 1:1 mapping of hostname to IP address is currently required.</p>
<p><em><em> </em><strong>Client</strong>: (TLS Handshake) Hello, I support XYZ Encryption.</em><em><strong><br />
Server</strong>: (TLS Handshake) Hi There, Here is my Public Certificate, and lets use this encryption algorithm.<strong><br />
Client</strong>: (TLS Handshake) Sounds good to me.<strong><br />
Client</strong>: (Encrypted) HTTP Request<strong><br />
Server</strong>: (Encrypted) HTTP Reply</em></p>
<h3><strong>What about &#8216;STARTTLS&#8217; or TLS &#8216;Upgrade&#8217; in HTTP/1.1?</strong></h3>
<p><strong>STARTTLS </strong>is another standard which is commonly used by protocols such as SMTP, POP, IMAP, and LDAP.  Back in the day, it was common practice to have parallel secure ports for most protocols.  For example,  with SMTP, POP, IMAP, and LDAP, and HTTP you have 25/465 110/995 145/993 389/636, and 80/443 respectively. The idea of  STARTTLS was born when the <a title="The Internet Engineering Task Force" href="http://www.ietf.org/" target="_blank">IETF</a> which governs internet assigned numbers and ports decided back in 1997 at some meeting that the issuing of paralell &#8220;secure&#8221; ports for all protcols should be depricated.   With STARTTLS, when the connection to the server host is established, the client sends a plantext command with the virtual host name.  This has enough information for the server to decide which certificate to offer for the SSL/TLS handshake.</p>
<address><em><em><em> </em><strong>Client</strong>: (TLS Handshake) Hello, I support XYZ Encryption.</em></em></address>
<address><em> <strong>Client</strong>: (Cleartext) I am using server &#8216;</em><em><em>access.mycompany.com</em></em><em>&#8216;</em></address>
<address><em> <strong>Server</strong>: (Cleartext) By The Way, I also support TLS Encryptionn.</em></address>
<address><em> <strong>Client</strong>: (Cleartext) Lets use Encryption, aka &#8216;STARTTLS&#8217;.</em></address>
<address><em> <strong>Client</strong>: (TLS Handshake) Hello, I support XYZ Encryption.</em></address>
<address><em> <strong>Server</strong>: (TLS Handshake) Hi There, Here is my Public Certificate, and lets use this encryption algorithm.</em></address>
<address><em> <strong>Client</strong>: (TLS Handshake) Sounds good to me.</em></address>
<address><em> <strong>Client &amp; Server</strong>: (Encrypted) Exchange Data</em></address>
<address><em><br />
</em></address>
<address> </address>
<p>A similar method for web browsers, and SSL VPN clients was derived in the HTTP/1.1 specification and is called <strong>TLS Upgrade</strong>. HTTP/1.1 TLS Upgrade method can be applied to upgrade an open HTTP connection. In a nutshell, the client would include this in a request:</p>
<address> </address>
<address><strong><em> GET http://access.mycompany.com/securestuff HTTP/1.1<br />
Host: access.mycompany.com<br />
Upgrade: TLS/1.0<br />
Connection: Upgrade</em></strong></address>
<address><strong><em><br />
</em></strong></address>
<p>The server in turn might respond with:</p>
<address><strong><em> HTTP/1.1 101 Switching Protocols<br />
Upgrade: TLS/1.0, HTTP/1.1<br />
Connection: Upgrade</em></strong></address>
<address><strong><em><br />
</em></strong></address>
<p>The main benefit with these methods are that you can have both naked and secure traffic traversing through the same  port.  Main problems to this and likely why these methods have not been adopted are that all methods would require that any proxy servers in between the client and server also support this method.  A proxy server that did not acknowledge it or perhaps strips the command (could also happen on a legacy firewall), would potentially present a man-in-the-middle attack.  A lesser issue might be that you have a user perception issue as there is a certain familiarity with port 443 being the &#8220;secure&#8221; port.  On the server end of things, you would also need to have the unsecure port open for the application in question which may not be the case.</p>
<h3><strong>The Solution</strong></h3>
<p>An extension to SSL/TLS called <strong>Server Name Indication</strong> (<strong>SNI</strong>) addresses this issue by sending the name of the virtual host as part of the SSL/TLS negotiation. This enables the server to bind the correct virtual host early and present the browser with the certificate containing a CN matching that in the SNI header.  This method also has far fewer complications associated with it as compared to <strong>TLS Upgrade or STARTTLS</strong>.  The SNI extension is described in gross detail <a title="SNI RFC" href="http://www.ietf.org/rfc/rfc4366.txt" target="_blank">here</a>. With SNI, you would have a sequence like:</p>
<address><em> <strong>Client</strong>: (TLS Handshake) Hello, I support XYZ Encryption, and I am trying to connect to<br />
&#8216;<strong><strong>access.mycompany.com</strong></strong>&#8216;.<br />
</em><em><em> </em><strong>Server</strong>: (TLS Handshake) Hi There, Here is my Public Certificate, and lets use this encryption algorithm.<br />
</em><em><strong>Client</strong>: (TLS Handshake) Sounds good to me.<br />
<strong>Client</strong>: (Encrypted) HTTP Request<br />
<strong>Server</strong>: (Encrypted) HTTP Reply</em></address>
<address><em><br />
</em></address>
<h3><strong>But Don&#8217;t Browser&#8217;s and Servers need to support this extension in order for this to work?</strong></h3>
<p>Yup, that is the idea.  As with any RFC, extension, or modification you have to have adoption by the software developers, and hardware vendors which in turn are driven by the adoption or request of the technology by the IT community.  The latter is only done through education and practical application examples which is one of my main drivers for writing this blog post.  At the time of this writing, there are no known Remote Access Appliances which support this RFC extension.  Below is the list of known browsers, servers, and SSL application libraries which do support the SNI extension:</p>
<h4><span class="mw-headline">Browsers</span></h4>
<ul>
<li><a title="Mozilla Firefox" href="http://www.mozilla.com/en-US/firefox/">Mozilla Firefox</a> 2.0 or later</li>
<li><a title="Opera (web browser)" href="http://www.opera.com/" target="_blank">Opera</a> 8.0 or later (the TLS 1.1 protocol must be enabled)</li>
<li><a title="Internet Explorer 7" href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx" target="_blank">Internet Explorer 7</a> (Vista, not XP) or later</li>
<li><a title="Google Chrome" href="http://www.google.com/chrome" target="_blank">Google Chrome</a></li>
<li><a title="Safari (web browser)" href="http://www.apple.com/safari/" target="_blank">Safari</a> 3.2.1 Mac OS X 10.5.6</li>
</ul>
<h4><span class="mw-headline">Servers</span></h4>
<ul>
<li><a title="Apache HTTP Server" href="http://en.wikipedia.org/wiki/Apache_HTTP_Server" target="_blank">Apache</a> with mod_gnutls or mod_ssl</li>
<li><a title="Cherokee HTTP Server" href="http://www.cherokee-project.com/" target="_blank">Cherokee</a> if compiled with TLS support</li>
<li>New versions of <a title="Lighttpd" href="http://en.wikipedia.org/wiki/Lighttpd" target="_blank">lighttpd</a> 1.4.x and 1.5.x<sup class="reference"><a href="http://en.wikipedia.org/wiki/Server_Name_Indication#cite_note-5"></a></sup></li>
<li><a title="Nginx" href="http://en.wikipedia.org/wiki/Nginx" target="_blank">Nginx</a> with an accompanying OpenSSL built with SNI support</li>
<li>OS X 10.5.6</li>
</ul>
<h4><span class="mw-headline">Libraries</span></h4>
<ul>
<li>Mozilla NSS</li>
<li>OpenSSL
<ul>
<li>0.9.8f &#8211; not compiled in by default, can be compiled in with config option &#8216;&#8211;enable-tlsext&#8217;.</li>
<li>Unreleased 0.9.9 is likely to include SNI compiled in by default.</li>
</ul>
</li>
<li>GNU TLS</li>
</ul>
<h3><span class="mw-headline">Unsupported Operating Systems Browsers, and Libraries<br />
</span></h3>
<p>The following combinations do not support SNI.</p>
<ul>
<li><a title="Windows XP" href="http://en.wikipedia.org/wiki/Windows_XP">Windows XP</a> and Internet Explorer 6 or 7</li>
<li><a title="Konqueror" href="http://en.wikipedia.org/wiki/Konqueror">Konqueror</a>/<a title="KDE" href="http://en.wikipedia.org/wiki/KDE">KDE</a> in any version</li>
<li>Microsoft Internet Information Server IIS</li>
<li>Sun Java System Web Server</li>
<li>Microsoft.Net</li>
<li>Sun Java JSEE</li>
</ul>
<h3><strong>What SNI could add to </strong>SSL-based VPN Solutions?</h3>
<p>So what does this mean with respect to Remote Access Solutions such as <a title="Citrix Access Gateway" href="http://www.citrix.com/English/ps2/products/product.asp?contentID=15005&amp;ntref=hp_nav_US" target="_blank">Citrix Access Gateway</a>, <a title="F5 Firepass" href="http://www.f5.com/products/firepass/" target="_blank">F5 Firepass</a>, or <a title="Juniper Secure Access Appliances" href="http://www.juniper.net/us/en/products-services/security/sa-series/" target="_blank">Juniper Secure Access</a> remote access solutions?  The benefits of adopting support for SNI are wide an varying, but here is my first pass at a few:</p>
<ul>
<li>Since the SNI would be presented to the access appliance before the SSL negotiation finalized, specific SSL policies such as supported cipher suites, could be bound to the session.   This would be useful where you needed to meet more stringent security requirements such as FIPS level 1/2 for specific hosts, or where you had a client application which used a specific type of encryption that you needed to utilize.</li>
<li>As cloud computing is becoming more prevalent, service providers are going to need a means to offer customers secure access to their applications and content.  Since many cloud services are based on anycast addresses (floating IP), CNAME records, and also servicing 1000&#8242;s of users, a 1:1 option for customer:IP is not practical or possible. SNI presents a cheap, workable alternative to having no secure offering.</li>
<li>Enterprises who wish to publicly expose their intranet or line of business applications securely may want to do so through a remote access appliance, but not want to allocate multiple public IP addresses.</li>
<li>Businesses who have only been allocated a single IP address and are using Port Address Translation (PAT) to serve up multiple applications.  This is actually pretty common since many businesses are provisioned with ADSL which uses DHCP assign IP addresses. Most companies use a remote access device as an all-in-one solution for outbound RNAT, inbound VPN, and line of business applications, and firewall.</li>
</ul>
<p>I hope to see one of these vendors include support for this little-known, but extremely-practical extension to the TLS protocol in the near future.  If you manage to find your way to this post, and you are an IT professional, I would love to hear your comments.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffsani.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffsani.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffsani.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffsani.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffsani.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffsani.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffsani.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffsani.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffsani.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffsani.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffsani.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffsani.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffsani.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffsani.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=34&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffsani.wordpress.com/2009/03/15/sni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f5b76a54c625fc7b9488b315b43ff60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nerdlingerer</media:title>
		</media:content>
	</item>
		<item>
		<title>Saving Your SQL Server Connections in MSSMS</title>
		<link>http://jeffsani.wordpress.com/2009/03/08/saving-your-sql-server-connections-in-mssms/</link>
		<comments>http://jeffsani.wordpress.com/2009/03/08/saving-your-sql-server-connections-in-mssms/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 20:33:47 +0000</pubDate>
		<dc:creator>nerdlingerer</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[MSSMS]]></category>
		<category><![CDATA[Registered Servers]]></category>
		<category><![CDATA[Simultaneously Open Connections]]></category>

		<guid isPermaLink="false">http://jeffsani.wordpress.com/?p=4</guid>
		<description><![CDATA[Ever Wonder How to Open Multiple Connections to MS SQL Servers Simultaneously? After being super frustrated one day, I decided to investigate some of the new features of the MS SQL Server Management Studio and found a solution.  Have a read to discover how to implement this little gem of a tip!  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=4&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So one of the most frustrating things I noticed when I started using SQL back in the day was that you had to connect to each SQL server individually.  This can be rather annoying when you are managing multiple SQL server farms.  So a <img class="size-full wp-image-3 alignleft" style="margin:5px;" title="view_registered_servers" src="http://jeffsani.files.wordpress.com/2009/03/view_registered_servers.jpg?w=480" alt="View | Registered Servers"   />new feature of the Microsoft SQL Server Management Studio (MSSMS) that I discovered through curiosity was the concept of &#8220;Registered Servers&#8221;.  Basically, as the name infers, these are SQL servers that you have setup connections to with the appropriate authentication type which you register with the MSSMS.   You can even create groups of these servers so that you can logically separate them by function or location.</p>
<p><strong>Configuring Registered Servers and Groups<br />
</strong></p>
<p style="text-align:left;">To access Registered Servers, you simply click on the View Menu and select Registered Servers. This will open another tab view next to Object Explorer which opens by default when you launch the MSSMS.</p>
<p><img class="alignright size-full wp-image-20" style="margin:5px;" title="register_a_server" src="http://jeffsani.files.wordpress.com/2009/03/register_a_server3.jpg?w=480" alt="register_a_server2"   /></p>
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">From here you are presented with the option to connect to Database Engines, Reporting Services, Analysis Services, etc.  Obviously we are talking about SQL Servers here so you want to look at Database Engines.  In the tree, you will see the Default Local Server Group.  You are not restricted to use this group and can make your own logical groups as you see fit.  The one recommendation I can make is to create groups of SQL Servers that you desire to open simultaneously.  <img class="alignleft size-full wp-image-22" style="margin:5px;" title="register_a_server3" src="http://jeffsani.files.wordpress.com/2009/03/register_a_server3.jpg?w=480" alt="register_a_server3"   /></p>
<p style="text-align:left;">
<p style="text-align:left;">Once you create the groups, you will add or &#8220;Register&#8221; SQL database engines into each group.  Simply clicking on &#8220;New Server Registration&#8221; will take you to the dialog where you specify the SQL Server Name, IP address, or Server Name\Instance Name,  and the authentication required to connect to that server.</p>
<p>Since with Windows Authentication, the authentication token is inherited from the Logged On user, there is no need to save the credentials and no option to.  However if you choose SQL Authentication, and also desire to streamline opening all the connections simultaneously, you will need to select the option to &#8220;Remember password&#8221; which will be presented to you if you do choose the SQL Authentication type.<img class="size-full wp-image-25 alignright" style="margin:5px;" title="register_a_server_23" src="http://jeffsani.files.wordpress.com/2009/03/register_a_server_23.jpg?w=480" alt="register_a_server_23"   /></p>
<p style="text-align:left;"><strong><br />
Opening Connections Simultaneously</strong></p>
<p style="text-align:left;">Ok, So you have added all the logical groups and servers that you desire.  So what is the trick to opening these in Object Explorer?  This is actually quite simple.  All you need to do is Switch to the Registered Servers view once you open the MSSMS.  Close the initial dialog which will prompt you for connection information once the studio is loaded (This occurs due to the fact the default view is Object Explorer and there are no connections open  &#8211; at the time of this writing, there is unfortunately no way to change this or configure as an option).</p>
<p style="text-align:left;">Once you are at the Registred Server View, you can right-click the group of servers you desire to open connections to and select &#8220;Object Explorer&#8221; from the context menu.  This will switch you back to Object Explorer view in the MSSMS, automatically open connections to all the servers in that particular group, and expand the Object tree.<br />
<img class="alignleft size-full wp-image-24" style="margin:5px;" title="registered_servers_explore3" src="http://jeffsani.files.wordpress.com/2009/03/registered_servers_explore3.jpg?w=480" alt="registered_servers_explore3"   /></p>
<p style="text-align:left;">
<p style="text-align:left;"><strong>Conclusion</strong></p>
<p style="text-align:left;">So while this is not totally streamlined, the method presents a better alternative to having to open each connection individually.  I am hoping that in the future the MSSMS development team will at least provide a means to open Registered Server Groups from the initial start-up dialog so that you have one less step in the process. It would also be nice to be able to highlght multiple Server Objects in the Object Explorer and be able to dynamically create a Registered Server Group from those selections.  Enjoy!</p>
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;"><a href="http://polldaddy.com/poll/1437824">Take Our Poll</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffsani.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffsani.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffsani.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffsani.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffsani.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffsani.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffsani.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffsani.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffsani.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffsani.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffsani.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffsani.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffsani.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffsani.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jeffsani.wordpress.com&amp;blog=6847323&amp;post=4&amp;subd=jeffsani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jeffsani.wordpress.com/2009/03/08/saving-your-sql-server-connections-in-mssms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f5b76a54c625fc7b9488b315b43ff60?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nerdlingerer</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2009/03/view_registered_servers.jpg" medium="image">
			<media:title type="html">view_registered_servers</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2009/03/register_a_server3.jpg" medium="image">
			<media:title type="html">register_a_server</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2009/03/register_a_server3.jpg" medium="image">
			<media:title type="html">register_a_server3</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2009/03/register_a_server_23.jpg" medium="image">
			<media:title type="html">register_a_server_23</media:title>
		</media:content>

		<media:content url="http://jeffsani.files.wordpress.com/2009/03/registered_servers_explore3.jpg" medium="image">
			<media:title type="html">registered_servers_explore3</media:title>
		</media:content>
	</item>
	</channel>
</rss>
