Dez 16

SQL Server eBook von Microsoft für lau
Dienstag, Dezember 16th, 2008 | Comments: 5 | Trackbacks/Pingbacks: 1

Und mal wieder etwas aus der Kategorie “KostNix”: Bei Microsoft gibt es ab sofot das eBook “Introducing Microsoft SQL Server 2008” für lau zu haben.

Ein Blick in das Inhaltsverzeichnis verspricht einige interessante Theme:

Introducing Microsoft SQL Server 2008:
Chapter 1: Security and Administration
Chapter 2: Performance
Chapter 3: Type System
Chapter 4: Programmability
Chapter 5: Storage
Chapter 6: Enhancements for High Availability
Chapter 7: Business Intelligence Enhancements

Nachteil: man muss sich für das Buch bei Microsoft registrieren. Wer das nicht möchte, kann sich zumindest das erste Kapitel anschauen :)

[via mynethome.de]

Okt 24

Online Books für lau
Freitag, Oktober 24th, 2008 | Comments: 1 | Trackbacks/Pingbacks: 0

Und mal wieder etwas aus der Kategorie “KostNix”:

Der O’Reilly Verlag hat mit “Sicherheit im Internet” und “Praktischer Einstieg in MySQL mit PHP” wieder zwei Bücher als Openbooks veröffentlicht. Damit stehen nun fast 40 OpenBooks in Englisch bzw. Deutsch – größtenteils unter Open Source-Lizenzen wie der GNU Free Documentation License, Open Publications License oder der GNU General Public License – auf der O’Reilly Webseite für jedermann kostenlos zur Verfügung.

Nicht gerade Literatur für mich, aber vor allem das erste Werk scheint mir recht Nützlich für ein paar Freund und Bekannten von mir zu sein – ein paar Nützliche Tips können ja nie schaden und ersparen mir dann vielleicht die eine oder andere immer wiederkehrende Frage/Antwort Spielerei :)

[via Pro-Linux]

Jul 04

Suchen und Ersetzen in MSSQL
Mittwoch, Juli 4th, 2007 | Comments: 0 | Trackbacks/Pingbacks: 0

Will man in einer SQL-Tabelle Werte ersetzen, so ist dieses ja eigentlich sehr einfach und lässt sich, sofern nur der Wert selber im entsprechenden Feld steht, über eine simple UPDATE-Query erledigen.

Etwas komplexer wird die ganze Angelegenheit, wenn man, z.B. weil sich z.B. ein Produktname aber nicht die Bezeichnung geändert hat, nur ein Wort in einem Feld austauschen muss.

Lösen lässt sich das über eine kleine SQL Abfrage:

DECLARE @suchen varchar (255)
DECLARE @ersetzen varchar (255)
DECLARE @findus varchar (255)

SELECT @suchen = ‘Altername’
SELECT @ersetzen  = ‘Neuername’
SELECT @findus = ‘%’ + @suchen + ‘%’

UPDATE
    [Tabellenname]
SET
    [Feldname] = STUFF([Feldname], PATINDEX(@findus, [Feldname]), DATALENGTH(@suchen), @ersetzen)
WHERE
    [Feldname] LIKE @findus

Das Beispiel durchsucht nun eine nvarchar-Spalte Feldname in der Tabelle Tabellenname und ersetzt dort das Wort Altername durch das Wort Neuername.

Jun 08

SQL-Injection in WordPress
Freitag, Juni 8th, 2007 | Comments: 4 | Trackbacks/Pingbacks: 1

Auf Milw0rm wurde ein Exploit für eine Remote SQL-Injection für das Blogsystem WordPress veröffentlicht, mit der Angreifer eigene Befehle an die Datenbank von WordPress übergeben und so Inhalte manipulieren oder Namen und Passwort-Hashes anderer Nutzer auslesen können.

Verursacher ist die Funktion wp.suggestCategories im Modul xmlrpc.php, die übergebene Parameter nicht richtig filtert und so beliebige SQL-Aufrufe an die Datenbank weitergibt.

Der Fehler betrifft wahrscheinlich alle WordPress-Versionen bis einschließlich 2.2. Zwar lässt sich der Exploit nur als angemeldeter Nutzer ausnutzen, Anwender sollten aber ASAP das Update der xmlrpc.php aus den Entwickler-Repositories einspielen.

Wer es lieber händisch mag, muss in der Zeile 541

$max_results = $args[4];

gegen

$max_results = (int) $args[4];

austauschen … zumindest passt dieses auf die xmlrpc.php der Version 2.2. Wie der Code in den Versionen < 2.2 aussieht, kann ich IMO leider nicht sagen.

Feb 08

Besitzstandwechsel von Tabellen leicht gemacht
Donnerstag, Februar 8th, 2007 | Comments: 0 | Trackbacks/Pingbacks: 0

Will man bei einer Datenbank eines MS SQL-Servers die Besitzrechte aller Datenbanken ändern, so kann man dieses bekannter weise über “Rechtsklick->Alle Tasks->Berechtigungen verwalten” erledigen.

Soll der Besitzer aller Tabellen einer Datenbank geändert werden, ist dieses Vorgehensweise allerdings suboptimal. Besser und vor allem schneller geht es in einer solchen Situation mit

sp_MSForEachTable ‘sp_changeobjectowner ‘‘?’‘,’‘NeuerBesitzer’

Leider funktioniert diese Methode nicht bei Stored Procedures (SP), hier reicht es allerdings aus, für alle SP ein SQL-Script zu generieren und überall, wo der Benutzer mittels setuser gesetzt wird, diesen gegen den neuen Benutzer auszutauschen (setuser N’NeuerBesitzer’).

Aug 08

Alle Spaltennamen einer MSSQL Tabelle ausgeben lassen
Dienstag, August 8th, 2006 | Comments: 1 | Trackbacks/Pingbacks: 0

Geht eigentlich ganz einfach wenn man weiß wie:

SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ‘foo’

Alle, und ich meine wirklich alle, Tabellennamen, Spaltennamen sowie deren Datentyp und Länge kann man sich übrigends mit

SELECT
        table_name=sysobjects.name,
        column_name=syscolumns.name,
        datatype=systypes.name,
        length=syscolumns.length
FROM
        sysobjects
            JOIN syscolumns ON sysobjects.[id] = syscolumns.[id]
            JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE
        sysobjects.[xtype]=‘U’
ORDER BY
        sysobjects.[name],
        syscolumns.colid

ausgeben lassen … aber das nur mal am Rande :)

Aug 08

Array an eine Stored Procedure übergeben
Dienstag, August 8th, 2006 | Comments: 0 | Trackbacks/Pingbacks: 0

Ein Array kann man bekannter Maßen nicht an eine Stored Procedure übergeben. Notnagel wäre an dieser Stelle eine kommaseparierte Liste von String-Parametern als IN-Parameter.

Einen interessanten Ansatz dazu hat Daniel Müller in seinem .NET – Software & DotNetNuke (DNN) Blog gefunden. Mittels einer User Defined Function(UDF) macht er aus den nvarchar Parameter eine “Tabelle”, die er dann ohne ohne Probleme mit dem IN Parameter verarbeiten kann.

Natürlich ist hier nicht nur ein select-Statement denkbar. Mittels einem Cursor läßt sich mit dem Ergebnis auch eine weitere Stored Procedure ansprechen und die gefunden Daten z.B. in eine andere Tabelle abspeichern.

SET @ItemIDs = ’1,2,3,4,5,6,7′
SET @MitarbeiterID = ’23′

DECLARE Item_cursor CURSOR FOR
        SELECT   @MitarbeiterID AS MitarbeiterID, [id] AS @ItemID FROM fn_Split_varcharToint(@ItemIDs)

OPEN Item_cursor

– Perform the first fetch.
FETCH NEXT FROM Item_cursor
INTO @MitarbeiterID, @ItemIDs

– Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
   IF(@MitarbeiterID != 0 AND @ItemIDs != 0)
        BEGIN
               EXEC My_Custom_Stored_Procedure @MitarbeiterID, @ItemIDs
        END
   FETCH NEXT FROM Item_cursor
        INTO  @MitarbeiterID, @ItemIDs
END

CLOSE Item_cursor
DEALLOCATE Item_cursor

Zugegeben, ein Cursor ist nicht gerade etwas, was man häufig verwenden sollte, aber dieses Blog ist ja auch kein SQL Lehrbuch *G*

  .search the stuff 

  .take out the stuff 

  .choose the stuff