17 de jul. de 2008

Stored procedure que pesquisa e substitui dados de todas as tabelas

Que dia ocupado foi hoje... um engraçadinho se aproveitou de uma falha de segurança de um e-commerce que dou manutenção ([ironia]Adoro prestar manutenção de aplicação dos outros[/ironia]) para colocar um exploit em TODOS os campos das tabelas...

Estava eu P... da vida tentando resolver o problema quando vejo um site que disponibilizou uma Stored Procedure para SQL Server que substitui um dado por outro. Salvou o meu dia!!

Para quem precisar, algum dia, de uma procedure que faça isso, tá ae:

CREATE PROC SearchAndReplace
(
@SearchStr nvarchar(100),
@ReplaceStr nvarchar(100)
)
AS
BEGIN

-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string and replace it with another string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Tested on: SQL Server 7.0 and SQL Server 2000
-- Date modified: 2nd November 2002 13:50 GMT

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110), @SQL nvarchar(4000), @RCTR int
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
SET @RCTR = 0

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
SET @SQL= 'UPDATE ' + @TableName +
' SET ' + @ColumnName
+ ' = REPLACE(' + @ColumnName + ', '
+ QUOTENAME(@SearchStr, '''') + ', ' + QUOTENAME(@ReplaceStr, '''') +
') WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
EXEC (@SQL)
SET @RCTR = @RCTR + @@ROWCOUNT
END
END
END

SELECT 'Replaced ' + CAST(@RCTR AS varchar) + ' occurence(s)' AS 'Outcome'
END


PS: Os créditos estão no demonstrativo do código.
PS2: Utilize esse código por sua conta. Não garanto que dados não sejam perdidos e não dou suporte.

16 de jul. de 2008

Gato para TrendNet TEW-423PI no Linux

Para quem, como eu, possui uma placa wireless da "maravilhosa" TrendNet modelo TEW-423PI sabe que essa placa não possui suporte para o nosso famigerado S.O. Linux.

Mas, para nossa alegria, na comunidade sempre tem alguém capacitado e com boa vontade para nos ajudar. Resumidamente falando, baixe o ndiswrapper, instale-o e use o driver do windows com o comando.

Links aqui, aqui e aqui.

PS: Vi dizer que é recomendável utilizar o driver para Win 98 do CD de driver da placa na hora de instalar.

Update: achei o link para o driver de versões 64 bits. http://skd.de/e_en/support/driver_searchresults.html?navanchor=&term=typ.treiber+produkt.SK-54C1&produkt=produkt.SK-54C1&typ=typ.treiber&system=

Update: O verdadeiro fabricante dessa placa é a Marvel (não a que edita quadrinhos, a de hardware =p), facilmente visto por um lspci no shell do Linux.

11 de jul. de 2008

Reviews de distros Linux

Achei um blog muito interessante. O autor do blog é um britânico que gosta do digníssimo pingüim... ele faz reviews das distribuições que ele acha interessante. É o Red Devil's Tech Blog.

via brlinux

1 de jul. de 2008

Livro: Desenvolvimento ágil com Rails

Acaba de sair o livro "Desenvolvimento ágil com Rails" revisado pelo Fábio Akita, autor do blog Akita on Rails. Entusisasta do Ruby on Rails, ele palestra em muitos lugares, demonstrando o poder de se programar em Rails, juntamente com métodos de desenvolvimento ágil.

Confesso que ultimamente tenho tido vontade de aprender uma nova linguagem, dentre elas Python, Java, C++ e Ruby on Rails.

Eu ainda aprendo todas elas! Quem sabe eu não abrace a idéia do Fábio e além da linguagem de programação ainda venha a utilizar o desenvolvimento ágil...