blog.atwork.at

news and know-how about microsoft, technology, cloud and more.

Nachtrag zur Sicherheitslücke in ASP.NET

Wie in Achtung! Sicherheitslücke in ASP.NET entdeckt beschrieben, kann die Sicherheitslücke in ASP.NET mit wenig Aufwand durch Anpassen der Datei web.config behoben werden. Zur Klarstellung noch ein paar Nachträge, zusammengefasst aus den Kommentaren in Scott Gu´s blog: Important: ASP.NET Security Vulnerability: Muss der Workaround wirklich angewendet werden? Ja! “Yes - please do apply the workaround” Auch bei verschlüsselter web.config? Ja. Verschlüsselung ist eine Empfehlung – aber auch dann soll web.config niemals preisgegeben werden. “Encrypting your connection strings has always been our recommended best practice - and prevents someone from identifying them if the web.config file is compromised.” Wird es einen Patch geben? Ja! (s.u.) ”The workaround is only a temporary suggestion - we will patch the vulnerability itself at which point it isn't required.  We published the workaround because of worries that someone might try to exploit this before a patch is available.” Zur Ausnutzung der Sicherheitslücke in ASP.NET wird versucht, die Unterschiede zwischen HTML Error Code 404 (und Versionen) und 500 (Allgemeiner Fehler) auszulesen. Es soll demnach auch keine eigene 404 er Seite angegeben werden. “No - until we release a patch for the real fix, we recommend the above workaround which homogenizes all errors.” Nochmals: Der beste Weg, das zu verhindern, ist immer nur EINE Fehler-Website anzugeben - daher auch keine Error-Subelemente verwenden! O-Ton Scott: “One of the ways this attack works is that looks for differentiation between 404s and 500 errors.  Always returning the same HTTP code and sending them to the same place is one way to help block it.” Im Original-Artikel wird auch erwähnt, dass es mit dem Bug auch möglich sei, den ViewState zu entschlüsseln (“to enable decrypting of ViewState”). Scott´s Antwort dazu beschreibt, dass die Ausnutzung darin begründet liegt, dass es ASP.NET erlaubt, CSS, Javascript etc. mit einem Schlüssel als Teil der Anfrage immer downzuloaden. “…a feature in ASP.NET that allows files (typically javascript and css) to be downloaded, and which is secured with a key that is sent as part of the request. Unfortunately if you are able to forge a key you can use this feature to download the web.config file of an application (but not files outside of the application).“ Es ist – nicht wie ursprünglich beschrieben - nur der Modus customErrors mode=”On” möglich: “RemoteOnly will also work fine.”. Es funktioniert “On” UND “RemoteOnly”, z.B.: <customErrors mode="RemoteOnly" defaultRedirect="~/myerror.html" /> Ja, SharePoint ist ebenfalls betroffen. Auch ASP.NET MVC ist betroffen: “Yes - all versions of ASP.NET are affected, including ASP.NET MVC.” Betrifft das nur ASPX-Seiten? Nein, auch alle ASP.NET Ressourcen. “This vulnerability impacts ASP.NET resources (not just ASPX pages).” Die mögliche Viewstate-Entschlüsselung ist unabhängig vom möglichen Download von ASP.NET Dateien: “The attack vector that was demonstrated publicly (which downloads the web.config file) uses a built-in feature of ASP.NET and is independent of viewstate.” Ist auch ASP.NET unter Mono betroffen? Wahrscheinlich nicht “I'm not sure if Mono has the same bug.” Wie beschrieben, sollte in jedem ASP.NET Produktivweb customErrors mode=”On” gesetzt sein… ;-) Ein Tipp zum Script DetectCustomErrorsDisabled3.vbs: Wenn viele Webs vorhanden sind, ist es oft sinnvoller, die Webs, wo web.config ok ist, einfach nicht auszugeben: Dazu in Zeile 163 einfach ein einfaches Hochkomma ‘ vor der Ausgabe WScript.Echo Path & ": ok" ausgeben:   Noch schöner wäre, die Ausgaben (statt gleich als Messagebox) in einem String zu sammeln und am Ende des Durchlaufs gesammelt (ev. in einer Datei, Notepad o.ä.) auszugeben. Wer Lust hat, das Script weiter anzupassen… (ich bin mit meinen Webservern schon durch… ;-). Wenn der angekündigte Patch verfügbar ist, kann wieder die ursprüngliche web.config mit mehreren Error-Elementen verwendet werden. Bis es soweit ist: Bitte web.config wie im Artikel beschrieben anpassen! “Note that when the patch comes out to fix this, you won't need to do this (and can revert back to the old behavior).  But for right now I'd recommend not differentiating between 404s and 500s to clients. Thanks, Scott” Danke an Scott und die ASP.NET Community! Ich hoffe, mit dieser Zusammenfassung sind die wichtigsten Fragen zum ASP.NET Workaround geklärt. So, do it! ;-)

Sicherheitslücke in ASP.NET entdeckt. Schützen Sie Ihren Webserver!

Wichtiger Hinweis für Hoster, IT-Pros und Developer, die ASP.NET Websites betreiben und verwalten! Vor wenigen Stunden hat der Chef der Microsoft Developer Division, Scott Guthrie (Mr. Red Poloshirt ;-), in seinem Blog auf eine kürzlich entdeckte Sicherheitslücke in ALLEN ASP.NET Versionen hingewiesen. Hier geht es zum Original-Artikel: Important: ASP.NET Security Vulnerability Durch Ausnutzen der Sicherheitslücke kann ein Angreifer die (normalerweise geschützten) Dateien einer ASP.NET Website herunterladen – zum Beispiel die Datei web.config, die üblicherweise in jeder Webanwendung vorhanden ist und sensitive Daten, wie Datenbank Connection Strings und ähnliche Web-Einstellungen, enthält. Die Sicherheitslücke funktioniert auf Basis von speziell präparierten Anfragen an den Webserver, welcher Errorcodes zurückliefert, die zum Entschlüsseln der retournierten Daten verwendet werden können. Also nichts, was im normalen Betrieb oder “zufällig” passieren kann, sondern nur durch gezielte Attacken und entsprechend viele Abfragen ausspioniert werden kann. Dennoch, diese Sicherheitslücke betrifft ALLE ASP.NET Versionen von 1.0 bis 4.0! Der Workaround dagegen ist zum Glück sehr einfach: Die Datei web.config in jedem Web muss den Eintrag customErrors mode=”On” und eine eigene Fehlerseite definiert haben, wie folgt: <configuration>           <system.web>       <customErrors mode="On" defaultRedirect="~/error.html" />    </system.web>        </configuration> So werden Webs durch eine eigene Fehlermeldung geschützt. Normalerweise sollte bei einem Produktivweb soundso eine eigene Error-Seite(n) hinterlegt sein… Zur Klarstellung: Der mode RemoteOnly darf auch verwendet werden! (Update 20.09.2010). Achten Sie bei Webs unter .NET 3.5 SP1 und .NET 4.0 auf den zusätzlichen Key redirectMode=”ResponseRewrite”. “The important things to note above is that customErrors is set to “on”, and that all errors are handled by the defaultRedirect error page. Note the use of redirectMode=”ResponseRewrite” with .NET 3.5 SP1 and .NET 4.0. There are not any per-status code error pages defined – which means that there are no <error> sub-elements within the <customErrors> section.  This avoids an attacker being able to differentiate why an error occurred on the server, and prevents information disclosure.” Call to action: Sehen Sie alle Webs auf Ihrem Webserver durch, oder lassen Sie sich von einem kleinen Script helfen, welches alle Websites auf dem IIS durchläuft und meldet, ob die web.config entspricht oder nicht. Bei mehreren Webs: Laden Sie am besten das Tool von www.asp.net/media/782788/detectcustomerrorsdisabledv30.zip herunter und entpacken Sie es: Starten Sie DetectCustomErrorsDisabled3.vbs (erfordert ADSI Unterstützung und IIS6 Management-Tools). Damit werden alle Webs auf dem Webserver durchlaufen und deren web.config geprüft. Nun wird jedes Web durchlaufen: Ist web.config ok oder nicht ok? Nicht ok: Öffnen Sie die angezeigte web.config und suchen Sie nach der Einstellung “customErrors”. Der relevante Abschnitt kann dann zum Beispiel so aussehen: Ausbessern von customErrors in mode=”On” – wichtig ist auch, eine eigene defaultRedirect-Webseite (die natürlich im Web vorhanden sein muss) anzugeben, hier ooops.aspx. Und es dürfen KEINE Error Subelemente für einzelne Status-Codes definiert sein. Die korrigierte web.config sieht also so aus: Wenn im Web keine web.config vorhanden ist, muss diese Datei nach obigem Muster neu angelegt werden. Das Script ist zwar nicht super-komfortabel, aber ausreichend. Alternativ kann natürlich auch ein Search & Replace-Tool (wie z.B. Seeker o.ä.) verwendet werden. Das wars. Zum Testen, ob der Eintrag richtig gesetzt wurde und das eigene Fehlerhandling funktioniert, rufen Sie das Web mit einer falschen Seite auf und sehen Sie nach, ob die eigene Fehlerseite folgt. z.B. http://www.meinweb.at/falsch.aspx Microsoft wird bald einen Patch veröffentlichen, um dieses Problem zu beheben. Bis es soweit ist: Kontrollieren Sie Ihre ASP.NET Webs und passen Sie gegebenenfalls die web.config-Dateien wie oben beschrieben an! Mehr Infos zu dieser Sicherheitslücke finden Sie hier: Important: ASP.NET Security Vulnerability Microsoft Security Advisory 2416728 Understanding the ASP.NET Vulnerability Microsoft Security Response Center Blog Post Ich wünsche weiterhin sicheres Web-Hosting!

IE9 Beta verfügbar! Get ready for a more beautiful web

Es ist soweit: Ab sofort steht der Windows Internet Explorer 9 als Beta-Version zum Download zur Verfügung! Der neue Webbrowser bietet heute, knapp 20 Jahre nach dem Start des Internets in Österreich, ein neues Internet Erlebnis für alle Internet-Anwender: Schnell, sicher und in dieser neuen Form besonders einfach und verständlich. Der neue Browser nutzt alle Vorteile von Windows 7 und richtet damit den Fokus auf die Anwender: ihre Seiten und Applikationen. Wo gibts IE9 Beta downzuloaden? Ab dem 16. September auf www.ie9.at! Was bringts? Ein neues, deutlich schnelleres Web-Erlebnis! “Fast: Internet Explorer 9 is all around fast!” Laut IE9-Team ist der Internet Explorer 9 Beta durch Ausschöpfen der Leistung von modernen PCs _elfmal schneller_ als der Internet Explorer 8 – und schneller als die aktuellen Versionen von anderen Webbrowsern. Die neue Version des Internet Explorer nutzt nicht nur einen Teil der PC-Hardware, sondern greift zu 100% auf die verfügbaren Ressourcen zu (siehe auch IE9 - Die vierte und letzte Platform Preview: HTML5 CANVAS, Hardware Acceleration, Javascript Engine Chakra, etc.). Das neue Design des IE9 ist stark reduziert: So sieht IE9 aus. Der Browser-Rahmen konzentriert sich auf jene Steuerelemente, die den Anwendern nach eigenen Angaben besonders wichtig sind und die sie am häufigsten nutzen. Dazu zählt zum Beispiel ein überdimensionaler „Zurück“-Button. Die weiteren Browser-Tabs sind sehr schmal rechts oben sichtbar. Webseiten können direkt an die Windows Taskbar geheftet werden (“Pinned Sites”). Tabs können auch “rausgelöst” werden, beispielsweise um Angebote von verschiedenen Webseiten zu vergleichen. Beim Öffnen eines neuen Browser-Tabs folgt eine Übersicht der bereits besuchten Seiten mit einem “Activity Meter”, die mit einem Klick erreichbar sind: “We know that when you create a new tab, your intent is to navigate…”. Ebenso sind hier die Links für “Reopen closed Tabs”, “Reopen last session” und “InPrivate Browsing” verfügbar. Diese neuen Funktionen sind an die Design-Themen von Windows 7 angelehnt, die auf Einfachheit und gute Anwendbarkeit setzen. Mit dem Download Manager erhält der Nutzer nun endlich Kontrolle über seine heruntergeladenen Dateien. Neue Funktionen für noch mehr Sicherheit (SmartScreen Filter) und Zuverlässigkeit (Tab Isolation, Hang-Recovery, Auto-Update, etc.) sollen die User Experience weiter steigern. IE9 bietet integriert eine umfassende Unterstützung für die Branchenstandards HTML5, CSS3, DOM L2 und L3, SVG, ECMAScript5 und mehr (siehe auch Internet Explorer Testing Center auf MSDN samples.msdn.microsoft.com/ietestcenter ). Die Systemvoraussetzungen für IE9 Beta: Windows Vista SP2, Windows Server 2008 SP2, Windows 7 oder Windows Server 2008 R2 (alle OS: x86 oder x64), 512MB RAM, 70 bis 200MB Disk Space. “Im Zeitalter des Cloud Computing ist der Browser aber nicht mehr nur das Fenster zum Internet. Vielmehr soll er dem Anwender eine Umgebung bieten, über die er das Web, seine Inhalte, Anwendungen und Dienste in erstklassiger Qualität, so realitätsnah wie möglich, schnell und sicher nutzen und erleben kann.” so Microsoft. Weitere Details zum IE9 Beta finden sich auf der Website mit dem hübschen Namen www.BeautyoftheWeb.com – das war auch das Motto bei der Vorstellung des IE9 Beta von Microsoft gemeinsam mit 70 Partnern in San Francisco am 15. September. Und natürlich im Blog: windowsteamblog.com - Exploring IE. Viel Spaß beim Testen des neuen, schnellen IE9 Beta!

Today is Internet Explorer day

Heute, am 15. September um 19:30 startet die offizielle IE9 Beta Phase. Social Media prescht vor: Mit einem kurzen Ankündigungsvideo auf Facebook von "Internet Explorer Deutschland" und natürlich via Twitter.com/msiexplorer. Wir machen alle schon eifrig Screenshots um das neue Design und die neue Funktionalität zu demonstrieren - nach dem Motto: "Get ready for a more beautiful web"! Mehr zu IE9 Beta und Download-Link folgen bald! ;-)

Migrate Your ASP.NET 1.1 Apps to Visual Studio 2010

Warum alte Web-Applikationen aus .NET 1.1 upgraden? "Microsoft retired Mainstream Support for Visual Studio 2003 on Oct. 14, 2008 - and has stated that it will issue no further service packs for Visual Studio 2003 or for the .NET Framework 1.1. Microsoft will, however, offer Extended Support for Visual Studio 2003 until Oct. 8, 2013." Und wie? Genau das beschreibt der MSDN-Artikel Migrate Your ASP.NET 1.1 Apps to Visual Studio 2010 Diese Schritte müssen durchgeführt werden: Run the Conversion Wizard. Set the target framework and startup page. Compile and fix. Convert pages and user controls to partial classes. Compile and fix. Für Web-Developer, die schon mit ASP.NET 1.1 entwickelt haben ein Muss. ;-)

IE9 Beta kommt...

...bald: Wenn man den Blog-Gerüchten Glauben schenkt, dann am 15 September 2010. Die Developer-Community ist schon ganz gespannt auf den neuen Browser. Achja, wen interessiert, wie IE9 voraussichtlich aussehen wird: "Paul Thurrott´s SuperSite Blog für Windows" bezieht sich auf einen Blog-Post von Mary Jo Foley vor einigen Tagen, wo ein Screenshot von Microsoft Russia wohl zu früh veröffentlicht wurde. (Da hat wohl jemand zu früh auf den "Publish"-Knopf gedrückt - und alles was einmal im Web veröffentlicht wurde, ist halt öffentlich zugänglich - das erinnert mich an das Werk "Die Physiker" von Dürrenmatt: "Einmal Gedachtes kann nicht mehr zurückgenommen werden", aber das ist eine andere Geschichte...) "...Mary Jo Foley has revealed what is almost certainly the eagerly-awaited Internet Explorer 9 user interface..." Internet Explorer 9 UI Revealed Hier der geborgte Screenshot (man bemerke, ohne Datum im System Tray und sehr allgemein gehalten). Mal sehen, ob´s wirklich so kommt, erscheint aber sinnvoll, möglichst viel Platz für die Website einzuräumen und die Broswer-Naviagtion zurückzunehmen. Wir sind gespannt!

IE9 - Die vierte und letzte Platform Preview

Wussten Sie das? Etwa 80% aller Windows Benutzer verbringen mehr als 50% ihrer Zeit am PC im Browser! Der Internet Browser ist also ein sehr wichtiger Bestandteil der "Windows experience". Genau diese Tatsache ist für Microsoft sehr wichtig, die nächste Generation des Internet Explorers wirklich gut zu machen: den IE9. Die wichtigsten Punkte bei der Entwicklung von IE9 sind: Auf die Kunden-Feedbacks zu hören und zu sehen, was einen Großteil der Benutzung ausmacht, um diese Funktionalitäten im täglichen Gebrauch zu verbessern. Ein Teil der Windows Benutzer sind auch Developer : Diese wünschen sich vor allem mehr Transparenz und "predictable pattern of development". Auch das hat das IE9 Entwicklungsteam in ihr Projekt einfließen lassen. Das IE9 Projekt hat bei der PDC im November 2009 erste Formen angenommen, bei der MIX im März 2010 wurde die erste IE9-Preview und die erste Timeline sowie die Erwartungen in das Projekt veröffentlicht. Bis jetzt konnten mit jedem Build Performance-Steigerungen erzielt werden, das Team ist also gut unterwegs und macht Lust auf die neue Version, siehe auch IE Testcenter: "ALL-AROUND PERFORMANCE: To look back and see how far we've come on performance, IE is almost unrecognizable.  According to Webkit.org SunSpider, IE8 came in with a whopping score of 3746 milliseconds. With IE9, we introduced Chakra, a new JavaScript engine, and according to that same SunSpider benchmark, we have a score of 326 milliseconds - over 11 times faster than IE8.  Our current score makes us faster than both the latest shipping version of Firefox and the newly released Safari 5.0.  And we are not stopping here... " Für alle Developer ist vor allem wichtig, dass nicht für jeden Browser extra codiert werden muss (ja, das war in der Vergangenheit ein Horror - wollen wir hoffen, dass es besser wird...). Das Entwicklungs-Team hat dies als wichtigen Punkt in ihr neues Deployment aufgenommen: "SAME MARKUP: You told us you wanted better interoperability so that the same markup (tags, script, language) works across different browsers... This brings the total number of tests we've contributed during IE9 development to over 2,100. We will continue to invest in this area to move the bar for interoperability." Meint Microsoft es ernst damit ("standards compliance")? Ich denke schon: "When we shipped IE8, our Acid 3 score was 20.  As a result of listening to feedback and focusing on what developers want, we've increased that with IE9. Over the past 5 months alone, we've seen an increase of 40 points!  Today, with Platform Preview 4, our Acid 3 score is 95." Die neue Hardware-Nutzung finde ich gut - funktioniert natürlich nur auf modernen PCs (schwächere Plattformen wie Smartphones können davon wohl nicht profitieren): "...to deliver the best hardware-accelerated video and HTML5 out there." Achja, durch das frühe Engagement von IE9 lange vor der Beta Phase ist die Akzeptanz aus der Developer-Community sehr gut - weit über der Erwartungen des IE9-Teams: "With that early engagement, developer feedback has had a bigger impact than before. People have downloaded IE9 Platform Previews over 2.5 million times... IE Test Drive site have had over 20 million visitors." Die Preview-Versionen können auf ie.microsoft.com/testdrive frei verfügbar downgeloadet und getestet werden - Seit Anfang August ist die 4.te Generation Platform Preview (auf englisch) verfügbar: Was sind die Neuerungen zur letzten, dritten IE9-Preview? "...IE9 shows the opportunity of fully hardware-accelerated HTML5. You can run new test drive samples that show modern SVG and native JavaScript integration in action", z.B. das neue HTML5 <video> Tag (mit H.264 Codec). Die neue Javascript Engine "Chakra" lebt nun in der Browser-Engine. Tipp für alle Web-Developer: Wesentliche Neuerungen finden sich im IEBlog und die letzten News in HTML5, Modernized: Fourth IE9 Platform Preview Available for Developers. Und es gibt die Empfehlung: "Run your sites in IE9 Standards mode for the best performance and interoperability, see IE's Compatibility Features for Site Developers." Auch von der Developer-Community wird IE9 gut angenommen: "It's a great work. (9) will be a reborn." Wie bzw. wann geht es weiter? "Platform Preview 4 is an important milestone on the way to beta. It is the last preview before the IE9 Beta. The IE9 platform is nearly complete." schreibt Dean Hachamovitch, General Manager, Internet Explorer. Das wars also mit Preview-Versionen. Die nächste Version wird also IE9 Beta - und das wahrscheinlich bald. ;-)

Next Generation Small Business Server Aurora - Preview verfügbar

Der neue Small Business Server, Codename Aurora wird seit kurzem auf der Microsoft Connect Website in einer Public Preview zum Download angeboten. Für alle Fans des Small Business Servers kommt mit "Aurora" eine neue Generation dieser unglaublich bewährten und bei vielen Kunden in Österreich erfolgreich eingesetzten all-in-one Server Lösung zu. Sie können sich ab sofort im Beta Program anmelden und damit den neuen Server testen: Testen der letzten Beta-Software. Bug-Reports übermitteln. Ideen und Empfehlungen zur Produktverbesserung abgeben. Im Windows Small Business Server Forum teilnehmen. Seit wann sind Sie dabei - bzw. anders gefragt: wer kann sich noch an den Backoffice Server 4.5 erinnern? Übrigens wird es 2 Versionen im Beta Programm geben: Windows Small Business Server Code Name "Aurora" Windows Small Business Server 7 Was bietet Aurora? Mit Aurora wird der Small Business Server kein reiner On-Premise Server mehr sein. Damit haben Sie die Möglichkeit, den SBS gemeinsam mit der Cloud Lösung BPOS zu nutzen. Aurora richtet sich an Kunden mit weniger als 25 Usern, die bisher vielleicht ein peer-to-peer Netzwerk genutzt haben, sich aber zukünftig auf eine Serverlösung verlassen wollen. Mit Aurora besitzen Sie eine gesicherte Serverumgebung, Sie können ebenfalls Ihre Clients direkt sichern. Aurora verbindet Ihre On-Premise Lösung mit der Cloud - eine Integration mit den Microsoft Online Services ist enthalten. Damit kann Ihr Business mit Ihnen wachsen, kostengünstig, effizient und sicher. Windows Small Business Server Code Name Aurora (soviel Zeit muss sein, oder sollte ich es abkürzen in WSBSCNA?) basiert auf Windows Server 2008 R2. Für Entwickler steht übrigens ein eigenes SDK zur Verfügung, um Erweiterungen für Aurora zu implementieren. Hier geht es zur (englischen) Broschüre. Was bietet Windows Small Business Server 7? Hier wird der gesamte Server on-premise angeboten, d.h. auch Ihre E-Mail Lösung wird mit Microsoft Exchange abgebildet. SBS7 unterstützt bis zu 75 Clients. Mehr Infos in dieser (englischen) Broschüre. In dieser Lösung sind Exchange 2010, SharePoint Foundation 2010 (hier sind auch die Office WebApps inkludiert) und Windows Update Services enthalten. Beide Versionen werden ab Ende August im Beta Programm verfügbar sein, Aurora können Sie bereits heute testen! Viel Spaß und wir freuen uns auf Ihr Feedback!

Tabellen in SQL Server vergleichen - Tablediff.exe

Arbeiten Sie viel mit SQL-Datenbanken? Dann kennen Sie (oder hatten Sie) sicher die Anforderung, Daten aus einer Datenbank (gescriptet) in eine andere Datenbank zu transferieren und dabei nur die Änderungen zu übertragen. Das lässt sich mit mehreren Methoden bewerkstelligen, je nach Anforderung, Know How und technischer Umgebung - vom SSIS Import-Tool über selbst scripten bis hin zu kostenpflichtigen Tools und Backup und Restore oder DB-Mirroring (dazu später mal mehr in einem eigenen Artikel). Ich hatte vor kurzem einen solchen Fall. Die Quell-Datenbank ist viele GB groß und es sollten nur Inhalte aus einer Tabelle in eine andere Test-Datenbank übertragen werden. In der Quell-Tabelle wurden Datensätze aktualisiert, gelöscht und hinzugefügt. In der Ziel-Tabelle in einer zweiten Datenbank sind manche Datensätze bereits vorhanden und sollen durch die Quell-Tabelle aktualisiert werden. Und das Ganze Aktualisieren (weils ja eine Testdatenbank ist, die sich immer wieder ändert) soll oftmals durchgeführt werden können. Also am besten irgendwie scripten... Fesch. Wie sag ichs meinem Computer - sprich SQL Server? Genau dafür gibt es seit SQL Server 2005 ein kleines Kommandozeilen-Tool - das allerdings wenig bekannt (wie das mit vielen Command Line-Tools so der Fall ist) und sehr praktisch ist: TableDiff "The tablediff utility is used to compare the data in two tables for non-convergence, and is particularly useful for troubleshooting non-convergence in a replication topology." Das klingt mal interessant. Und TableDiff macht auch genau das: Es vergleicht Tabellen und kann auch ein Script mit den Unterschieden der Tabelleninhalte erstellen um die Änderungen auf einem Zielsystem sofort ausführen zu können. Es "synchronisiert" allerdings nicht die Unterschiede aus beiden Tabellen, sondern nur in eine Richtung - wie in der Grafik oben. In meiner Anforderung ist TableDiff super-fein, denn das kleine Script (im Vergleich zur mehreren GB großen Datenbank) kann auch sehr rasch erzeugt und auf das Zielsystem transportiert und ausgeführt werden, ohne irgendwelche erforderlichen Verbindungen oder Konfigurationen - also "straight forward". Also, wo findet man TableDiff.exe? Bei SQL Server 2008 hier: C:\Program Files\Microsoft SQL Server\100\COM Der Pfad zu TableDiff.exe in SQL Server 2005 lautet übrigens "Program Files\Microsoft SQL Server\90\COM". Wie funktioniert es und wie sieht der Aufruf aus? tablediff.exe -sourceserver server1 -sourcedatabase db1 -sourcetable table1 -destinationserver server1 -destinationdatabase db2 -destinationtable table2 Hinweis: Um explizite Credentials zum SQL Server anzugeben sind diese Parameter erforderlich: -sourceuser <SourceLogin> -sourcepassword <SourcePassword> bzw. -destinationuser <DestinationLogin> -destinationpassword <DestinationPassword> Hinweis: "To compare tables, you need SELECT ALL permissions on the table objects being compared." und "..To use the -et option, you must be a member of the db_owner fixed database role..." D.h. am besten einen dbowner o.ä. für das Tool verwenden, dann gibts keinerlei Einschränkungen. Wenn die beiden Tabellen-Schemata nicht übereinstimmen, folgt ein Hinweis: Table [db1].[dbo].[table1] on SERVER1 and Table [db2].[dbo].[table2] on SERVER1 have different schemas and cannot be compared. Eine weitere Voraussetzung: Die Tabellen müssen eine eindeutige ID-Spalte besitzen: The replication table difference tool requires the comparison tables/views to have either a primary key, identity, rowguid or unique key column. So, nun zu meinem Fall-Beispiel: Ich habe auf der SQL-Maschine "DAISY" zwei Datenbanken "db1" und "db2" und hier jeweils eine Tabelle "WEB_Node". Die Änderungen (Inhalte) von "WEB_Node" sollen aus "db1" in "db2" transportiert werden - hier sind Webinhalte gespeichert, die in die Testdatenbank transferiert werden sollen. So sieht mein kleines Script C:\Temp\SQL\doit.cmd aus: cd "C:\Program Files\Microsoft SQL Server\100\COM" tablediff -sourceserver "DAISY" -sourcedatabase "db1" -sourcetable "WEB_Node" -destinationserver "DAISY" -destinationdatabase "db2" -destinationtable "WEB_Node" -et Diff -f C:\Temp\SQL\diff.sql pause Damit wir auch sehen, WAS die Unterschiede sind, fügen wir zum Statement "-et Diff" hinzu - damit werden die Unterschiede in eine temporäre Tabelle "Diff" geschrieben und können daraus ausgegeben werden. Und noch besser: -f <pfad><sqlfile> erzeugt ein T-SQL-File, das die Änderungen scriptet! Damit können die Änderungen ganz leicht am Zielsystem "ausgeführt" werden - voila! Auch ganz praktisch: Um mal rasch einen Überblick zu erhalten, sind die Parameter -c -q gut, z.B.: Table [db1].[dbo].[WEB_Node] on DAISY and Table [db2].[dbo].[WEB_Node] on DAISY have different row counts. Table [db1].[dbo].[WEB_Node] on DAISY has 123 rows. Table [db2].[dbo].[WEB_Node] on DAISY has 101 rows. The requested operation took 0,0950095 seconds. So, lassen wir es mal (ohne -c -q) laufen: Naja, da sind schon einige Unterschiede vorhanden. Das erzeugte File diff.sql sieht dann in meinem Fall so aus: Das File ist laang, am Ende folgen dann die neuen Datensätze (INSERTS). Achja, eines sollte ich noch im Script anpassen: Dass die Änderungen in die "richtige" Datenbank geschrieben werden - bei mir in "db2" - der Hinweis steht zwar im Script, aber nur als Kommentar. Also am Beginn ergänzen: use db2 go So, F5 (Run) drücken - here we go. Voller Spannung erwarte ich, dass SQL Server nun die ganze Arbeit erledigt ... FAIL! Es gibt einen "Converting error" beim Umwandeln von Datentypen. Erste Analyse: Das erste INSERT Command will in ein Feld vom Typ smalldatetime einen Datumswert als String N'Null' (also kein Datum vorhanden) einfügen... Dass das nicht klappen kann erscheint logisch. Also im Script mit Suchen und Ersetzen workaround-en: Ersetze alle Vorkommen von N'NULL' durch NULL: Alles ersetzen. Achja und noch ein zweiter Stolperstein: Das verwendete Datumsformat N'2010-08-12 10:38:00' war auf meinem SQL Ziel-System auch noch ein Problem. Also auch zu Beginn das Datumsformat setzen: set dateformat ymd; RUN! Jipee, es funktioniert jetzt brav, frei nach dem Motto "Kaum macht mans richtig, gehts...". Noch ein Tipp: Der zusätzlichen Parameter -strict kann auch bei der Fehleranalyse helfen (Source and destination schema are strictly compared). Das Scripten eines NULL-Datum ist mein einziger Wehrmutstropfen am coolen tablediff-Tool: Einen Parameter zum Ändern des N'NULL' Verhaltens habe ich bislang nicht gefunden. Vielleicht hat ja ein Leser einen Tipp? Nun gut, aber der Workaround mit Search & Replace tuts auch - wenn man es weiß. ;-) Noch ein Tipp zum Vergleichen von GROSSEN Tabellen: Der Parameter -bf <number_of_statements> schränkt die Anzahl der Befehle auf die angegebene Anzahl ein und erzeugt danach ein neues, weiteres File. Damit sind große Update-Scripts durchführbar und bearbeitbar. Weitere Links zu tablediff: http://msdn.microsoft.com/en-us/library/ms162843.aspx - tablediff Utility http://msdn.microsoft.com/en-us/library/ms147919.aspx - How to: Compare Replicated Tables for Differences (Replication Programming) http://technet.microsoft.com/en-us/library/cc917696.aspx - Top 10 Hidden Gems in SQL Server 2005 http://www.databasejournal.com/features/mssql/article.php/3594926/SQL-Server-2005-TableDiff-Utility.htm - SQL Server 2005 TableDiff Utility http://sqlserverpedia.com/blog/sql-server-2005/where-do-i-find-the-tablediffexe-tool-and-what-is-it/ - Where do I find the table.diff.exe tool and what is it? http://www.mssqltips.com/tip.asp?tip=1073 - SQL Server 2005 tablediff command line utility Meine Empfehlung: TableDiff ist ein äußerst hilfreiches Tool zum automatisierten (bzw. mit dem Search & Replace Workaround halbautomatisierten) Abgleich von Tabellen und kann DB-Admins viel Zeit und Arbeit abnehmen!

10 Steps to Quickly Get Up to Speed on HTML5 and IE9

Für alle Web Developer, die sich mit HTML5 befassen wollen (oder müssen), ein Tipp aus der community via Twitter: RT @ChristianNagel RT @TommyLee 10 Steps to Quickly Get Up to Speed on HTML5 and IE9:  #html5 #ie9 10 Steps to Quickly Get Up to Speed on HTML5 and IE9 Die 10 Tipps beginnen beim Kaufen von ein paar HTML5-Büchern über Beachten der Spezifikationen bis hin zum Testen mit IE9 Test Drive und Channel 9 Videos (tags: IE9 and Internet Explorer 9). Happy learning!

UI Design Guide für Windows Phone 7

Im Windows Phone Developer Blog gibt es viele nützliche Ressourcen für die Entwicklung von eigenen Applikationen für das neue Windows Phone 7. Eine davon ist der Design-Guide in Windows Phone 7 Design Resources - UI Guide and Design Templates. Hier findet man den Link zum UI Design and Interaction Guide for Windows Phone 7 v2.0. WP7-Applikationen sollen ja nicht "irgendwie" aussehen, sondern sich in das Design des Phones einfügen. Beginnen von Schriftarten über Application Bar, Tiles, Themes, Toast, Navigation, Touch, Camera bis hin zu Hardware wie GPS, Accelerometer, Compass, FM-Radio etc... ... "...learn about the Dos and Don'ts of UI implementations for Windows Phone..."

Batch Script to Auto Update Sysinternals Tools

Da hat sich doch SysAdminGeek ein kleines Script geschrieben, um die Sysinternals Website nach neuen Updates der Sysinternal Tools abzufragen... Das kleine Script liest live.sysinternals.com/tools aus und vergleicht die online Files mit jenen im lokalen Filesystem im aktuellen Verzeichnis. Ich selbst hätte es zwar eher als kleine .net Console-Applikation gebastelt, aber der Zweck heiligt ja bekanntlich die Mittel; bzw. ein begabter SysAdmin bekommt das wahrscheinlich auch in PowerShell hin - aber so als Commandline-Batch ist es definitiv rasch und einfach! SysAdminGeek: Batch Script to Auto Update Sysinternals Tools "...All you have to do is put the batch script file into the folder where your Sysinternals tools are located and the script does the rest, no configuration is needed." Genau das Richtige für SysAdmins. ;-)