Di seguito tutti gli interventi pubblicati sul sito, in ordine cronologico.
A tutti quelli che lavorano su database è capitato, almeno una volta nella vita, di dover cercare un certo valore (stringa o altro) presente in un qualche punto del db. Nel mio caso specifico, una web application pubblicata sul web è stata attaccata con SQL-injection e ci siamo ritrovati con migliaia (20.000-30.000) di righe del db (repository di un CM) sporcate con javascript malevolo. La prima, istantanea soluzione è stata quella di mettere offline l'applicazione; per ripulirla, invece, dal malware, ho usato una stored procedure pubblicata a questo indirizzo http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm da Narayana Vyas Kondreddi al quale va la mia riconoscenza...  . In sostanza, creata la SP, è possibile indicare il valore da ricercare all'interno del db e... attendere. Sempre dello stesso autore, anche una SP per trovare e sostituire valori http://vyaskn.tripod.com/sql_server_search_and_replace.htm.Per vostra comodità riporto il codice per la creazione della stored procedure. CREATE PROC SearchAllTables( @SearchStr nvarchar(100))ASBEGIN -- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved. -- Purpose: To search all columns of all tables for a given search string -- Written by: Narayana Vyas Kondreddi -- Site: http://vyaskn.tripod.com -- Tested on: SQL Server 7.0 and SQL Server 2000 (anche SQL Server 2005 da me) -- Date modified: 28th July 2002 22:50 GMT CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630)) SET NOCOUNT ON DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110) SET @TableName = '' SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') WHILE @TableName IS NOT NULL BEGIN SET @ColumnName = '' SET @TableName = ( SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName AND OBJECTPROPERTY( OBJECT_ID( QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) ), 'IsMSShipped' ) = 0 ) WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL) BEGIN SET @ColumnName = ( SELECT MIN(QUOTENAME(COLUMN_NAME)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2) AND TABLE_NAME = PARSENAME(@TableName, 1) AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar') AND QUOTENAME(COLUMN_NAME) > @ColumnName ) IF @ColumnName IS NOT NULL BEGIN INSERT INTO #Results EXEC ( 'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 ) END END END SELECT ColumnName, ColumnValue FROM #ResultsEND
Chiudo con un ringraziamento: Dear Narayana many thanks!
Di Admin (del 13/01/2010 @ 05:26:33, in Varia, linkato 2836 volte)
Dopo una scansione completa con un antivirus su un PC con Windows XP ho avuto la segnalazione della presenza di un virus in System Volume Information. Questa cartella su file system viene utilizzata dal sistema operativo per salvare i punti di ripristino necessari per un roll-back del sistema. Se il sistema è infetto da malware, i file contaminati vengono in ogni caso congelati ed archiviati in SVI. Personalmente non amo delegare al sistema la funzionalità di "snapshot-roll-back", quindi ho ritenuto opportuno disabilitare SVI, risolvendo contestualmente anche il problemino-virus. Per procedere alla disabilitazione di SVI, procedere come segue:
- "Proprietà" di "Risorse del computer"
- Seleziona il tab "Ripristino di sistema" e disattivare il Ripristino del sistema in tutti i lettori " o "Disattivare il Ripristino del sistema"
Fatto!
Un collega mi ha chiesto come sia possibile aggiornare alcuni campi di tabelle collegate con JOIN; nel caso specifico si vorrebbe denormalizzare due tabelle consolidandole in una entità.
La risposta è SI, si può fare, anche facilmente:
UPDATE Tabella1 SET Tabella1.CampoNuovo = Tabella2.CampoVecchio FROM Tabella1 INNER JOIN Tabella2 ON Tabella1.ID = Tabella2.ID
Di Admin (del 02/01/2010 @ 05:17:08, in Varia, linkato 1999 volte)
|