<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.bartdesmet.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>B# .NET Blog : C# 2.0, Security, SQL Server 2005</title><link>http://community.bartdesmet.net/blogs/bart/archive/tags/C_2300_+2.0/Security/SQL+Server+2005/default.aspx</link><description>Tags: C# 2.0, Security, SQL Server 2005</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20423.869)</generator><item><title>Reset the password of a SQL Server account programmatically - SecureString real world demo</title><link>http://community.bartdesmet.net/blogs/bart/archive/2006/10/20/Reset-the-password-of-a-SQL-Server-account-programmatically-_2D00_-SecureString-real-world-demo.aspx</link><pubDate>Fri, 20 Oct 2006 23:29:00 GMT</pubDate><guid isPermaLink="false">863c5522-913f-4a64-ac0a-bd5f05abad0f:4589</guid><dc:creator>bart</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.bartdesmet.net/blogs/bart/rsscomments.aspx?PostID=4589</wfw:commentRss><comments>http://community.bartdesmet.net/blogs/bart/archive/2006/10/20/Reset-the-password-of-a-SQL-Server-account-programmatically-_2D00_-SecureString-real-world-demo.aspx#comments</comments><description>&lt;p&gt;Simple question today: &amp;quot;How to change the password of a SQL Server account programmatically using .NET?&amp;quot;. The answer: &lt;strong&gt;Microsoft.SqlServer.Management.Common&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Create&amp;nbsp;a simple Console Application project and add a reference to the &lt;strong&gt;Microsoft.SqlServer.ConnectionInfo.dll&lt;/strong&gt; assembly (should be listed on your machine if you&amp;#39;ve installed any flavor of SQL Server 2005).&lt;/p&gt;&lt;p&gt;Here&amp;#39;s the code of our password change tool:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:3f266600-dcf1-43f8-9610-964efe0ba463" style="display:inline;float:none;margin:0px;padding:0px;"&gt;&lt;pre style="background-color:white;"&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Security;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Runtime.InteropServices;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; Microsoft.SqlServer.Management.Common;

&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color:#000000;"&gt; SqlResetPwd
{
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Program
    {
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Main(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] args)
        {
            Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Reset SQL Server password&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
            Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;-------------------------\n&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);

            Console.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Server name:  &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;); &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; instance &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Console.ReadLine();

            Console.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;User name:    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;); &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; user &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Console.ReadLine();

            Console.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Password:     &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;); SecureString pwd &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; AskPassword();

            Console.WriteLine(); Console.WriteLine();
            Console.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Trying to connect... &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);

            ServerConnection conn &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; ServerConnection(instance, user, pwd);
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;span style="color:#000000;"&gt;
            {
                conn.Connect();
                Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Connected.&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;); Console.WriteLine();
                conn.Disconnect();

                conn &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; ServerConnection(instance, user, pwd);

                SecureString newPwd, conPwd;
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;while&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
                {
                    Console.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;New password: &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;); newPwd &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; AskPassword(); Console.WriteLine();
                    Console.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Confirm:      &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;); conPwd &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; AskPassword(); Console.WriteLine();
                    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;Match(newPwd, conPwd))
                    {
                        Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;The specified passwords do not match. Please try again.&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                    }
                    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;span style="color:#000000;"&gt;
                    {
                        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;span style="color:#000000;"&gt;
                        {
                            conn.ChangePassword(newPwd);
                            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
                        }
                        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt;&lt;span style="color:#000000;"&gt; (Exception ex)
                        {
                            Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Failed to change password. &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; ex.Message);
                        }
                    }
                }

                Console.WriteLine();
                Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Password changed successfully.&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
            }
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt;&lt;span style="color:#000000;"&gt; (ConnectionFailureException ex)
            {
                Console.WriteLine((ex.InnerException &lt;/span&gt;&lt;span style="color:#000000;"&gt;!=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;?&lt;/span&gt;&lt;span style="color:#000000;"&gt; ex.InnerException.Message : &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Failed.&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;));
            }
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;finally&lt;/span&gt;&lt;span style="color:#000000;"&gt;
            {
                conn.SqlConnectionObject.Close();
            }
        }

        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; SecureString AskPassword()
        {
            SecureString pwd &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SecureString();
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;while&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
            {
                ConsoleKeyInfo i &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Console.ReadKey(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (i.Key &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; ConsoleKey.Enter)
                {
                    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
                }
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (i.Key &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; ConsoleKey.Backspace)
                {
                    pwd.RemoveAt(pwd.Length &lt;/span&gt;&lt;span style="color:#000000;"&gt;-&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                    Console.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;\b \b&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                }
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;span style="color:#000000;"&gt;
                {
                    pwd.AppendChar(i.KeyChar);
                    Console.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;*&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                }
            }
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; pwd;
        }

        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;unsafe&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; Match(SecureString s1, SecureString s2)
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (s1.Length &lt;/span&gt;&lt;span style="color:#000000;"&gt;!=&lt;/span&gt;&lt;span style="color:#000000;"&gt; s2.Length)
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;&lt;span style="color:#000000;"&gt;;

            IntPtr bs1 &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Marshal.SecureStringToBSTR(s1);
            IntPtr bs2 &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Marshal.SecureStringToBSTR(s2);
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;char&lt;/span&gt;&lt;span style="color:#000000;"&gt;*&lt;/span&gt;&lt;span style="color:#000000;"&gt; ps1 &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;char&lt;/span&gt;&lt;span style="color:#000000;"&gt;*&lt;/span&gt;&lt;span style="color:#000000;"&gt;) bs1.ToPointer();
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;char&lt;/span&gt;&lt;span style="color:#000000;"&gt;*&lt;/span&gt;&lt;span style="color:#000000;"&gt; ps2 &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;char&lt;/span&gt;&lt;span style="color:#000000;"&gt;*&lt;/span&gt;&lt;span style="color:#000000;"&gt;) bs2.ToPointer();

            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;span style="color:#000000;"&gt;
            {
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; i &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;; i &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; s1.Length; i&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
                    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (ps1[i] &lt;/span&gt;&lt;span style="color:#000000;"&gt;!=&lt;/span&gt;&lt;span style="color:#000000;"&gt; ps2[i])
                        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
            }
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;finally&lt;/span&gt;&lt;span style="color:#000000;"&gt;
            {
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (IntPtr.Zero &lt;/span&gt;&lt;span style="color:#000000;"&gt;!=&lt;/span&gt;&lt;span style="color:#000000;"&gt; bs1)
                    Marshal.ZeroFreeBSTR(bs1);
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (IntPtr.Zero &lt;/span&gt;&lt;span style="color:#000000;"&gt;!=&lt;/span&gt;&lt;span style="color:#000000;"&gt; bs2)
                    Marshal.ZeroFreeBSTR(bs2);
            }
        }
    }
}
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;A few interesting things to mention:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The &lt;strong&gt;AskPassword&lt;/strong&gt; method uses Console.ReadKey(true) to get one key stroke at a time, without printing the character to the console (the &amp;quot;true&amp;quot; parameter takes care of that). If the key is &amp;lt;ENTER&amp;gt;, the loop stops. If it is &amp;lt;BACKSPACE&amp;gt;, the last character is removed from the SecureString password and a backspace-space-backspace sequence is printed to the console to remove the last * character. Otherwise, the key character is appended to the SecureString password and an * character is printed on the screen. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Match&lt;/strong&gt; compares two SecureStrings with one another. To do so, it uses unsafe code to iterate over the SecureString. By doing so, no System.String ends up in the managed heap, which keeps things more secure than they would be in such a case. That&amp;#39;s the end goal of SecureString after all. &lt;/li&gt;&lt;li&gt;The &lt;strong&gt;ServerConnection&lt;/strong&gt; class can be used to reset a password and knows about SecureString to deal with passwords, which is just great.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For more information on SecureString, see my &lt;a href="http://community.bartdesmet.net/blogs/bart/archive/2006/03/31/3851.aspx"&gt;&amp;quot;Talking about System.Security.SecureString&amp;quot; blog post&lt;/a&gt; too.&lt;/p&gt;&lt;p&gt;Have fun!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://community.bartdesmet.net/blogs/bart/archive/2006/10/20/4589.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" border="0" height="18" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://community.bartdesmet.net/blogs/bart/archive/2006/10/20/4589.aspx" width="82" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;img src="http://community.bartdesmet.net/aggbug.aspx?PostID=4589" width="1" height="1"&gt;</description><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/SQL+Server+2005/default.aspx">SQL Server 2005</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/Security/default.aspx">Security</category><category domain="http://community.bartdesmet.net/blogs/bart/archive/tags/C_2300_+2.0/default.aspx">C# 2.0</category></item></channel></rss>