Мы понесли какое-то вторжение в наш SQL Server.Поиск строки во всех базах данных, всех столбцах и всех таблицах (SQL Server 2008 R2)
Я пытаюсь найти в каждой базе данных, в каждой таблице, в каждом столбце слово abortion
и cheat
.
Я могу сделать это с помощью этого запроса, но в одной базе данных.
-- Store results in a local temp table so that. I'm using a
-- local temp table so that I can access it in SP_EXECUTESQL.
create table #tmp
(
db varchar(max),
tbl nvarchar(max),
col nvarchar(max),
val nvarchar(max),
);
declare @db nvarchar(max);
declare @tbl nvarchar(max);
declare @col nvarchar(max);
declare @q nvarchar(max);
declare @search nvarchar(max) = 'abortion';
-- Create a cursor on all columns in the database
declare c cursor for
SELECT
DB_NAME(DB_ID()) as DBName, tbls.TABLE_NAME, cols.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLES AS tbls
JOIN INFORMATION_SCHEMA.COLUMNS AS cols ON tbls.TABLE_NAME = cols.TABLE_NAME
-- For each table and column pair, see if the search value exists.
open c
fetch next from c into @db, @tbl, @col
while @@FETCH_STATUS = 0
begin
-- Look for the search key in current table column and if found add it to the results.
SET @q = 'INSERT INTO #tmp SELECT ''' [email protected]+''',''' + @tbl + ''', ''' + @col + ''', ' + @col + ' FROM ' + @tbl + ' WHERE ' + @col + ' LIKE ''%' + @search + '%'''
EXEC SP_EXECUTESQL @q
fetch next from c into @db, @tbl, @col
end
close c
deallocate c
-- Get results
select distinct db,tbl,col from #tmp
-- Remove local temp table.
drop table #tmp
Как найти эти строки? Набор должен быть результат:
DATABASE | TABLE | COLUMN
мне не нужен результат (текстовое поле), и мне нужно select distinct
для таблиц и столбцов, потому что это будет много abortion
в одной и той же таблицы/столбца.
http://stackoverflow.com/questions/9185871/how-to-search-sql-server-database-for-string или [SQL Search] (http://www.red-gate.com/products/ sql-development/sql-search /) или [sp_searchtable] (https://gallery.technet.microsoft.com/scriptcenter/c0c57332-8624-48c0-b4c3-5b31fe641c58) – lad2025
привет, спасибо @ lad2025, но ни один из этих запросов может помочь мне. последний, который ищет каждую базу данных, не работает. –
Поскольку это одна вещь, почему вы не можете просто запустить ее для каждой базы данных? Кроме того, прежде чем вы начнете исправлять данные, я надеюсь, что вы исправили уязвимость в sql-инъекции. Без сомнения, это то, что произошло. –