SqlServer에 삽입된 목마 레코드 대량 교체

1860 단어
최근에 삽입된 목마 기록을 대량으로 교체하는 것을 찾았는데, 좋은 문장을 찾았는데, 쓸모가 매우 크다. 단지 십여 줄의 커서 문장을 사용해서 전체 데이터베이스에 있는 모든 표의 악의적인 목마를 제거했고, Google에서 이 기록을 검색할 확률이 매우 적다. 여기에 전문적으로 옮겨 싣는다.나중에 내가 찾을 수 있도록, 후세 사람들이 도움을 받기를 바란다.
원문은 다음과 같습니다.
 
  
declare @t varchar(555),@c varchar(555) ,@inScript varchar(8000)
set @inScript=' '
declare table_cursor cursor for select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='u' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167)
open table_cursor
fetch next from table_cursor into @t,@c
while(@@fetch_status=0)
begin
exec('update ['+@t+'] set ['+@c+']=replace(cast(['+@c+'] as varchar(8000)),'''+@inScript+''','''')' )
fetch next from table_cursor into @t,@c
end
close table_cursor
deallocate table_cursor;

SQL 도입 방지
1. 사 사용자를 사용하여 데이터베이스에 연결하지 마라
2. 새 퍼블릭 권한 데이터베이스 사용자를 만들고 이 사용자로 데이터베이스에 접근
3. [캐릭터]는 캐릭터public가sysobjects와syscolumns 대상에 대한 select 접근 권한을 제거한다
4. [사용자] 사용자 이름 -> 마우스 오른쪽 버튼 - 속성 - 권한 - sysobjects 및syscolumns 위에서 "×”
5. 다음 코드를 통해 감지(실패는 권한이 정확하다는 것을 나타내고 표시할 수 있으면 권한이 너무 높다는 것을 나타낸다).
 
  
DECLARE @T varchar(255),
@C varchar(255)
DECLARE Table_Cursor CURSOR FOR
Select a.name,b.name from sysobjects a,syscolumns b
where a.id=b.id and a.xtype= 'u ' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN print @c
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor

좋은 웹페이지 즐겨찾기