Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

29. Juni 2008 um 13:09

SQL-Server: Auf interne System-Tabellen direkt zugreifen

Neulich beschrieb ich, wie wir ein Problem in den seit SQL-Server-2005 versteckten Systemtabellen mittels dem Hex-Editor lösten. Mittlerweile las ich bei Paul Randal, wie man die Systemtabellen nicht nur mittels SELECT lesen, sondern auch ändern kann – echt krass.

Ursprünglich wurde das übrigens von Laurentiu Cristofor beschrieben. Ich nehme an, Paul muss jetzt – da er nicht mehr bei MS arbeitet – aufpassen, dass er nur Dinge ausplaudert, die schon irgendwo veröffentlicht wurden, sonst würde er nicht bei jedem Kikifitz eine öffentliche Quelle angeben… 😉

  1. Den SQL-Server im Single-User-Modus starten (-m).
    Meiner Ansicht nach am einfachsten mit dem "SQL Server Configuration Manager" (aus "Start | Alle Programme | Microsoft SQL Server 2005 | Configuration Tools"): SQL-Server-Dienst doppelklicken, "Eigenschaften", dritten Reiter ("Advanced") auswählen, in der Liste "Startup Parameters" doppelklicken und da am Ende ";-m" ergänzen. Jetzt den Dienst neu starten.
  2. Mittels Dedicated-Admin-Connection (DAC) zum SQL-Server verbinden ("-A" beim sqlcmd.exe).

Und schon kann man die internen versteckten Systemtabellen zugreifen und ändern… 😀
Danach muss man nur noch den Single-User-Modus für den SQL-Server wieder rausnehmen und den Dienst neu starten. Ist das gut?

Risiken und Nebenwirkungen

Microsoft hatte übrigens gute Gründe den Zugriff auf diese Tabellen zu verhindern. Wer also nicht genau weiß was er tut, der sollte es lassen. Man kann eine Datenbank damit sehr gründlich zerstören. 🙁

28. Juni 2008 um 12:41

SQL-Server-2005: interne Tabellen einzeln prüfen und reparieren

In den letzten Tagen untersuchten wir eine defekte Datenbank eines Kunden. DBCC CHECKDB bracht nur die vielsagende Meldung, dass eine der internen Verwaltungstabellen defekt sei und man deswegen eine Sicherung einspielen solle. Nun hatte der Kunde aber keine aktuelle Sicherung (die letzte war von April). Wir konnten dem SQL Server nicht auf dokumentierte Weise entlocken wo er Defekt nun war.

Mit einer gezielten Prüfung auf die versteckten Systemtabellen fanden wird schnell den Bösewicht. Wer sich auch mal mit dem Thema befassen will, findet im Folgenden eine Liste der internen Tabellen (mit DBCC CHECKTABLE), die Schritte die zur Reparatur führten und die Ursachenanalyse. Warnung: Nur wen das interessiert, sollte ab hier weiter lesen… 😉

DBCC CHECKTABLE('sys.sysallocunits') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysasymkeys') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysbinobjs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysbinsubobjs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.syscerts') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysclsobjs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.syscolpars') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysconvgroup') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysdbfiles') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysdercv') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysdesend') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysfiles1') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysftinds') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysguidrefs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.syshobtcolumns') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.syshobts') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysidxstats') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysiscols') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysmultiobjrefs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysnsobjs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysobjkeycrypts') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysobjvalues') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysowners') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysprivs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysqnames') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysremsvcbinds') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysrowsetcolumns') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysrowsetrefs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysrowsets') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysrts') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysscalartypes') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysschobjs') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysxmitqueue') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysxmlcomponent') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysxmlfacet') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysxmlplacement') WITH NO_INFOMSGS;
DBCC CHECKTABLE('sys.sysxprops') WITH NO_INFOMSGS;

Die Prüfung sagte uns nicht nur, welche Tabelle defekt war (sys.sysallocunits), sondern auch auf welcher Seite in welchem Slot (=Datensatz) das Problem sei. Mit DBCC PAGE oder dem SQL Server Internals Viewer konnten wir leicht sehen, dass ein Wert in dieser Slot völlig untypisch war. Tatsächlich war ein Bitkipper passiert, wir mussten uns nun lediglich den Offset des gekippten Bytes innerhalb der Seite merken und damit dann das Problem komplett beheben:

Mit einem Hex-Editor gingen wir an die Adresse des bösen Bytes (Formel = Seite*8192+Offset in der Seite) und korrigierten den Wert. Danach war die Datenbank wieder völlig in Ordnung. Nun hatten wir natürlich Glück, dass wir anhand eines Vergleichs des bösen Datensatzes mit Korrekten das Problem mit bloßem Auge erkennen konnten. Aber gerade deswegen hat mich das in Hochstimmung versetzt… 😀

Risiken und Nebenwirkungen
Ein Hinweis noch: Am SQL-Server-2005 muss man erst noch die Seiten-Checksummen ausschalten, sonst meckert der SQL-Server, wenn die DB nach der Änderung wieder angehängt wird.
ALTER DATABASE
SET PAGE_VERIFY NONE

Nach dem Eingriff kann man die Checksumme wieder einschalten:
ALTER DATABASE
SET PAGE_VERIFY CHECKSUM

Außerdem sollte man vor solchen Aktionen immer eine Kopie der Dateien machen. Wenn man das falsche Byte erwischt, dann ist die Datenbank erst recht defekt… 😉

Ursachenforschung

Die Checksummenprüfung des SQL-Server (seit 2005) erkennt, wenn Bitkipper aufgrund von Problemen im Speichersystem auftreten, nicht aber im Hauptspeicher auftretende Probleme. Das geht so: Der SQL-Server ändert die Datenseiten im Hauptspeicher ständig, deswegen wird da nicht jedesmal eine Checksumme berechnet, das würde einfach zu lange dauern.

Wird die geänderte Seite auf die Platte geschrieben, dann wird eine Checksumme berechnet und auf der betreffenden Seite mit gespeichert. Beim Lesen wird die Checksumme ebenfalls berechnet und auf Abweichungen kontrolliert. Bei Abweichungen muss ein Problem im Speichersystem aufgetreten sein (Treiber, defektes RAM im IO-Caching oder Festplattenproblem). Das war hier nicht der Fall.

Will man so eine Prüfung auch schon am SQL-Server-2000, dann muss man einen Hotfix einspielen und Trace-Flag 806 setzen.

So ein Bitkipper, wie oben beschrieben, muss daher im Hauptspeicher passiert sein. Deswegen wurde der Kunde darauf hingewiesen, dass sein RAM einen Schlag hat. Es wäre natürlich auch denkbar, dass der SQL-Server-Prozess selber dort Murks hingeschrieben hätte (das nennt man "Scribbler", z.B. die im Prozessraum laufenden Extended-Procedures), aber das ist in unserer Komstellation nicht wahrscheinlich.

Wenn man es ganeu wisse wollte, dann könnte man den SQL-Server eine Zeit lang mit dem Trace-Flag 806 laufen lassen. Damit wird auch im Hauptspeicher die Checksumme gelegentlich überprüft. Weil das aber die Performance ungeheuer beeinträchtigt, sollte man das nur für kurze Zeit machen…

Weiterführende Infos:

27. Juni 2008 um 21:35

SQL Server Internals Viewer

Durch den SQL-Server-Magazine-Artikel "SQL Server Internals Viewer " von Kevin Kline "entdeckte" ich für mich das Tool. Mit diesem Werkzeug kann man sich den Inhalt von Datenbanken seitenweise ansehen. Das klingt trocken, ist aber einfach genial.

Alleine durch das Ansehen habe ich mehr verstanden als durch die Lektüre von guten Büchern, die ich irgendwann abbrach, weil es einfach zu trocken wurde… Natürlich könne man sich das auch alles mit DBCC PAGE ansehen, aber das ist dann doch noch mal eine Spur härter.

Es ist einfach unglaublich, was man auf den Seiten alles erkennen kann. So habe ich heute beispielsweise mal geschaut, ob ich einer beliebigen vom Kunden geschickten MDF ansehen kann aus wie vielen Dateien die DB bestehen sollte und wo sie zuletzt lagen. Das geht und ist gar nicht so schwer. Ich konnte auch die komplette Liste der internen Systemtabellen sehen und studieren. Einfach genial!

Ideal ist es auch zur Analyse von Datenbank-Korruptionen, aber dazu schreibe ich demnächst noch mehr. Auf der Homepage steht ein kurzer, gelungener Überblick, deswegen schenke ich mir den an dieser Stelle… 😉

Hier geht es zum Download. Interessant ich auch noch der noch junge, aber schon lesenswerte Blog des Autors Danny Gould.

25. Juni 2008 um 22:05

Hilfe gegen SQL-Injection

Wer selber Software schreibt, insbesondere ASP-Projekte, der weiß ein Liedchen davon zu singen, dass man sich gegen SQL-Injection wappnen muss. Eigentlich ist das gar nicht schwierig, man darf halt nichts was vom Benutzer oder über Schnittstellen kommt einfach so an die DB weiterreichen. Schlimm ist es beispielsweise, wenn man SQL-Befehle dynamisch zusammensetzt. Dann muss man den Input filtern (z.B. mache aus einem einfachen Anführungszeichen zwei). Alternativ kann man auch mit gebundenen Parametern arbeiten, was sich übrigens auch positiv auf die Performance auswirkt.

Wer sichergehen will, dass diese Probleme in der eigenen ASP-Lösung nicht drin sind, dem bietet Microsoft nun als Unterstützung das Security Advisory 954462 mit dem Titel "Rise in SQL Injection Attacks Exploiting Unverified User Data Input". darin wird auch auf ein neues MS-Tool verwiesen, den "Microsoft Source Code Analyzer for SQL Injection". Mit dem Tool werden ASP.NET-Anwendungen automatisiert untersucht. Das finde ich echt gut.

Eine ganz gute Erklärung wie SQL-Injection funktioniert steht bei Heise.de.

24. Juni 2008 um 20:45

Der lange Abschied von XP beginnt

Und Tschüß XP.....… am 1.7. und endet erst 2014. Microsoft beschreibt es so:

Am 30. Juni 2008 verkauft Microsoft das Betriebssystem Windows XP zum letzten Mal an Einzelhändler und Hardware-Hersteller. Diese können die Produktpakete beziehungsweise ihre PCs mit vorinstalliertem Windows XP anschließend noch weiter verkaufen.

Wer Windows XP hat oder auf dem Markt erwirbt, der kann es noch eine Weile nutzen. Normale Kunden können zwar nur den Mainstream Support bis April 2009 nutzen, aber Kunden mit Extended Support haben diese Chance bis April 2014. Ich selber nutze auch noch XP und überlege, ob ich auf meinem nächsten Rechner wirklich Vista haben will und dann alle möglichen Updates kaufen muss, weil die meiste meiner Kaufsoftware nicht Vista-fähig ist…

23. Juni 2008 um 23:00

Datenpanne: persönliche Daten von 500000 Bürgern (Update)

Die neueste Datenpanne ist sogar auf heute.de im Artikel "Online-Panne: Bürgerdaten frei einsehbar" nachzulesen:

Wegen einer Panne in einer Softwarefirma sind die Meldedaten von 15 deutschen Kommunen monatelang im Internet frei verfügbar gewesen. Mit Hilfe eines Zugangscodes war es möglich, Adressen, Passbilder und Religionszugehörigkeiten von etwa 500.000 Bürgern herauszufinden, wie das Unternehmen HSH aus Ahrensfelde bei Berlin am Montag mitteilte.

Nutzerkennung und Passwort waren demnach auf einer Webseite zwischen März und Juni verfügbar. "Da ist uns ein Lapsus passiert", sagte Firmensprecher Sven Kollmorgen.

Ich kenne Lapsus in dem Sinne, dass ein kleinerer Fehler passierte, der eigentlich nicht der Rede wert ist. Offenbar wird hier etwas anderes darunter verstanden: Ein schwerwiegender Fehler, der niemals hätte passieren dürfen und massive Folgen für die Betroffenen haben kann. Oder war das doch eher in der ersten Bedeutung gemeint? Nach dem Motto: "Wer nichts zu verbergen hat, dem macht es auch nichts, dass seine persönlichen Daten im Internet stehen."

Schade, dass nicht bekannt gegeben wird, welche Gemeinden betroffen sind. Wenn es nicht so schlimm war, dann könnte das ja zugegeben werden. Wenn es aber doch schlimm war, dann muss man doch wenigstens die Betroffenen informieren, oder?

Update 24.6.2008: Auf Golem.de wird inzwischen berichtet, dass es sogar möglich war ein Administrator-Konto anzulegen. Das ist schon verschärft. Hier die Einschätzung des Sicherheitsexperten Matthias Rosche (Fa. Integralis) aus deren Pressemitteilung:

Da diese Daten auch im Block abgefragt werden können, befürchtet der Fachmann,
dass bereits Millionen von Datensätzen der Bürger im Internet frei zugänglich sind.
„Man kann hier schon eher von grober Fahrlässigkeit als von einer Sicherheitslücke
sprechen.“ Nach Einschätzung des Experten sind diese Datensätze ideal dazu
geeignet, professionellen Identitätsdiebstahl zu unterstützen und Identitätsdokumente
zu fälschen. So lassen sich etwa Konten auf den Namen Dritter eröffnen
oder Wohnungen anmieten, „eine Einladung für Kriminelle jeglicher Couleur,“ so
Rosche.

Die Zitate der Politiker sind hingegen eher peinlich:

  • Die Linken verteufeln Privatisierung und sehen in der Panne eine der Folgen. Wie, Bahnhof? Meiner Einschätzung nach passieren solche Pannen in privaten Firmen nicht so geballt. Immerhin haben 15 Gemeinden gepennt. 😀
  • Die FDP sorgt sich um die öffentliche Meinung gegenüber solchen Systemen. Hey, warum sorgen sie sich nicht um die betroffenen Einwohner? Muss ich das verstehen? Dann hätten man das wohl besser vertuscht… Informierte Bürger – so weit sollte es wohl besser nicht kommen. 😉

Ich sehe gerade, dass auch Heise vor einer Stunde einen weiteren recht informativen Artikel dazu veröffentlicht hat: Potsdam ist eine der Gemeinden und ist zwar zerknirscht, versucht aber die Sache positiv zu sehen…

22. Juni 2008 um 12:08

Vertrieb gegen IT?

Diese Art Auseinandersetzungen zu regeln ist wenigstens mal originell:

Bei uns gibt es auch ab und an die normalen Reibereien zwischen dem Vertrieb und der Entwicklung. Ich denke diese Art der Schlichtung bringe ich mal ein…

via Hans-Wurst

21. Juni 2008 um 16:06

Paul Randal antwortet

Bei Microsoft beantwortet Paul Randal im Artikel "SQL – Fragen und Antworten: E/A-Fehler, Datenbankspiegelung und mehr" drei Fragen zu sehr speziellen SQL-Server-Themen. Mich interessierten besonders seine Ausführungen dazu wie man an defekte Testdatenbanken ran kommt, damit man mal die Datenbankprüfung testen kann. Sehr lesenswert.

Er bietet übrigens auch defekte Datenbanken (mit ausführlicher Erklärung) zum Download an.

20. Juni 2008 um 16:59

Danke für die Unterstützung

Neulich beschrieb ich einen Bug im SQL-Server und bat um Unterstützung. Nachdem der deutsche MS-Support mich abgewimmelt hatte, gelang es Itzik Ben-Gan den Bug von MS anerkennen zu lassen und man konnte auf MS-Connect "gegen" den Bug stimmen. Das haben insgesamt 19 Leute gemacht, die Bewertung ist sehr, sehr hoch. Dafür bedanke ich mich ganz herzlich. Ich bin sicher, dass sowohl der Name des Einreichers (Itzik Ben-Gan) als auch diese ungewöhnlich zahlreiche Bewertung eine Rolle bei der Bearbeitung seitens MS spielten…

Das Problem rutschte in der MS-Hierarchie inzwischen bis zur endgültigen Station: Vom Microsoft-Mitarbeiter Jim wurde der Bug bewertet, kommentiert und an zur Bearbeitung an das "Query Optimizer Development Team" weitergeleitet. Das ist sehr erfreulich. 😀

Ich finde auch die Argumentation von Jim interessant. Sie ist hier nachzulesen: Er zieht eine Parallele zum Verhalten von Compilern. Wenn klar ist, in welcher Form und in welcher Version das behoben wird, melde ich mich dazu wieder.

20. Juni 2008 um 16:43

Die Datenbank ist voll – uh uh uh

Als ich noch ziemlich klein war, da sang Helga Feddersen das Lied "Die Wanne ist voll". Keine Ahnung warum ich da jetzt dran denken muss. Aber als ich gerade eine Seite des SQL-Server-Magazines aufrufen wollte, da bekam ich folgende Meldung:

Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Could not allocate space for object 'dbo.ArticleViewCount'.'PK_articleViewCountArchive' in database 'NT_ContentDB' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

Solche Meldungen sind nicht nur mega-peinlich für die Betreiber der Seiten, sondern auch sehr informativ. Hier kann man eine ganze Menge über das CMS erfahren, dass hier betrieben wird (ich meine, außer das "Macromedia" verwendet wird). Ob denen das recht ist?

Offensichtlich ist in der Datenbank 'NT_ContentDB' – in der deren "Content" verwaltet wird – kein Platz mehr, um etwas einen Datensatz in der Tabelle "ArticleViewCount" reinzuschreiben. Genauer gesagt soll in einen vermutlich gruppierten Index, der zugleich Primärschlüssel ist, etwas eingefügt werden, aber das ist bei gruppierten Indexes ja die Tabelle. Da in die betreffende Tabelle offenbar bei jedem Datenzugriff etwas geschrieben wird, ist hier ein echter Hotspot. Weil diese Tabelle in der primären Datei, also der "*.MDF", liegt, wurde das nicht unbedingt für den "Hochleistungsbetrieb" ausgelegt. Insbesondere wurden die Daten nicht auf mehrere Dateien aufgeteilt, was den Datenzugriff parallelisieren könnte und damit den Durchsatz erhöhen würde. 😮

Diese Meldung kommt beim SQL-Server übrigens nicht besonders häufig:

  • Entweder wurde für die betreffende Datenbankdatei eine feste Größe eingestellt, dann ist darin einfach der Platz voll. In diesen Fällen sollte der Admin regelmäßig den freien Platz überprüfen – am besten automatisiert.
  • Oder die Datenbank-Datei wächst automatisch. Das ist der Normalfall. Davon gehe ich daher auch hier aus. Dann ist einfach die Partition voll. Und sowas sollte einem Admin auch nicht so durchgehen… 😉

Wie schön, dass anderen auch peinliche Pannen passieren… 😀

18. Juni 2008 um 21:43

Firefox-Weltrekord

Tobbi schreibt, dass Opera 9.5 in der ersten Woche fast 5 Millionen mal aus dem Netz abgerufen wurde. Das ist schon beachtlich. Das macht erst deutlich, wie groß der Erfolg von Firefox 3.0 ist. Der wurde in den ersten 24 Stunden tatsächlich 8,6 Millionen mal aus dem Netz abgerufen. Damit dürfte dieser Guiness-Weltrekord für längere Zeit bestehen bleiben.

In Deutschland gab es übrigens 723 Tausend Downloads. Damit liegen wir auf Platz 2 hinter den USA (mit 2,6 Mio) und vor Japan mit 406 Tausend. Hier noch ein paar andere Länder: Groß-Britannien 310T, Spanien 308T, Frankreich 303T, Italien 254T, Polen 211T, Litauen 271T, Schweiz 80T, Türkei 76T und Österreich ebenfalls 76T.

Schade, dass es gestern solche Verwirrung um den Start gab, sonst wären bestimmt noch mehr zusammengekommen. 🙂

18. Juni 2008 um 18:53

Sind erfolgreiche IT-Projekte bloß Legenden?

In der Ausgabe 6/2008 der Zeitschrift "IT-Mittelstand" beginnt der Artikel "Legendenbildung?" so:

Jeder hat schon einmal von erfolgreichen IT-Projekten gehört, doch tatsächlich gesehen und erlebt hat sie selten jemand. Diese Legendenbildung, vor allem bezüglich eingehaltener Zeit- und Kostenrahmen, liegt aber weniger an den eingeführten Programmen, Lösungen und Prozessen, als vielmehr am (fehlerhaften) Projektmanagement.

Das ist harter Tobak. Da ich selber schon an etlichen erfolgreichen IT-Projekten beteiligt war, frage ich mich, was hinter so einer Polemik steckt. Ich behaupte sogar, dass fast alle IT-Projekte meiner Firma (wenigsten 95%) erfolgreich sind. Und ich sage das nicht, um Werbung zu machen (daher nenne ich keinen Namen).

Moment – Werbung machen? In dem Artikel wird eine Consulting-Firma genannt, die von zwei Firmen als externe Projektleitung hinzugezogen wurde. Und dieser sagenumwobene Consulter schloss doch tatsächlich ein Projekt erfolgreich ab. Wie strahlt diese Firma nun über die angebliche Masse der schlechten Projektmanager raus! Wie schlau und erfahren müssen die Mitarbeiter dieser Firma – im Vergleich zu den Loosern – sein… 😉
Interessanterweise fand ich bei Google 24 Treffer zu dem Autoren des Artikels und dieser Firma, in wenigstens einem Artikel wird wieder diese Beratungsfirma und einer der Inhabern als der Lichtblick im Lande der IT-Versager geschildert… 😀

Aber meine erste Vermutung – es könnte sich hier um einen Mitarbeiter eben dieser Firma handeln – ist falsch. Der Autor gehört offenbar zu (oder arbeitet im Auftrag) einer PR-Agentur, die davon lebt Werbung für andere Firmen zu machen. Es handelt sich dabei also mit ziemlicher Sicherheit um Auftragsarbeiten der Consulting-Firma.

Ehrlich gesagt, schockiert mich das nicht besonders. Aber ich bin enttäuscht, dass sich die Strategie für die Firma offensichtlich auszahlt: Sind denn die potentiellen Kunden, die sowas lesen, wirklich von solchen offensichtlich subjektiven Artikeln beeindruckt?