독까의 이야기

USE master

ALTER DATABASE DB명 SET OFFLINE



USE master
ALTER DATABASE DB명  SET ONLINE

'Database > MS-SQL' 카테고리의 다른 글

DDL, DML, DCL  (0) 2016.07.25
X 행에 데이터가 커밋되지 않았습니다.  (0) 2016.07.25
DB 내의 특정 구문 일괄 삭제  (0) 2016.07.25
MS-SQL 모든 사용자 연결 끊기  (0) 2016.07.25
php + MS-SQL 연동시 확인 사항  (0) 2016.07.22

SQL Injection 또는 외부 침입으로 인하여 DB 에 비정상 자료 등록되는 경우가 발생함

스팸게시글 등록 또는 광고 웹페이지 경로 등록 등 게시글 등록시 일괄 삭제 필요함

순서 1

프로시저 생성

CREATE PROCEDURE  [DB_DEL_TEXT]
AS

DECLARE @TP  int;
DECLARE @TBL varchar(255), @CLN varchar(255),  @DEL_STR varchar(255);
SET @DEL_STR='광고광고광고<script src=http://fuckingchina.com></script>'   -- 여기의 ' ' 안의 내용이 삭제 될 예정인 내용

DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name ,b.xtype
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  OR b.xtype=175  OR b.xtype=239 );

OPEN Table_Cursor;

FETCH NEXT FROM Table_Cursor INTO @TBL, @CLN, @TP;
WHILE (@@FETCH_STATUS = 0) BEGIN
    IF  @TP  > 100
    BEGIN
          EXEC('UPDATE ['+ @TBL +'] set [' + @CLN + '] = REPLACE('+ @CLN+' , '''+@DEL_STR +''','''' )');
    END
    ELSE
    BEGIN
                    EXEC('UPDATE ['+ @TBL +'] set [' + @CLN + '] = REPLACE(CONVERT(varchar(8000),'+ @CLN+') , '''+@DEL_STR +''','''' )');
    END
FETCH NEXT FROM Table_Cursor INTO @TBL, @CLN,@TP;
END;

CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
GO

 

순서2

일괄 삭제를 진행 할 DB 접근하여 새 쿼리 실행 후 생성 된 프로시저 실행

Exec DB_DEL_TEXT

 ALTER DATABASE [사용자데이터베이스] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

--활성화되어 있는 트랜잭션을 즉시 처리 싱글유저모드


ALTER DATABASE [사용자데이터베이스] SET SINGLE_USER WITH ROLLBACK AFTER 60;

--활성화 되어 있는 트랜잭션을 60초 후에 모두 처리하고 싱글유저모드 변경


ALTER DATABASE   [사용자데이터베이스] SET MULTI_USER

--싱글 유저 모드를 다시 멀티 유저 모드로 변경 (이거 꼭 해야 함!!!)