<?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/"
	>

<channel>
	<title>Ralf Eisenreich</title>
	<atom:link href="http://sqlblog.de/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://sqlblog.de/blog</link>
	<description>SQLBlog.DE &#124; ..things to remember</description>
	<lastBuildDate>Mon, 26 Dec 2011 14:37:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mac: Terminal with Keys HOME, END, PGUP, PGDN</title>
		<link>http://sqlblog.de/blog/2011/12/mac-terminal-with-keys-home-end-pgup-pgdn/</link>
		<comments>http://sqlblog.de/blog/2011/12/mac-terminal-with-keys-home-end-pgup-pgdn/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 14:37:28 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=734</guid>
		<description><![CDATA[If you like to use the keys for HOME, END, PAGE UP, PAGE DOWN in the Terminal you have to...]]></description>
			<content:encoded><![CDATA[<p>If you like to use the keys for HOME, END, PAGE UP, PAGE DOWN in the Terminal you have to change following setting under Terminal &#8211; Preferences &#8211; Settings &#8211; Keyboard:</p>
<ul>
<li>Home / Pos1: \033[1~</li>
<li>End: \033[4~</li>
<li>Page Up: \033[5~</li>
<li>Page Down: \033[6~</li>
</ul>
<p>This sets the right escape key sequences.</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2011/12/mac-terminal-with-keys-home-end-pgup-pgdn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac: Backup BootCamp Partition to Image</title>
		<link>http://sqlblog.de/blog/2011/10/mac-backup-bootcamp-partition-to-image/</link>
		<comments>http://sqlblog.de/blog/2011/10/mac-backup-bootcamp-partition-to-image/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 10:40:55 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=721</guid>
		<description><![CDATA[Problem: Mac OSX does not offer a tool to copy or backup the BootCamp Windows partition. E.g. the Disk Utility...]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration: underline;">Problem</span>: Mac OSX does not offer a tool to copy or backup the BootCamp Windows partition. E.g. the Disk Utility is not able to copy or backup NTFS partitions. Besides that the selection of Disk Management tools like partition manager is from my perspective very poor.</p>
<p><span style="text-decoration: underline;">Solution</span>: Happily Mac OSX is based on <a title="Wikipedia: Unix" href="http://en.wikipedia.org/wiki/Unix">Unix</a>. This offers the possibility to use the tool <a title="Wikipedia: Unix dd" href="http://de.wikipedia.org/wiki/Dd_%28Unix%29">dd</a>. Following steps need to be followed:</p>
<ol>
<li>If you wish to backup the partition to an external hard drive, plug that one in. Make sure the drive contains enough space to store the image. If you intend to clone the partition, make sure the drive contains a empty partition of equal or larger size.</li>
<li>Open a Terminal session (Applications &#8211; Utilities &#8211; Terminal)</li>
<li>Type in following command and press Enter.
<p><code>diskutil list</code></p>
<p>You will see a table with four columns showing your connected disks and partitions. Locate the BootCamp partition, and make a note of its identifier, e.g. &#8220;/dev/<em>disk0s3</em>&#8220;.</li>
<li>Unmount that BootCamp partition with following command.
<p><code>diskutil unmount /dev/<em>disk0s3</em></code></p>
<p>Make sure to replace &#8220;<em>disk0s3</em>&#8221; with your BootCamp partition identifier.</li>
<li>If you intend to clone the BootCamp partition, type in following command.
<p><code>diskutil unmount /dev/<em>disk1s1</em></code></p>
<p>Make sure to replace &#8220;<em>disk1s1</em>&#8221; with your external disk partition identifier. Do not unmount that partition if you intend to create an image from the BootCamp partition.</li>
<li>In order to clone the BootCamp partition to another partition (e.g. on your external hard drive) type in following command.
<p><code>sudo dd if=/dev/<em>disk0s3</em> of=/dev/<em>disk1s1</em></code></p>
<p>Make sure to replace &#8220;<em>disk0s3</em>&#8221; with your BootCamp partition identifier and &#8220;<em>disk1s1</em>&#8221; with your external hard drive partition identifier.</li>
<li>In order to create an image from the BootCamp partition to a specific file location (e.g. in your home dir) type in following command.
<p><code>sudo dd if=/dev/<em>disk0s3</em> of=~/Bootcamp.iso</code></p>
<p>Make sure to replace &#8220;<em>disk0s3</em>&#8221; with your BootCamp partition identifier.</p>
<p>It is recommended to compress the image in order to save disk space. Instead of using above mentioned command, please use that following.</p>
<p><code>sudo dd if=/dev/<em>disk0s3</em> | gzip &gt; ~/BootCamp.iso.gz</code></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2011/10/mac-backup-bootcamp-partition-to-image/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fifa 12 PC/Mac + PS3 Controller (Playstation 3 Gamepad)</title>
		<link>http://sqlblog.de/blog/2011/10/fifa-12-pcmac-ps3-controller-playstation-3-gamepad/</link>
		<comments>http://sqlblog.de/blog/2011/10/fifa-12-pcmac-ps3-controller-playstation-3-gamepad/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 17:07:03 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[by the way]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Fifa]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=718</guid>
		<description><![CDATA[Problem: PS3 Controller (Playstation 3 Gamepad) is not working out of the box with Fifa 12. Solution: 1. Download following...]]></description>
			<content:encoded><![CDATA[<p>Problem:<br />
PS3 Controller (Playstation 3 Gamepad) is not working out of the box with Fifa 12.</p>
<p>Solution:<br />
1. Download following zip (http://www.mediafire.com/?uxcso3f03buh9jq) and extract contents to &#8220;/Applications/FIFA12.app/Contents/Resources/transgaming/c_drive/Program Files/EA Sports/EA SPORTS FIFA Soccer 12/Game&#8221; for Mac or &#8220;C:/Program Files/EA Sports/EA SPORTS FIFA Soccer 12/Game&#8221; for PC.<br />
2. Replace Contents of buttonData.ini (in same folder) with following Code.<br />
<code><br />
AddController "myController"<br />
AddAlias ""<br />
AddAlias "XBOX 360 For Windows (Controller)"<br />
AddAlias "XBox 360 For Windows (Controller)"<br />
AddAlias "Controller (XBOX 360 For Windows)"<br />
AddAlias "Controller (Xbox 360 Wireless Receiver for Windows)"<br />
AddAlias "Xbox 360 Wireless Receiver for Windows"<br />
AddAlias "XInput Controller"<br />
AddAlias "PLAYSTATION(R)3 Controller"<br />
AddMap XENON_LEFT_ANALOG_STICK_RIGHT    VB_AI_LS_RIGHT<br />
AddMap XENON_LEFT_ANALOG_STICK_UP       VB_AI_LS_UP<br />
AddMap XENON_LEFT_ANALOG_STICK_LEFT     VB_AI_LS_LEFT<br />
AddMap XENON_LEFT_ANALOG_STICK_DOWN     VB_AI_LS_DOWN<br />
AddMap XENON_RIGHT_ANALOG_STICK_RIGHT   VB_AI_RS_RIGHT<br />
AddMap XENON_RIGHT_ANALOG_STICK_UP      VB_AI_RS_UP<br />
AddMap XENON_RIGHT_ANALOG_STICK_LEFT    VB_AI_RS_LEFT<br />
AddMap XENON_RIGHT_ANALOG_STICK_DOWN    VB_AI_RS_DOWN<br />
AddMap XENON_BUTTON_DPAD_RIGHT          VB_AI_LDPAD_RIGHT<br />
AddMap XENON_BUTTON_DPAD_UP             VB_AI_LDPAD_UP<br />
AddMap XENON_BUTTON_DPAD_LEFT           VB_AI_LDPAD_LEFT<br />
AddMap XENON_BUTTON_DPAD_DOWN           VB_AI_LDPAD_DOWN<br />
AddMap XENON_LEFT_ANALOG_STICK_RIGHT    VB_FE_LS_RIGHT<br />
AddMap XENON_LEFT_ANALOG_STICK_UP       VB_FE_LS_UP<br />
AddMap XENON_LEFT_ANALOG_STICK_LEFT     VB_FE_LS_LEFT<br />
AddMap XENON_LEFT_ANALOG_STICK_DOWN     VB_FE_LS_DOWN<br />
AddMap XENON_RIGHT_ANALOG_STICK_RIGHT   VB_FE_RS_RIGHT<br />
AddMap XENON_RIGHT_ANALOG_STICK_UP      VB_FE_RS_UP<br />
AddMap XENON_RIGHT_ANALOG_STICK_LEFT    VB_FE_RS_LEFT<br />
AddMap XENON_RIGHT_ANALOG_STICK_DOWN    VB_FE_RS_DOWN<br />
AddMap XENON_BUTTON_DPAD_RIGHT          VB_FE_LDPAD_RIGHT<br />
AddMap XENON_BUTTON_DPAD_UP             VB_FE_LDPAD_UP<br />
AddMap XENON_BUTTON_DPAD_LEFT           VB_FE_LDPAD_LEFT<br />
AddMap XENON_BUTTON_DPAD_DOWN           VB_FE_LDPAD_DOWN<br />
AddMap XENON_BUTTON_B                   VB_AI_B<br />
AddMap XENON_BUTTON_A                   VB_AI_A<br />
AddMap XENON_BUTTON_X                   VB_AI_X<br />
AddMap XENON_BUTTON_Y                   VB_AI_Y<br />
AddMap XENON_BUTTON_B                   VB_FE_CANCEL<br />
AddMap XENON_BUTTON_A                   VB_FE_SELECT<br />
AddMap XENON_BUTTON_X                   VB_FE_X<br />
AddMap XENON_BUTTON_Y                   VB_FE_Y<br />
AddMap XENON_BUTTON_LS                  VB_AI_LB<br />
AddMap XENON_BUTTON_RS                  VB_AI_RB<br />
AddMap XENON_BUTTON_LT                  VB_AI_LT<br />
AddMap XENON_BUTTON_RT                  VB_AI_RT<br />
AddMap XENON_BUTTON_LS                  VB_FE_LB<br />
AddMap XENON_BUTTON_RS                  VB_FE_RB<br />
AddMap XENON_BUTTON_LT                  VB_FE_LT<br />
AddMap XENON_BUTTON_RT                  VB_FE_RT<br />
AddMap XENON_BUTTON_BACK                VB_AI_BACK<br />
AddMap XENON_BUTTON_START               VB_AI_START<br />
AddMap XENON_BUTTON_L3                  VB_AI_L3<br />
AddMap XENON_BUTTON_R3                  VB_AI_R3<br />
AddMap XENON_BUTTON_BACK                VB_FE_HELP<br />
AddMap XENON_BUTTON_START               VB_FE_START<br />
AddMap XENON_BUTTON_L3                  VB_FE_L3<br />
AddMap XENON_BUTTON_R3                  VB_FE_R3<br />
AddController "Controller_025"<br />
AddAlias "AUTO PAD"<br />
AddAlias "Dual Trigger 3-in-1"<br />
AddAlias "Dual Trigger 3-in-1 Rumble Force"<br />
AddAlias "FireStorm Wireless Gamepad"<br />
AddAlias "Firestorm Wireless Gamepad"<br />
AddAlias "Logitech Cordless RumblePad 2"<br />
AddAlias "Logitech Cordless RumblePad 2 USB"<br />
AddAlias "Logitech Dual Action"<br />
AddAlias "Logitech Dual Action (USB)"<br />
AddAlias "Logitech Dual Action USB"<br />
AddAlias "Logitech Rumblepad 2 USB"<br />
AddAlias "Logitech RumblePad 2 USB"<br />
AddAlias "Run 'N' Drive Rumble Force"<br />
AddAlias "Run 'N' Drive Wireless"<br />
AddAlias "Run'N' Drive"<br />
AddAlias "Run'N' Drive Rumble Force"<br />
AddAlias "Run'N' Drive Wireless"<br />
AddAlias "Run'N'Drive 3-in-1 Rumble Force"<br />
AddAlias "Saitek P2900 Game Pad"<br />
AddAlias "Saitek P2900 Pad"<br />
AddAlias "Saitek P2900 USB Pad"<br />
AddAlias "Saitek P2900 Wireless Pad"<br />
AddAlias "SpeedLink D-Struct"<br />
AddAlias "SpeedLink Strike Cubed"<br />
AddAlias "SpeedLink Turbo Pad"<br />
AddAlias "T Mini Wireless"<br />
AddAlias "T-wireless 3-in-1 Rumble Force"<br />
AddAlias "TURBO PAD"<br />
AddAlias "Thrustmaster FireStorm(TM) Wireless"<br />
AddMap PC_CONTROL_BUTTON02 VB_AI_A<br />
AddMap PC_CONTROL_BUTTON02 VB_FE_SELECT<br />
AddMap PC_CONTROL_BUTTON03 VB_AI_B<br />
AddMap PC_CONTROL_BUTTON03 VB_FE_CANCEL<br />
AddMap PC_CONTROL_BUTTON04 VB_AI_Y<br />
AddMap PC_CONTROL_BUTTON04 VB_FE_Y<br />
AddMap PC_CONTROL_BUTTON01 VB_AI_X<br />
AddMap PC_CONTROL_BUTTON01 VB_FE_X<br />
AddMap PC_CONTROL_BUTTON05 VB_AI_LB<br />
AddMap PC_CONTROL_BUTTON05 VB_FE_LB<br />
AddMap PC_CONTROL_BUTTON06 VB_AI_RB<br />
AddMap PC_CONTROL_BUTTON06 VB_FE_RB<br />
AddMap PC_CONTROL_BUTTON07 VB_AI_LT<br />
AddMap PC_CONTROL_BUTTON07 VB_FE_LT<br />
AddMap PC_CONTROL_BUTTON08 VB_AI_RT<br />
AddMap PC_CONTROL_BUTTON08 VB_FE_RT<br />
AddMap PC_POV_0_UP VB_AI_LDPAD_UP<br />
AddMap PC_POV_0_UP VB_FE_LDPAD_UP<br />
AddMap PC_POV_0_LEFT VB_AI_LDPAD_LEFT<br />
AddMap PC_POV_0_LEFT VB_FE_LDPAD_LEFT<br />
AddMap PC_POV_0_DOWN VB_AI_LDPAD_DOWN<br />
AddMap PC_POV_0_DOWN VB_FE_LDPAD_DOWN<br />
AddMap PC_POV_0_RIGHT VB_AI_LDPAD_RIGHT<br />
AddMap PC_POV_0_RIGHT VB_FE_LDPAD_RIGHT<br />
AddMap PC_CONTROL_BUTTON11 VB_AI_L3<br />
AddMap PC_CONTROL_BUTTON11 VB_FE_L3<br />
AddMap PC_CONTROL_BUTTON12 VB_AI_R3<br />
AddMap PC_CONTROL_BUTTON12 VB_FE_R3<br />
AddMap PC_AXIS_0_UP VB_AI_LS_UP<br />
AddMap PC_AXIS_0_UP VB_FE_LS_UP<br />
AddMap PC_AXIS_0_LEFT VB_AI_LS_LEFT<br />
AddMap PC_AXIS_0_LEFT VB_FE_LS_LEFT<br />
AddMap PC_AXIS_0_DOWN VB_AI_LS_DOWN<br />
AddMap PC_AXIS_0_DOWN VB_FE_LS_DOWN<br />
AddMap PC_AXIS_0_RIGHT VB_AI_LS_RIGHT<br />
AddMap PC_AXIS_0_RIGHT VB_FE_LS_RIGHT<br />
AddMap PC_AXIS_2_UP VB_AI_RS_UP<br />
AddMap PC_AXIS_2_UP VB_FE_RS_UP<br />
AddMap PC_AXIS_2_LEFT VB_AI_RS_LEFT<br />
AddMap PC_AXIS_2_LEFT VB_FE_RS_LEFT<br />
AddMap PC_AXIS_2_DOWN VB_AI_RS_DOWN<br />
AddMap PC_AXIS_2_DOWN VB_FE_RS_DOWN<br />
AddMap PC_AXIS_2_RIGHT VB_AI_RS_RIGHT<br />
AddMap PC_AXIS_2_RIGHT VB_FE_RS_RIGHT<br />
AddMap PC_CONTROL_BUTTON10 VB_AI_START<br />
AddMap PC_CONTROL_BUTTON10 VB_FE_START<br />
AddMap PC_CONTROL_BUTTON09 VB_AI_BACK<br />
AddMap PC_CONTROL_BUTTON09 VB_FE_HELP<br />
</code></p>
<p>All in all, you need the &#8220;x360ce.ini&#8221;, &#8220;xinput1_3.dll&#8221; and the modified &#8220;buttonData.ini&#8221; in that folder.</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2011/10/fifa-12-pcmac-ps3-controller-playstation-3-gamepad/feed/</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>Xamarin: New founded company focused on mono and .Net</title>
		<link>http://sqlblog.de/blog/2011/05/xamarin-new-founded-company-focused-on-mono-and-net/</link>
		<comments>http://sqlblog.de/blog/2011/05/xamarin-new-founded-company-focused-on-mono-and-net/#comments</comments>
		<pubDate>Tue, 17 May 2011 09:42:47 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=714</guid>
		<description><![CDATA[Very hot topic: After the difficulties with Novell and Attachmate the developers who created great products like mono, mono touch,...]]></description>
			<content:encoded><![CDATA[<p>Very hot topic: After the difficulties with <a href="http://www.novell.com/home/">Novell</a> and <a href="http://www.attachmate.com/">Attachmate</a> the developers who created great products like <a href="http://www.mono-project.com">mono</a>, mono touch, monodroid, .. will continue their work within the new firmed company Xamarin (<a href="http://www.xamarin.com">http://www.xamarin.com</a>).</p>
<p>All the best!</p>
<p>[Source: <a href="http://tirania.org">http://tirania.org</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2011/05/xamarin-new-founded-company-focused-on-mono-and-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL: Free Online ERD/DB Modeler</title>
		<link>http://sqlblog.de/blog/2011/04/sql-free-online-erddb-modeler/</link>
		<comments>http://sqlblog.de/blog/2011/04/sql-free-online-erddb-modeler/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 12:20:25 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=706</guid>
		<description><![CDATA[I discovered the tool WWW SQL Designer (created by Ondrej Zara) years ago and was happy to notice that it...]]></description>
			<content:encoded><![CDATA[<p>I discovered the tool <a href="http://ondras.zarovi.cz/sql/demo">WWW SQL Designer</a> (created by Ondrej Zara) years ago and was happy to notice that it still exists.<br />
Great work!</p>
<div id="attachment_707" class="wp-caption aligncenter" style="width: 310px"><img src="http://sqlblog.de/blog/wp-content/uploads/2011/04/screenshot.156-300x186.jpg" alt="SQL Online ERD/DB Modeler" title="SQL Online ERD/DB Modeler" width="300" height="186" class="size-medium wp-image-707" /><p class="wp-caption-text">SQL Online ERD/DB Modeler</p></div>
<p>[Source: http://ondras.zarovi.cz/sql/demo/]</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2011/04/sql-free-online-erddb-modeler/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Midnight Commander &#8211; Keyboard Shortcuts</title>
		<link>http://sqlblog.de/blog/2011/04/midnight-commander-keyboard-shortcuts/</link>
		<comments>http://sqlblog.de/blog/2011/04/midnight-commander-keyboard-shortcuts/#comments</comments>
		<pubDate>Sat, 02 Apr 2011 05:58:39 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[mc]]></category>
		<category><![CDATA[midnight commander]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=702</guid>
		<description><![CDATA[Common Functions Ctrl + r Refresh active panel Ctrl + t Mark single file Ctrl + x c Opens chmod...]]></description>
			<content:encoded><![CDATA[<p><strong>Common Functions</strong><br />
Ctrl + r	Refresh active panel<br />
Ctrl + t	Mark single file<br />
Ctrl + x c	Opens chmod dialog for marked file<br />
Ctrl + x o	Opens chown dialog for marked file<br />
Alt + ?	Opens search dialog<br />
Ctrl-x a	Open VFS list. If a ftp session times out, you can use this to free the open vfs so you can log in again.</p>
<p><strong>Panel Functions</strong><br />
TAB	Switch focus between left and right panel<br />
Insert	Marks or removes mark on file(s)<br />
Alt + g	Marks first file or directory in active panel<br />
Alt + r	Marks middle file or directory in active panel<br />
Alt + j	Marks last file or directory in active panel<br />
Alt + s	Incremental search<br />
Ctrl + /	Look for filename given in last line of active panel (not whole screen), and jumps on first file<br />
*	Marks removes marking for all files in active panel (not directories)<br />
+ (Plus)	Brings up the input box where it can be given regular expression. All files with names that fill condition(s) in regular expression will be marked.<br />
\ (Backslash)	Remove marking for more data (opposite to + )</p>
<p><strong>Shell Functions</strong><br />
Alt + Enter	Copies selected filename in command line<br />
Ctrl + Shft + Enter	Copies full path of selected file in the command line<br />
Alt + H	Shows command line history</p>
<p><strong>Function Keys</strong><br />
F1	Help<br />
F2	Opens user menu<br />
F3	View selected file content<br />
F4	Opens file in internal text editor<br />
F5	Copies selected file. Default is to another panel, but it asks first.<br />
F6	Moving file. Default is to another panel, but it asks first.<br />
F7	Make directory.<br />
F8	Delete file or directory.<br />
F9	Opens main menu at the top of the screen.<br />
F10	Ends current action; editor, viewer, dialog window or ends mc program. </p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2011/04/midnight-commander-keyboard-shortcuts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>T-SQL: IsNumeric function</title>
		<link>http://sqlblog.de/blog/2009/11/t-sql-isnumeric-function/</link>
		<comments>http://sqlblog.de/blog/2009/11/t-sql-isnumeric-function/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 16:18:27 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=691</guid>
		<description><![CDATA[The IsNumeric function has a very variable interpretation algorithm. In order to get only numeric values following statement should be...]]></description>
			<content:encoded><![CDATA[<p>The IsNumeric function has a very variable interpretation algorithm. In order to get only numeric values following statement should be used:</p>
<p><code><br />
CASE WHEN (NUM_VALUE LIKE '%[0-9]%' AND ISNUMERIC(<em>NUM_VALUE</em>) = 1) THEN CAST(NUM_VALUE AS FLOAT) ELSE NULL END AS NUM_VALUE<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/11/t-sql-isnumeric-function/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SSRS: Add Excel Export Link to Report</title>
		<link>http://sqlblog.de/blog/2009/10/ssrs-add-excel-export-link-to-report/</link>
		<comments>http://sqlblog.de/blog/2009/10/ssrs-add-excel-export-link-to-report/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 14:45:08 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[ssrs]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=689</guid>
		<description><![CDATA[How to add a Excel Export Link to a Report Add an item (e.g. TextBox, Image, etc.) and open the...]]></description>
			<content:encoded><![CDATA[<p><strong>How to add a Excel Export Link to a Report</strong><br />
Add an item (e.g. TextBox, Image, etc.) and open the <em>properties dialog</em>. Under the <em>navigation tab</em> use the setting <em>Go to URL</em> and add following comand.</p>
<p><code><br />
=Globals!ReportServerUrl.ToString() + "/Pages/ReportViewer.aspx?"<br />
+ System.Web.HttpUtility.UrlEncode("https://ReportServer/ReportFolder/Report.rdl")<br />
+ "&#038;rs:Command=Render&#038;rs:Format=EXCEL&#038;rc:OmitFormulas=true"<br />
+ "&#038;[Parameter_Name1]=" + Join(Parameters![Parameter_Name1].Value, "&#038;[Parameter_Name1]=") --> Multivalue Parameter<br />
+ "&#038;[Parameter_Name2]=" + System.Web.HttpUtility.UrlEncode(Parameters![Parameter_Name2].Value) --> Normaler Paraemter<br />
</code></p>
<p>It is important to use the <em>HttpUtility.UrlEncode()</em> function in order to pass the correct values.<br />
In the properties dialog of the report add a reference to the <em>System.Web</em> assembly.</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/10/ssrs-add-excel-export-link-to-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSIS: Execute Package via Stored Procedure</title>
		<link>http://sqlblog.de/blog/2009/09/ssis-execute-package-via-stored-procedure/</link>
		<comments>http://sqlblog.de/blog/2009/09/ssis-execute-package-via-stored-procedure/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 12:42:44 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[ssis]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=671</guid>
		<description><![CDATA[There are two options executing SSIS packages: - xp_cmdshell command (not recommended for security reasons) - sp_start_job command The main...]]></description>
			<content:encoded><![CDATA[<p>There are two options executing SSIS packages:</p>
<p>- <strong>xp_cmdshell</strong> command (not recommended for security reasons)<br />
- <strong>sp_start_job</strong> command</p>
<p>The main difference between both options is the execution method. The xp_cmdshell command is a <em>synchronous</em> call and the sp_start_job command is an <em>asynchronous</em> call.</p>
<p><strong>xp_cmdshell command</strong> (synchronous)</p>
<ul>
<li>enable xp_cmdshell mode in Surface Area Configuration Tool for SQL Server</li>
<li>use following procedure to execute SSIS package:<br />
<code><br />
DECLARE @returncode int<br />
EXEC @returncode = xp_cmdshell 'dtexec /f "<strong>PackageNameWithFullPath</strong>.dtsx"'<br />
</code>
</li>
</ul>
<p><strong>sp_start_job</strong> (asynchronous)</p>
<ul>
<li>define job in SQL Server Agent with SSIS execution step</li>
<li>use following procedure to start SQL Server Agent job with SSIS execution step:<br />
<code><br />
[msdb].dbo.sp_start_job @job_name='<strong>JobName</strong>'<br />
</code>
</li>
<li>check execution status of job, since the call is asynchronous:<br />
<code><br />
SELECT<br />
	[server],<br />
	[start_execution_date],<br />
	[stop_execution_date],<br />
	[run_date],<br />
	[run_duration],<br />
	[run_status],<br />
	[message]<br />
FROM<br />
	MSDB.DBO.SYSJOBS Z<br />
INNER JOIN<br />
	MSDB.DBO.SYSJOBACTIVITY A<br />
	ON Z.JOB_ID = A.JOB_ID<br />
INNER JOIN<br />
	(<br />
	SELECT<br />
		MAX(SESSION_ID) AS SESSION_ID<br />
	FROM<br />
		MSDB.DBO.SYSSESSIONS<br />
	) AS B<br />
	ON	A.SESSION_ID = B.SESSION_ID<br />
LEFT JOIN<br />
	MSDB.DBO.SYSJOBHISTORY C<br />
	ON A.JOB_HISTORY_ID = C.INSTANCE_ID<br />
WHERE<br />
	Z.NAME = '<strong>JobName</strong>'<br />
</code>
</li>
</ul>
<p>There is following way to make the call of sp_start_job synchronous.</p>
<p><strong>sp_start_job</strong> (<strong>synchronous</strong>)</p>
<ul>
<li>define job in SQL Server Agent with SSIS execution step</li>
<li>use following procedure to start SQL Server Agent job with SSIS execution step:<br />
<code><br />
ALTER PROCEDURE [dbo].[AGENT_JOB_CHECK2]<br />
-- Add the parameters for the stored procedure here<br />
DECLARE @job_name nvarchar(100)='',<br />
DECLARE @maxwaitmins int = 5<br />
AS<br />
BEGIN<br />
set NOCOUNT ON;<br />
set XACT_ABORT ON;<br />
    BEGIN TRY<br />
    declare @running as int<br />
    declare @seccount as int<br />
    declare @maxseccount as int<br />
    set @maxseccount = 60*@maxwaitmins<br />
    set @seccount = 0<br />
    set @running = 0<br />
    declare @job_owner sysname<br />
    declare @job_id UNIQUEIDENTIFIER<br />
    set @job_owner = SUSER_SNAME()<br />
    -- get job id<br />
    select @job_id=job_id<br />
    from msdb.dbo.sysjobs sj<br />
    where sj.name=@job_name<br />
    -- invalid job name then exit with an error<br />
    if @job_id is null<br />
        RAISERROR (N'Unknown job: %s.', 16, 1, @job_name)<br />
    -- output from stored procedure xp_sqlagent_enum_jobs is captured in the following table<br />
    declare @xp_results TABLE ( job_id                UNIQUEIDENTIFIER NOT NULL,<br />
                                last_run_date         INT              NOT NULL,<br />
                                last_run_time         INT              NOT NULL,<br />
                                next_run_date         INT              NOT NULL,<br />
                                next_run_time         INT              NOT NULL,<br />
                                next_run_schedule_id  INT              NOT NULL,<br />
                                requested_to_run      INT              NOT NULL, -- BOOL<br />
                                request_source        INT              NOT NULL,<br />
                                request_source_id     sysname          COLLATE database_default NULL,<br />
                                running               INT              NOT NULL, -- BOOL<br />
                                current_step          INT              NOT NULL,<br />
                                current_retry_attempt INT              NOT NULL,<br />
                                job_state             INT              NOT NULL)<br />
    -- start the job<br />
    declare @r as int<br />
    exec @r = msdb..sp_start_job @job_name<br />
    -- quit if unable to start<br />
    if @r<>0<br />
        RAISERROR (N'Could not start job: %s.', 16, 2, @job_name)<br />
    -- start with an initial delay to allow the job to appear in the job list (maybe I am missing something ?)<br />
    WAITFOR DELAY '0:0:10';<br />
    set @seccount = 10<br />
    -- check job run state<br />
    insert into @xp_results<br />
    execute master.dbo.xp_sqlagent_enum_jobs 1, @job_owner, @job_id<br />
    set @running= (SELECT top 1 running from @xp_results)<br />
    while @running<>0 and @seccount < @maxseccount<br />
    begin<br />
        WAITFOR DELAY '0:0:10';<br />
        set @seccount = @seccount + 10<br />
        delete from @xp_results<br />
        insert into @xp_results<br />
        execute master.dbo.xp_sqlagent_enum_jobs 1, @job_owner, @job_id<br />
        set @running= (SELECT top 1 running from @xp_results)<br />
    end<br />
	-- result: query<br />
	SELECT<br />
		[server],<br />
		[start_execution_date],<br />
		[stop_execution_date],<br />
		[run_date],<br />
		[run_duration],<br />
		[run_status],	-- 0: failed, 1: success, null: running<br />
		[message]<br />
	FROM<br />
		MSDB.DBO.SYSJOBS Z<br />
	INNER JOIN<br />
		MSDB.DBO.SYSJOBACTIVITY A<br />
		ON Z.JOB_ID = A.JOB_ID<br />
	INNER JOIN<br />
		(<br />
		SELECT<br />
			MAX(SESSION_ID) AS SESSION_ID<br />
		FROM<br />
			MSDB.DBO.SYSSESSIONS<br />
		) AS B<br />
		ON	A.SESSION_ID = B.SESSION_ID<br />
		LEFT JOIN<br />
		MSDB.DBO.SYSJOBHISTORY C<br />
		ON A.JOB_HISTORY_ID = C.INSTANCE_ID<br />
	WHERE Z.NAME = @job_name<br />
	-- result: not ok (=1) if still running<br />
    --if @running <> 0<br />
        --return 0<br />
    --else<br />
        --return 1<br />
    END TRY<br />
    BEGIN CATCH<br />
    DECLARE<br />
        @ErrorMessage    NVARCHAR(4000),<br />
        @ErrorNumber     INT,<br />
        @ErrorSeverity   INT,<br />
        @ErrorState      INT,<br />
        @ErrorLine       INT,<br />
        @ErrorProcedure  NVARCHAR(200);<br />
    SELECT<br />
        @ErrorNumber = ERROR_NUMBER(),<br />
        @ErrorSeverity = ERROR_SEVERITY(),<br />
        @ErrorState = ERROR_STATE(),<br />
        @ErrorLine = ERROR_LINE(),<br />
        @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-');<br />
    SELECT @ErrorMessage =<br />
        N'Error %d, Level %d, State %d, Procedure %s, Line %d, ' +<br />
            'Message: '+ ERROR_MESSAGE();<br />
    RAISERROR<br />
        (<br />
        @ErrorMessage,<br />
        @ErrorSeverity,<br />
        1,<br />
        @ErrorNumber,    -- original error number.<br />
        @ErrorSeverity,  -- original error severity.<br />
        @ErrorState,     -- original error state.<br />
        @ErrorProcedure, -- original error procedure name.<br />
        @ErrorLine       -- original error line number.<br />
        );<br />
    END CATCH<br />
END<br />
</code>
</li>
</ul>
<p>[Source: <a href="http://blog.boxedbits.com/archives/124">http://blog.boxedbits.com/archives/124</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/09/ssis-execute-package-via-stored-procedure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>W123: Lüftungsgitter ausbauen und wechseln</title>
		<link>http://sqlblog.de/blog/2009/09/w123-luftungsgitter-ausbauen-und-wechseln/</link>
		<comments>http://sqlblog.de/blog/2009/09/w123-luftungsgitter-ausbauen-und-wechseln/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 19:38:17 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[Mercedes]]></category>
		<category><![CDATA[W123]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=654</guid>
		<description><![CDATA[Kurzanleitung für Mercedes W123: Lüftungsgitter ausbauen und wechseln Halteklammern lösen: Dazu die Spreizer in der Mitte mit einem kleinen Schraubendreher...]]></description>
			<content:encoded><![CDATA[<p><strong>Kurzanleitung für Mercedes W123</strong>: <em>Lüftungsgitter ausbauen und wechseln</em></p>
<ul>
<li><strong>Halteklammern lösen</strong>: Dazu die Spreizer in der Mitte mit einem kleinen Schraubendreher durch drücken (siehe Bild 1). Diese fallen dann in den Kasten und müssen nach Abnahme des Gitters eingesammelt werden. Es sind bei beiden Seiten je vier Klammern zu lösen.<br />
<div id="attachment_658" class="wp-caption aligncenter" style="width: 310px"><a href="http://sqlblog.de/blog/wp-content/uploads/2009/09/w123_luftgitter_01.jpg"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/09/w123_luftgitter_01-300x192.jpg" alt="W123 Luftgitter: Bild 1" title="W123 Luftgitter: Bild 1" width="300" height="192" class="size-medium wp-image-658" /></a><p class="wp-caption-text">W123 Luftgitter: Bild 1</p></div>
	</li>
<li><strong>linken Scheibenwischer abmontieren</strong>: Dazu Kappe am Scheibenwischer hochklappen und dann die Schraube lösen. Den Scheibenwischer hochklappen und mit leichten Drehbewegungen abziehen. Achtung: die vorhandene Unterlegscheibe und Mutter aufheben. Die Gummimuffe (siehe großer Kreis) muss ebenfalls abgezogen werden (siehe Bild 2).<br />
<div id="attachment_661" class="wp-caption aligncenter" style="width: 310px"><a href="http://sqlblog.de/blog/wp-content/uploads/2009/09/w123_luftgitter_02.jpg"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/09/w123_luftgitter_02-300x84.jpg" alt="W123 Luftgitter: Bild 2" title="W123 Luftgitter: Bild 2" width="300" height="84" class="size-medium wp-image-661" /></a><p class="wp-caption-text">W123 Luftgitter: Bild 2</p></div>
	</li>
<li><strong>Abnahme der Lüftungsgitter</strong>: Das Lüftungsgitter mit leichten Hebelbewegungen abziehen und noch vorhandene Klammern einsammeln. Die durchgefallenen Spreizer einsammeln. Es müssen am Ende je Gitter vier Klammern und vier Spreizer vorhanden sein.
	</li>
<li><strong>neue Lüftungsgitter einsetzen</strong>: Die neuen Lüftungsgitter einsetzen (müssen leicht einrasten) und je Gitter die vier Halteklammern einsetzen. In jede Halteklammer den Spreitzer einsetzen und eben drücken (etwas Kraft ist notwendig).<br />
<div id="attachment_666" class="wp-caption aligncenter" style="width: 310px"><a href="http://sqlblog.de/blog/wp-content/uploads/2009/09/w123_luftgitter_03.jpg"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/09/w123_luftgitter_03-300x112.jpg" alt="W123 Luftgitter: Bild 3" title="W123 Luftgitter: Bild 3" width="300" height="112" class="size-medium wp-image-666" /></a><p class="wp-caption-text">W123 Luftgitter: Bild 3</p></div>
	</li>
<li><strong>linken Scheibenwischer montieren</strong>: Zuerst die Gummimuffe einsetzen und dann den Scheibenwischer aufsetzen. Darauf wieder die Scheibe und die Mutter montieren.<br />
<div id="attachment_667" class="wp-caption aligncenter" style="width: 310px"><a href="http://sqlblog.de/blog/wp-content/uploads/2009/09/w123_luftgitter_04.jpg"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/09/w123_luftgitter_04-300x121.jpg" alt="W123 Luftgitter: Bild 4" title="W123 Luftgitter: Bild 4" width="300" height="121" class="size-medium wp-image-667" /></a><p class="wp-caption-text">W123 Luftgitter: Bild 4</p></div>
	</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/09/w123-luftungsgitter-ausbauen-und-wechseln/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL Server: Security Check List</title>
		<link>http://sqlblog.de/blog/2009/08/sql-server-security-check-list/</link>
		<comments>http://sqlblog.de/blog/2009/08/sql-server-security-check-list/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 15:50:54 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[sicherheit]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=635</guid>
		<description><![CDATA[In the following you find a compact catalog of steps which should be considered in a SQL Server environment. It...]]></description>
			<content:encoded><![CDATA[<p>In the following you find a compact catalog of steps which should be considered in a SQL Server environment.<br />
It is a conclusion of information from different sources.</p>
<p><strong>Check List</strong><br />
<em>Installation &#038; Patching</em></p>
<ul>
<li>Are only required components installed? Additional components should be installed when required.</li>
<li>As Service Account a Local or Domain Account should be rather used than a System Account.</li>
<li>A separate account for each service should be used.</li>
<li>Service accounts should use standard privileges (no special). The privileges are applied per Group Membership (SQL Server supplied group accounts).</li>
<li>Service Accounts should be applied with SQL Server Configuration Manager.</li>
<li>Always the most recent updates should be used.</li>
<li>Do not apply automatic updates. Rather test them before on a test environment.</li>
</ul>
<p><em>Configuration: Surface Area Reduction</em></p>
<ul>
<li>Surface Area Configuration Tool: only required features should be enabled.</li>
<li>Only Required Services should be set to Auto startup. Others should be set to Manual startup. Also consider to set some Services to Disabled startup.</li>
<li>If not needed supported Network protocols should be disabled in Configuration Manager.</li>
<li>If not needed, SQL Server should not be exposed to all networks (e.g. the Internet).</li>
<li>For some Configurations it is easier if named instances use fixed ports, rather than  dynamic ports.</li>
<li>Surface Area Configuration Tool: the xp_cmdshell should be disabled unless it is absolutely needed.</li>
<li>Surface Area Configuration Tool: COM components should be disabled once all COM components have been converted to SQLCLR.</li>
<li>Surface Area Configuration Tool: both mail procedures (database mail and SQL mail) should be disabled unless it required to send mails from SQL Server. Rather use database mail.</li>
<li>Surface Area Configuration Tool: standard policy should be enforced for extended procedure usage.</li>
<li>No system stored procedure should be removed by dropping it.</li>
<li>User or Administrator access should not be denied to the extended procedures by using DENY all.</li>
<li>Surface Area Configuration Tool: All exceptions to the above statements should be documented here.</li>
</ul>
<p><em>SQL Server Agent</em></p>
<ul>
<li>In order to apply special privileges to Jobs, Credentials should be used, instead of adjusting the privileges of SQL Server Agent service account.</li>
<li>In order to execute a Job with different Windows credentials, Proxy accounts should be used.</li>
</ul>
<p><em>Security: Authentication (general)</em></p>
<ul>
<li>Always Windows Authentication should be used. Mixed Authentication should be used only for Non-Windows accounts or incompatible applications.</li>
<li>The sa account should have a strong and known password.</li>
<li>If possible, the sa account should be renamed.</li>
<li>The SQL Server Management should not be done using the sa account. Rather use a known login and assign the sysadmin privilege to it.</li>
</ul>
<p><em>Security: Authentication (administrative access)</em></p>
<ul>
<li>Use administrative privileges only when needed to access SQL Server.</li>
<li>The number of administrators should be as low as possible.</li>
<li>Administrative logins should not be linked to the BuiltIn\Administrators group.</li>
</ul>
<p><em>Security: Authorisation</em></p>
<ul>
<li>Permissions on DB objects should be managed using Database roles or Windows groups.</li>
<li>Guest access should not be enabled.</li>
</ul>
<p><em>Security: Scanner Tools</em></p>
<ul>
<li>Use Microsoft Best Practices Analyser to identiy possible weak points in SQL Server 2005.</li>
<li>Use Microsoft Baseline Security Analyser to identify weak points in your operating System.</li>
</ul>
<p><em>Security: Password Policy</em></p>
<ul>
<li>Set up a strong password policy, including an expiration and a complexity policy. E.g. use the company password policy.</li>
<li>If using SQL logins, SQL Server should run on Windows Server 2003 OS. Also password policies should be mandatory.</li>
<li>Application should support the change procedure for SQL Login passwords.</li>
<li>New SQL Logins should have the property MUST_CHANGE_ON_FIRST_ACCESS on true.</li>
<li>Security on Database objects should be managed by using schemas.</li>
</ul>
<p><em>Database Properties</em></p>
<ul>
<li>Databases should have distinct owners. The sa user should not own all databases.</li>
<li>The number of owners per Database should be as low as possible.</li>
</ul>
<p><em>Schema Properties</em></p>
<ul>
<li>Similar SQL objects should be grouped into the same schema.</li>
<li>Schemas should not be owned only by dbo.</li>
<li>The number of schema owners should be minimized.</li>
</ul>
<p><em>Catalog Views</em></p>
<ul>
<li>Catalog views are secure by default, so no additional action is required to secure them.</li>
</ul>
<p><em>Remote Data Source Execution</em></p>
<ul>
<li>Instead of Remote server definitions rather Linked Servers should be used.</li>
<li>Ad hoc queries through Linked Servers should be disabled if not needed.</li>
</ul>
<p><em>Execution Context</em></p>
<ul>
<li>Rather use EXECUTE AS instead of SETUSER.</li>
<li>Rather use WITH NO REVERT/COOKIE instead of Application Roles.</li>
</ul>
<p><em>Data Encryption</em></p>
<ul>
<li>Information which is classified as secret (or confidential) should be encrypted.</li>
<li>Data encryption should be done with symmetric keys which are protected by using asymmetric keys or certificates.</li>
<li>Keys should be password-protected and the master key encryption should be removed for the most secure configuration.</li>
<li>The service master key, database master keys, and certificates should be backed-up by using the key-specific DDL statements.</li>
</ul>
<p><em>Auditing</em></p>
<ul>
<li>The amount of auditing data (detail level) should be project specific.</li>
<li>C2 auditing should be enabled only if explicitly needed.</li>
<li>DDL and specific server events should be audited by using trace events or event notifications.</li>
<li>DML must be audited by using trace events.</li>
<li>WMI should ber used to be alerted of emergency events.</li>
</ul>
<p><strong>Fazit</strong><br />
My recommendation is to use following Test Protocol in order to check the several steps.</p>
<p><strong>Download</strong>: <a href="http://sqlblog.de/blog/wp-content/uploads/2009/08/T_SQL_Server_Best_Practices.xls">SQL Server: Check List Best Practices</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/08/sql-server-security-check-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wireshark: successor application of Ethereal</title>
		<link>http://sqlblog.de/blog/2009/07/wireshark-successor-application-of-ethereal/</link>
		<comments>http://sqlblog.de/blog/2009/07/wireshark-successor-application-of-ethereal/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 16:17:26 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[by the way]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[sicherheit]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=622</guid>
		<description><![CDATA[Wireshark is the successor application of Ethereal. Wireshark is a free (GNU General Public License) network traffic analyser (packet sniffer)....]]></description>
			<content:encoded><![CDATA[<div id="attachment_623" class="wp-caption alignnone" style="width: 355px"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/07/wireshark_logo.png" alt="Wireshark Logo" title="Wireshark Logo" width="345" height="107" class="size-full wp-image-623" /><p class="wp-caption-text">Wireshark Logo</p></div>
<p><a href="http://www.wireshark.org/">Wireshark</a> is the successor application of <a href="http://ethereal.com/">Ethereal</a>. Wireshark is a free (<a href="http://en.wikipedia.org/wiki/GNU_General_Public_License">GNU General Public License</a>) network traffic analyser (packet sniffer).<br />
This tool is very useful to test encrypted connections of own applications or to analyse active connections and data flows on the own desktop.</p>
<p><strong>Here is an application screenshot</strong>:<br />
The application layout consists of 3 parts (windows) &#8211; packet list, packet details and packet bytes.<br />
<div id="attachment_625" class="wp-caption alignnone" style="width: 531px"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/07/wireshark_app.png" alt="Wireshark Application Screenshot" title="Wireshark Application Screenshot" width="521" height="377" class="size-full wp-image-625" /><p class="wp-caption-text">Wireshark Application Screenshot</p></div></p>
<p><strong>A sample ICQ data flow</strong>:<br />
This data flow contains the message: &#8220;Gratulation zum Motoradführerschein <img src='http://sqlblog.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8220;<br />
<div id="attachment_626" class="wp-caption alignnone" style="width: 600px"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/07/ICQ-Traffic.png" alt="ICQ Data Flow" title="ICQ Data Flow" width="590" height="244" class="size-full wp-image-626" /><p class="wp-caption-text">ICQ Data Flow</p></div></p>
<p><strong>Supported Systems</strong>:<br />
Wireshark runs on Unix-like systems (e.g. Linux, Solaris, HP-UX, FreeBSD, NetBSD, OpenBSD and Mac OS X) and on Microsoft Windows.</p>
<p>[Source: <a href="http://www.wireshark.org/">Wireshark</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/07/wireshark-successor-application-of-ethereal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linked SQL Server: Encrypted Connection</title>
		<link>http://sqlblog.de/blog/2009/07/linked-sql-server-encrypted-connection/</link>
		<comments>http://sqlblog.de/blog/2009/07/linked-sql-server-encrypted-connection/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 08:59:50 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[sicherheit]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=591</guid>
		<description><![CDATA[Linked SQL Server (applies to SQL Server 2005 / SQL Server 2008 / later) It can happen that an application...]]></description>
			<content:encoded><![CDATA[<p><strong>Linked SQL Server (applies to SQL Server 2005 / SQL Server 2008 / later)</strong><br />
It can happen that an application may need data stored in second database which is not located on the same instance of SQL Server. That instance could be on the same physical machine or it could be on another machine. There are many solutions to this scenario, but it depends on your requirements which solution you should choose. If there is no need to transport a huge amount of data between the two SQL Server instances then you should consider to register the second instance as Linked SQL Server into the first instance.</p>
<p>The advantage is that the Linked Server can provide seamlessly data access to the application. By the way, Linked Servers can be also used to register Non-SQL-Server instances.</p>
<p><strong>Basic Architecture Example</strong><br />
The following illustration shows a basic architecture sample. As you can see the Client is only accessing the Application Server and the Application Server is only accessing the first SQL Server.<br />
<div id="attachment_595" class="wp-caption aligncenter" style="width: 310px"><a href="http://sqlblog.de/blog/wp-content/uploads/2009/07/Server_Topologie.png"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/07/Server_Topologie-300x56.png" alt="Linked SQL Server: Basic Architecture" title="Linked SQL Server: Basic Architecture" width="300" height="56" class="size-medium wp-image-595" /></a><p class="wp-caption-text">Linked SQL Server: Basic Architecture</p></div></p>
<p>This means the Application Server is submitting only one query to the first SQL Server instance and gets the result back only from the the same SQL Server instance. The data retrieval from the second SQL Server instance is processed by the first SQL Server instance.<br />
More detailed:  If the application running on the Application Server submits a query to the frist SQL Server instance that needs to retrieve data from a database hosted on the second SQL Server instance, then a so called <em>Distributed Query</em> is fired. An Example for such a query:</p>
<p><code><br />
SELECT SERVER2.[DB].[SCHEMA].[TABLE].[FIELD]<br />
FROM SERVER2.[DB]<br />
</code></p>
<p>In this sample the SERVER2 (= Linked Server Registration name on SERVER1) identifies that I am starting a distributed query.</p>
<p><strong>How to setup the Linked Server</strong><br />
You can register a Linked Server instance within Management Studio as the following illustration shows.<br />
<div id="attachment_601" class="wp-caption aligncenter" style="width: 304px"><img src="http://sqlblog.de/blog/wp-content/uploads/2009/07/Linked_Server_MMS.png" alt="Linked SQL Server: Management Studio" title="Linked SQL Server: Management Studio" width="294" height="274" class="size-full wp-image-601" /><p class="wp-caption-text">Linked SQL Server: Management Studio</p></div></p>
<p>For a greater flexibility I recommend to use the stored procedure.<br />
<code><br />
EXEC master.dbo.sp_addlinkedserver<br />
@server = N'REGISTRATION_NAME',<br />
@srvproduct=N'',<br />
@provider=N'SQLNCLI',<br />
@datasrc=N'SERVER\INSTANCE',<br />
@provstr=N'',<br />
@catalog = 'DATABASE_NAME'<br />
</code></p>
<p><strong>Linked Server Options: Server Options</strong><br />
Following Server options are available:</p>
<ul>
<li><strong>Collation Compatible</strong>: is used to identify whether or not the Linked Server has the same collation as the Local Server, should be set only the to true if you know for sure that both instances have the same collation. </li>
<li><strong>Data Access</strong>: is used allow data access on the linked server, should be true. This option can be used to disable a Linked Server temporally.</li>
<li><strong>RPC</strong>: is used to allow remote procedures calls <strong>from</strong> the Linked Server.</li>
<li><strong>RPC out</strong>: is used to allow remote procedures calls <strong>to</strong> the Linked Server (procedures which are defined on the second instance).</li>
<li><strong>Use Remote Collation</strong>: is used to specify that the collation setting from the remote instance is used.</li>
<li><strong>Collation Name</strong>: is to specify the collation setting of the Linked Server.</li>
<li><strong>Connection Timeout</strong>: is used to specify a time the Local Server waits to obtain a connection to the Linked Server (Zero used the remote instance setting).</li>
<li><strong>Query Timeout</strong>: is used to specify a time the Local Server waits to retrieve data from the Linked Server (Zero used the remote instance setting).</li>
</ul>
<p><strong>Linked Server Options: Security</strong></p>
<ul>
<li><strong>Login mapping</strong>: is a way to associate a login on the Local Server, with a login on the Remote Server. There are two options &#8211; Impersonate login and SQL login.</li>
<li><strong>Impersonate login</strong>: uses a local Windows login and uses it to connect to the Linked Server, by impersonating it. For this login delegation has to be enabled between the two Servers!</li>
<li><strong>SQL login</strong>: is used by associating a local login with a remote login and password. The remote login needs to be a SQL Server Authenticated user on the remote server.</li>
</ul>
<p>For logins which are not defined in the mapping you can specify the behavior for the connection to the linked server. There are four different options that are available by choosing the corresponding radio button. </p>
<ul>
<li><strong>Not be made</strong>: any users who are not added to the mapping list cannot connect to the Linked Server.</li>
<li><strong>Be made without using a security context</strong>: can be used for Data Sources which do not require any authentication. E.g. text files.</li>
<li><strong>Be made using Login’s current security context</strong>: the Windows account of the current login is used to connect to the Linked Server. The Local Server has to be able to impersonate the corresponding local account. This option is a simple way to specify that all Windows accounts are able to connect to the Linked Server, without mapping each login.</li>
<li><strong>Be made with this security context</strong>: specifies that all logins connecting to the Linked Server are using a single remote login and password (SQL Server Authenticated login).</li>
</ul>
<p><strong>Encryption of Connection stream</strong><br />
SQL Server is able to encrypt the connection between Client and Server. Since SQL Server 2005 you do not necessarily need to use SSL certificates. However, it makes sense to have certificates, because the Client can not check the identity of the Server. By the way, if you use a certificate which was generated from the Server itself then it will not be trustful.</p>
<p>The Login packets are always encrypted since SQL Server 2005, if the Client supports it. Encrypted communication between Client and Server is supported since MDAC 2.6 and third party Client tools should be ckecked. It is important to know that encryption takes additional CPU time and that encrypted data streams cannot be compressed anymore.</p>
<p>The encryption option can be activated in the Configuration Manager (SQL Server Network Cobnfiguration). Choosing the Properties dialog for an Instance you can set the option &#8220;Force Encryption&#8221; to true.<br />
With this option set to true the SQL Server instance only accepts encrypted connections. If you want to have both connection options (encrypted / non-encrypted) then you should not set this option to true.</p>
<p>If you do not choose a certificate (under certificate tab) then SQL Server 2005 (or later) generates a self-signed certificate. This means that the communication between Client and Server is encrypted and that spoofing of data is not possible anymore.</p>
<p><strong>Encryption of Linked Server Connection Stream</strong><br />
To enable the encryption of a Linked Server connection stream you should use the provider string option &#8220;Encrypted=YES&#8221;. The following stored procedure includes this option.</p>
<p><code><br />
EXEC master.dbo.sp_addlinkedserver<br />
@server = N'REGISTRATION_NAME',<br />
@srvproduct=N'',<br />
@provider=N'SQLNCLI',<br />
@datasrc=N'SERVER\INSTANCE',<br />
@provstr=N'<strong>Encrypt=yes;</strong>',<br />
@catalog = 'DATABASE_NAME'</code></p>
<p>The Linked SQL Server connection is now encrypted using a self-signed certificate or if available a Server certificate.</p>
<p><strong>How to check encrypted connection for SQL Server</strong><br />
I recommend the tool <a href="http://www.wireshark.org/">Wireshark</a> (former known as <a href="http://www.ethereal.com/">Ethereal</a>) to check the packages and look into the data. Just run this tool, capture a stream and fire a SELECT statement.</p>
<p><strong>Conclusion</strong><br />
Registering another SQL Server instance as Linked Server allows you to submit T-SQL statements on one SQL Server instance, which retrieves data from a second instance. Moreover it is possible to fire linked statements so that you can join data between several instances.</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/07/linked-sql-server-encrypted-connection/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>virtuelle Weinproben: aromicon</title>
		<link>http://sqlblog.de/blog/2009/07/virtuelle-weinproben-aromicon/</link>
		<comments>http://sqlblog.de/blog/2009/07/virtuelle-weinproben-aromicon/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 20:00:12 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[bookmarks]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=584</guid>
		<description><![CDATA[Manchmal ist es schwierig, jemanden den Geschmack von Wein zu beschreiben. Eine coole Suchmaschine Weinsuchmaschine hilft dabei: aromicon. aromicon ist...]]></description>
			<content:encoded><![CDATA[<p>Manchmal ist es schwierig, jemanden den Geschmack von Wein zu beschreiben. Eine coole <del datetime="2009-07-07T19:57:16+00:00">Suchmaschine</del> Weinsuchmaschine hilft dabei: <a href="http://www.aromicon.com/">aromicon</a>.</p>
<blockquote><p>
aromicon ist eine Geschmackssuchmaschine für Wein. Sie können Weine nach den Suchkriterien Wunscharomen, passende Speisen, Süße, Rebsorte, Tannine und Region anzeigen lassen. Die Suche erfolgt in tausenden von Weinen aus zahlreichen Onlineshops.
</p></blockquote>
<p>[Quelle: http://www.aromicon.com]</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/07/virtuelle-weinproben-aromicon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSIS: SQL Server Agent Job (run packages)</title>
		<link>http://sqlblog.de/blog/2009/07/ssis-sql-server-agent-job-run-packages/</link>
		<comments>http://sqlblog.de/blog/2009/07/ssis-sql-server-agent-job-run-packages/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 11:33:54 +0000</pubDate>
		<dc:creator>Ralf</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[ssis]]></category>

		<guid isPermaLink="false">http://sqlblog.de/blog/?p=579</guid>
		<description><![CDATA[If you experience following error &#8220;Executed as user: MyDomain\SQLServer. The package execution failed. The step failed.&#8221; then check that your...]]></description>
			<content:encoded><![CDATA[<p>If you experience following error <em>&#8220;Executed as user: MyDomain\SQLServer. The package execution failed. The step failed.&#8221;</em><br />
then check that your Service User for the SQL Server Agent has full file permissions to all packages, config files and log files!<br />
Moreover this service user should be member of the SQL Server DTS Group.</p>
]]></content:encoded>
			<wfw:commentRss>http://sqlblog.de/blog/2009/07/ssis-sql-server-agent-job-run-packages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

