<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Herve Roggero</title>
        <link>http://geekswithblogs.net/hroggero/Default.aspx</link>
        <description> </description>
        <language>en-US</language>
        <copyright>Herve Roggero</copyright>
        <managingEditor>hroggero@pynlogic.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Herve Roggero</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/hroggero/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>SQL Azure - Auditing Choices</title>
            <category>South Florida</category>
            <link>http://geekswithblogs.net/hroggero/archive/2009/11/07/sql-azure---auditing-choices.aspx</link>
            <description>&lt;p&gt;As I am digging more into SQL Azure, it seems choices for auditing will become a little bit more restricted. &lt;/p&gt;
&lt;p&gt;Generally speaking there are four ways to audit SQL Server statements; these mechanisms are used by various software vendors to deliver auditing capabilities for compliance mandates and for security reviews. However as we will see, many of the products will stop from working for SQL Azure due to some limitations imposed by the database.  At a high level, the four auditing mechanisms are:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Server-side Traces&lt;br /&gt;
    Uses server-side traces to trace and store statements executed on a database server&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Log File Auditing&lt;br /&gt;
    Uses backups of log files to discover which statements were previously executed&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Network Sniffing&lt;br /&gt;
    Sniffing of network packets and storing SQL Server packets' content, including statements&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Database Proxying&lt;br /&gt;
    Captures all incoming network packets directly before forwarding them to the database server&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It turns out that option number 1 is no longer available. Many SQL Server auditing products rely on this mechanism. Since server-side tracing stored procedures are no longer available, these products will not be able to audit SQL Azure statements. &lt;/p&gt;
&lt;p&gt;Regarding option number 2, it seems that no option is available to obtain a backup of the log files. The BACKUP and RESTORE operations are not supported since cloud computing takes care of high availability concerns. &lt;/p&gt;
&lt;p&gt;Regarding option number 3, packet sniffing will no longer work either since all direct connections to SQL Azure require SSL. As a result, all packets are encrypted and cannot be analyzed. &lt;/p&gt;
&lt;p&gt;The only remaining option is to use a database proxy that handles the SSL handshake on both ends and stored the database statements going through. However, if a database connection can be made around the proxy, those statements will not be captured. While SQL Azure allows firewall settings to limit connections (by IP), it would be difficult to prove from an auditing standpoint that the firewall settings were not altered over time. &lt;/p&gt;
&lt;p&gt;At this point at least, there appears to be no real silver bullet for auditing a SQL Azure database; at least not yet... &lt;/p&gt;
&lt;p&gt;Still, most applications using the SQL Azure platform will not likely store any sensitive data, initially. As the SQL Azure platform grows in its use, I would expect some of the options above to be enabled, or new options to become available. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136126"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=136126" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/hroggero/aggbug/136126.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Herve Roggero</dc:creator>
            <guid>http://geekswithblogs.net/hroggero/archive/2009/11/07/sql-azure---auditing-choices.aspx</guid>
            <pubDate>Sat, 07 Nov 2009 22:24:59 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/hroggero/comments/136126.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/hroggero/archive/2009/11/07/sql-azure---auditing-choices.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/hroggero/comments/commentRss/136126.aspx</wfw:commentRss>
        </item>
        <item>
            <title>SQL Azure - Getting Started</title>
            <link>http://geekswithblogs.net/hroggero/archive/2009/10/07/sql-azure---getting-started.aspx</link>
            <description>&lt;p style="MARGIN: 0in 0in 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;I started to look into SQL Azure, the database cloud computing initiative from Microsoft, and I was completely blown away. Microsoft is providing an interesting option that strikes an interesting balance between a plain-old RDBMS implementation and a scalable platform.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;By definition, relational databases have difficulty scaling due to the many features and constraints that make them popular. However, SQL Azure removes some of those features in order to provide a more scalable SQL Server, while keeping intact its strong relational capabilities. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;For example, outside of hashing, SQL Azure does not support encryption that uses certificates, which makes somewhat sense or those certificates would need to be deployed virtually everywhere. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Considering that encryption is CPU intensive anyway, it is probably best to leave the encryption details to the consumer. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;I was initially surprised that the USE &amp;lt;database&amp;gt; command didn't work, although it doesn't generate an error either. I guess every database created could be sitting on any hardware... which makes sense from a scalability standpoint. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;Finally, I had to get used to sqlcmd.exe again... but it works like a charm. There are ways to get a SQL Azure database available through Visual Studio.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;However you should expect that not all the T-SQL commands are available, or fully supported. For example, none of the system procedures will work... (bummer!). &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;To get started, go to http://www.microsoft.com/azure/sql.mspx - from there you can sign up for the CTP.  &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0in 0in 10pt" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135346"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=135346" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/hroggero/aggbug/135346.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Herve Roggero</dc:creator>
            <guid>http://geekswithblogs.net/hroggero/archive/2009/10/07/sql-azure---getting-started.aspx</guid>
            <pubDate>Wed, 07 Oct 2009 15:16:07 GMT</pubDate>
            <comments>http://geekswithblogs.net/hroggero/archive/2009/10/07/sql-azure---getting-started.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/hroggero/comments/commentRss/135346.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Strong Password Hashing with SQL Server</title>
            <category>South Florida</category>
            <link>http://geekswithblogs.net/hroggero/archive/2009/09/19/strong-password-hashing-with-sql-server.aspx</link>
            <description>&lt;p&gt;While SQL Server security features continue to improve, hashing in SQL Server using native functions is simple, but not necessarily up to speed on the latest security specifications. The good news however, is that using extended stored procedures allows database developers to take advantage of the strength of .NET using the System.Security.Cryptography namespace. &lt;/p&gt;
&lt;p&gt;I started to evaluate Hashing capabilities within SQL 2005 and 2008 and as it turns out, hashing is extremely simple using the HASHBYTES function. This function takes two parameters: the hashing algorithm (sha1, md5...) and the input parameter. &lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;&lt;p&gt;For example, the following code hashes a password. Pay attention to the Encoding chosen; the type of the variable dictates which encoding will be used (varchar and nvarchar).&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;DECLARE @password1 varchar(100)   -- UTF8  Encoding&lt;br /&gt;
DECLARE @password2 nvarchar(100) -- Unicode&lt;br /&gt;
SET @password1 = 's3cret'&lt;br /&gt;
SET @password2 = 's3cret'&lt;br /&gt;
SELECT HASHBYTES('sha1', @password1) &lt;br /&gt;
SELECT &lt;/font&gt;&lt;font face=""&gt;HASHBYTES('sha1', @password2) &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Output:&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;0xFEF341F85D87439E7D91A2D465B9871EF66B5E98 &lt;br /&gt;
0xC06DCADF544BC3D6ECE7C64F485D2846E7A93F55&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, SQL Server does not support any of the stronger hashing mechanisms, such as SHA256. In addition, storing passwords by simply hashing them is not considered sufficient as they are vulnerable to dictionary attacks; indeed, hashing a given input always yields the same output. To provide stronger hashing, one would need to obtain a cryptographically strong random byte array, known as a vector (or a salt value). To use stronger hashing algorithms and create vectors, we need to use the .NET framework through an extended function. &lt;/p&gt;
&lt;h3&gt;Using .NET Hashing&lt;/h3&gt;
&lt;p&gt;The objective of our .NET code is to generate a single output that is never the same (avoiding the dictionary vulnerability) and uses SHA256 as the hashing mechanism. The following shows how to use a .NET extended function that takes a password as an input and returns a byte array to SQL Server that contains both the hash and the vector. &lt;/p&gt;
&lt;p&gt;Note that your SQL Server database should allow .NET execution. Here is the SQL statement used to enabled CLR on SQL Server:&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;sp_configure 'clr enabled' , '1'&lt;br /&gt;
&lt;/font&gt;&lt;font face=""&gt;go&lt;br /&gt;
&lt;/font&gt;&lt;font face=""&gt;reconfigure&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;The following T-SQL uses the strong .NET hashing functions found later in this post. The output is a byte array that can be stored as binary(48). &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;DECLARE hash binary(48)&lt;br /&gt;
SET hash = (SELECT dbo.pyn_encryption_hashPassword('s3cret'))&lt;br /&gt;
SELECT dbo.pyn_encryption_verifyPassword('wrongpwd', hash) -- returns 0&lt;br /&gt;
&lt;/font&gt;&lt;font face=""&gt;SELECT dbo.pyn_encryption_verifyPassword('s3cret', hash) -- returns 1&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The above code makes it simple to offer a strong password hashing function that combines SHA256 and a vector. Since the vector is embedded in the password, there is no need to store the vector in a separate column. &lt;/p&gt;
&lt;p&gt;Here is the .NET code that creates and verifies a password using a strong hashing method. The methods below use UTF8 encoding. To use Unicode, replace the method calls GetNonUnicodeBytes() to GetUnicodeBytes(). &lt;/p&gt;
&lt;p style="MARGIN-RIGHT: 0px" dir="ltr"&gt;using System; &lt;br /&gt;
using System.Data; &lt;br /&gt;
using System.Data.SqlClient; &lt;br /&gt;
using System.Data.SqlTypes; &lt;br /&gt;
using Microsoft.SqlServer.Server; &lt;br /&gt;
&lt;br /&gt;
public partial class UserDefinedFunctions &lt;br /&gt;
{ &lt;br /&gt;
[Microsoft.SqlServer.Server.SqlFunction] &lt;br /&gt;
public static SqlBytes pyn_encryption_hashPassword(SqlString password) &lt;br /&gt;
{ &lt;br /&gt;
&lt;font color="#339966"&gt; // Create a strong vector &lt;br /&gt;
&lt;/font&gt; byte[] vector = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; &lt;br /&gt;
 System.Security.Cryptography.RandomNumberGenerator.Create().GetNonZeroBytes(vector); &lt;br /&gt;
&lt;br /&gt;
&lt;font color="#339966"&gt; // Get the password bytes  &lt;br /&gt;
&lt;/font&gt; byte[] pwdBytes = password.GetNonUnicodeBytes(); &lt;br /&gt;
&lt;br /&gt;
&lt;font color="#339966"&gt; // Add the vector bytes to the password bytes and hash them both at the same time &lt;br /&gt;
&lt;/font&gt; System.Security.Cryptography.SHA256Managed sha256 = new System.Security.Cryptography.SHA256Managed(); &lt;br /&gt;
 byte[] outputBytes = sha256.ComputeHash(AddBytes(pwdBytes, vector)); &lt;br /&gt;
&lt;br /&gt;
&lt;font color="#339966"&gt; // Return the resulting hash, and append the vector again to it so it can extracted later &lt;br /&gt;
&lt;/font&gt; return new SqlBytes(AddBytes(outputBytes, vector)); &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
[Microsoft.SqlServer.Server.SqlFunction] &lt;br /&gt;
public static SqlBoolean pyn_encryption_verifyPassword(SqlString password, SqlBytes hash) &lt;br /&gt;
{ &lt;br /&gt;
 byte[] vector = new byte[16]; &lt;br /&gt;
 byte[] pwdAndHash = new byte[32]; &lt;br /&gt;
&lt;br /&gt;
&lt;font color="#339966"&gt; // Split the hash and vector into separate variables &lt;/font&gt;&lt;br /&gt;
 Array.Copy(hash.Value, 32, vector, 0, 16); &lt;br /&gt;
 Array.Copy(hash.Value, 0, pwdAndHash, 0, 32); &lt;br /&gt;
&lt;br /&gt;
&lt;font color="#339966"&gt; // Get the password bytes that will be tested against the hash &lt;/font&gt;&lt;br /&gt;
 byte[] pwdBytes = password.GetNonUnicodeBytes(); &lt;br /&gt;
&lt;br /&gt;
&lt;font color="#339966"&gt; // Compute a hash using the password provided, and the vector extracted from the hash &lt;br /&gt;
&lt;/font&gt; System.Security.Cryptography.SHA256Managed sha256 = new System.Security.Cryptography.SHA256Managed(); &lt;br /&gt;
 byte[] testHash = sha256.ComputeHash(AddBytes(pwdBytes, vector)); &lt;br /&gt;
&lt;br /&gt;
&lt;font color="#339966"&gt; // Compare hash values to determine if the password provided matches &lt;/font&gt;&lt;br /&gt;
 return new SqlBoolean(BitConverter.ToString(pwdAndHash) == BitConverter.ToString(testHash)); &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
private static byte[] AddBytes(byte[] array1, byte[] array2) &lt;br /&gt;
{ &lt;br /&gt;
&lt;font color="#339966"&gt; // Add two byte arrays &lt;/font&gt;&lt;br /&gt;
 byte[] array3 = new byte[array1.Length + array2.Length]; &lt;br /&gt;
 Array.Copy(array1, array3, array1.Length); &lt;br /&gt;
 Array.Copy(array2, 0, array3, array1.Length, array2.Length); &lt;br /&gt;
 return array3; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;While SQL Server hashing capabilities offer good support for simple hashing needs, extending SQL Server with .NET can provide a significant security advantage when it comes to encryption. Since the code above does not access any local resources on the database server, it can run in Safe permission mode. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;Using SQL Server Hashing&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134929"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134929" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/hroggero/aggbug/134929.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Herve Roggero</dc:creator>
            <guid>http://geekswithblogs.net/hroggero/archive/2009/09/19/strong-password-hashing-with-sql-server.aspx</guid>
            <pubDate>Sat, 19 Sep 2009 16:39:14 GMT</pubDate>
            <comments>http://geekswithblogs.net/hroggero/archive/2009/09/19/strong-password-hashing-with-sql-server.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/hroggero/comments/commentRss/134929.aspx</wfw:commentRss>
        </item>
        <item>
            <title>SQL Saturday - South Florida on August 8th 2009</title>
            <category>South Florida</category>
            <link>http://geekswithblogs.net/hroggero/archive/2009/07/12/sql-saturday---south-florida-on-august-8th-2009.aspx</link>
            <description>&lt;p&gt;Scott Klein (&lt;font face=""&gt;&lt;a href="http://geekswithblogs.net/ScottKlein/Default.aspx"&gt;http://geekswithblogs.net/ScottKlein/Default.aspx&lt;/a&gt;)&lt;/font&gt; and I are organizing the first SQL Saturday of South Florida, coming on August 8th 2009. It will be held in Miramar at Devry University. If you are in the area, please drop by! We have over 20 speakers and a great deal of giveaways. To find out more, please go to:&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;&lt;a href="http://www.sqlsaturday.com/eventhome.aspx?eventid=20"&gt;http://www.sqlsaturday.com/eventhome.aspx?eventid=20&lt;/a&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;
&lt;p&gt;Herve&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133445"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133445" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/hroggero/aggbug/133445.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Herve Roggero</dc:creator>
            <guid>http://geekswithblogs.net/hroggero/archive/2009/07/12/sql-saturday---south-florida-on-august-8th-2009.aspx</guid>
            <pubDate>Mon, 13 Jul 2009 01:55:59 GMT</pubDate>
            <comments>http://geekswithblogs.net/hroggero/archive/2009/07/12/sql-saturday---south-florida-on-august-8th-2009.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/hroggero/comments/commentRss/133445.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Data Masking - in-flight vs. at-rest</title>
            <category>South Florida</category>
            <link>http://geekswithblogs.net/hroggero/archive/2009/06/28/data-masking---in-flight-vs.-at-rest.aspx</link>
            <description>&lt;p&gt;Many organizations are faced with the threat of data theft, from which legal battles, hefty fines and negative publicity can arise. Interestingly enough stealing data is not always that difficult. In this post we will review certain aspects of data masking, a technique used to disguise personable and sensitive information.&lt;/p&gt;
&lt;p&gt;Data masking encompasses two key areas: &lt;strong&gt;in-flight&lt;/strong&gt; and &lt;strong&gt;at-rest&lt;/strong&gt;. In-flight data masking is different than encryption; the goal of this technique is to temporarily transform data from its original value before it is viewed on screen, or printed, depending on predefined security rules, such as a login name or Active Directory group. This is perhaps better described as a "need-to-know" transformation. The real data is not changed, but its representation is transformed based on who sees it. For example a supervisor may see a customer's full credit card information but a customer representative may only see the last four digits. While some applications may provide built-in support for similar features, most do not offer this capability. &lt;/p&gt;
&lt;p&gt;At-rest masking is a technique typically used by corporations that need to restore backup copies of their production systems for quality assurance, package implementation testing or software development projects. This type of masking is typically considered much more difficult for many reasons, including process changes, testing tool and script compatibility, discovery of logical entity relationships within a database and across systems and more. For example, from a process standpoint, who in your organization would be responsible for defining and maintaining the data transformation of Social Security Numbers? Should a Social Security Number be transformed the same way on DB2, Oracle and SQL Server databases? How will testing batch processes be affected if cross-system data integrity is no longer maintained after data masking? Is it possible to stage data masking over multiple days depending on the size of each system? How often should non-production systems be refreshed?&lt;/p&gt;
&lt;p&gt;In some cases data resides in flat files, XML documents, PDF documents (such as invoices) or images. Very few vendors seem to be able to mask data outside of what an ODBC driver can provide. &lt;/p&gt;
&lt;p&gt;While in-flight data masking is technically difficult to achieve (and very few vendors are available), at-rest data masking may seem technically simpler but poses significant challenges that impact software development life cycle and package implementation projects alike. Perhaps the most difficult aspect of a masking project is to identify the business and technical requirements so that a solution can be picked, be it a vendor or a custom solution. &lt;/p&gt;
&lt;p&gt;Some of the vendors that offer masking solutions include Compuware and IBM. There are a few other vendors that are more specialized if your masking needs are limited to Oracle for example. On SQL Server specifically, it is possible to devise a complex and effective masking solution using SSIS. &lt;/p&gt;
&lt;p&gt;However the real complexity of the project is not the technology, but rather the process, as discussed above. My advice with this type of project is to carefully select vendors and possibly leverage consulting firms that may be able to guide you in the difficult task of gathering requirements and selecting a vendor.  &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133106"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=133106" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/hroggero/aggbug/133106.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Herve Roggero</dc:creator>
            <guid>http://geekswithblogs.net/hroggero/archive/2009/06/28/data-masking---in-flight-vs.-at-rest.aspx</guid>
            <pubDate>Mon, 29 Jun 2009 03:36:02 GMT</pubDate>
            <comments>http://geekswithblogs.net/hroggero/archive/2009/06/28/data-masking---in-flight-vs.-at-rest.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/hroggero/comments/commentRss/133106.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Security versus Auditing</title>
            <category>South Florida</category>
            <link>http://geekswithblogs.net/hroggero/archive/2009/05/10/security-versus-auditing.aspx</link>
            <description>&lt;p&gt;I have seen an interesting issue surface recently, one that many other corporations are probably facing: the dividing forces of security and auditing. It could be argued that auditing practices should strengthen security, however this may depend on the situation. Let's take database access control as an example.&lt;/p&gt;
&lt;p&gt;In a typical two-tier application, connections established to a database server are performed using a shared account. Usually, shared accounts are considered less secured than network accounts due to the lack of strong authentication offered by network services like Kerberos. Also, database accounts are considered an issue with database auditing since these are shared accounts: who really accessed my data? &lt;/p&gt;
&lt;p&gt;So at first sight it might appear that database accounts are neither good for auditing nor for security. &lt;/p&gt;
&lt;p&gt;However, let's consider these additional factors:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;shared accounts used for application connections are usually kept secret; users do not know the user id/password of the database connection, and as a result can only see or act against the data through the application layer&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;when using network accounts (SSPI) to establish a database connection, a password is usually not required at the time of the database connection; the connection is granted automatically if the user is granted access; that's a benefit of Single Sign-On&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;database servers do not differentiate connections coming from users or from applications; the connection is granted if it is authorized&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;in many configuration settings, the accounts used through an application need to have complete access to the database so the application can perform its normal CRUD operations, while the application controls what users can do depending on application-layer access control rules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With those additional factors, we can see that configuring two-tier applications with SSPI can open significant security challenges. While corporations gain in auditing by knowing who is actually accessing which data, users can now technically connect directly to the database server without using the application, bypassing application layer security. This can create a significant security challenge and may leave databases open for attacks or unintentional data loss. &lt;/p&gt;
&lt;p&gt;Can anything be done? With SQL Server 2005 SP2 and higher, administrators can start enforcing connection rules through the use of Logon Triggers. These triggers allow more control over the connection when it is taking place, such as verifying that the connection is indeed established from the application, instead of Excel for example. Also, database firewalls can be useful in limiting the use of database or network accounts, such as the one that my company creates. &lt;/p&gt;
&lt;p&gt;This is an interesting topic and one that can be a real challenge for certain organizations. It appears finding the right balance between security and auditing may not be as straight forward as it seems. At least not in this case. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132019"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132019" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/hroggero/aggbug/132019.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>hroggero</dc:creator>
            <guid>http://geekswithblogs.net/hroggero/archive/2009/05/10/security-versus-auditing.aspx</guid>
            <pubDate>Mon, 11 May 2009 03:46:58 GMT</pubDate>
            <comments>http://geekswithblogs.net/hroggero/archive/2009/05/10/security-versus-auditing.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/hroggero/comments/commentRss/132019.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Presenting at SQL Server User Group - May 28 2009</title>
            <category>South Florida</category>
            <link>http://geekswithblogs.net/hroggero/archive/2009/05/10/presenting-at-sql-server-user-group---may-28-2009.aspx</link>
            <description>&lt;p&gt;Well - I am pleased to announce that I will be speaking at the SQL Server User Group of South Florida this coming May 28 2009 in Miramar (at the Devry University Campus). This group is run by Scott Klein.  The topic? It will be on SQL Server Performance covering SQL Server 2005 and 2008. I will be mostly talking about indexes, index strategies, execution plan analysis and tracing... &lt;/p&gt;
&lt;p&gt;This month, our sponsor if TEK Partners - they will be bying Pizza... so there is no excuse... food, fun and networking!&lt;/p&gt;
&lt;p&gt;So if you are in the area make sure to swing by!  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132017"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132017" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/hroggero/aggbug/132017.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>hroggero</dc:creator>
            <guid>http://geekswithblogs.net/hroggero/archive/2009/05/10/presenting-at-sql-server-user-group---may-28-2009.aspx</guid>
            <pubDate>Mon, 11 May 2009 02:19:54 GMT</pubDate>
            <comments>http://geekswithblogs.net/hroggero/archive/2009/05/10/presenting-at-sql-server-user-group---may-28-2009.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/hroggero/comments/commentRss/132017.aspx</wfw:commentRss>
        </item>
        <item>
            <title>SQL Server User Group - Upcoming</title>
            <link>http://geekswithblogs.net/hroggero/archive/2009/04/26/sql-server-user-group---upcoming.aspx</link>
            <description>&lt;p&gt;For those living in the area, the next SQL Server User Group event is in West Palm Beach on Wesnesday (April 29 2009) and will host Andy Warren. If you are in the area, please make sure to come!!!  For more information about time and location, please visit &lt;font face="Arial"&gt;&lt;a href="http://www.gcsqlgroup.com/"&gt;http://www.gcsqlgroup.com/&lt;/a&gt;.  NOTE: The meeting will be held on April 29, not May 7. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;The new location in WPB is:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;"&gt;CompTec&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;"&gt;1750 &lt;st1:place w:st="on"&gt;North Florida&lt;/st1:place&gt; Mango&lt;br /&gt;
&lt;st1:address w:st="on"&gt;&lt;st1:street w:st="on"&gt;Suites&lt;/st1:street&gt; 302&lt;/st1:address&gt; &amp;amp; 303&lt;br /&gt;
&lt;st1:place w:st="on"&gt;&lt;st1:city w:st="on"&gt;West Palm Beach&lt;/st1:city&gt;&lt;/st1:place&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;See you there! &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131476"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131476" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/hroggero/aggbug/131476.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>hroggero</dc:creator>
            <guid>http://geekswithblogs.net/hroggero/archive/2009/04/26/sql-server-user-group---upcoming.aspx</guid>
            <pubDate>Mon, 27 Apr 2009 01:00:47 GMT</pubDate>
            <comments>http://geekswithblogs.net/hroggero/archive/2009/04/26/sql-server-user-group---upcoming.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/hroggero/comments/commentRss/131476.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>