악성코드 감염으로 작업 관리자 비활성화 문제

악성코드 감염으로 작업 관리자 비활성화 문제

원인 :
일부 악성코드 감염 시 자신의 행위를 종료하지 못하도록 작업 관리자(Taskmgr.exe)를 실행안됨.

해결 :
감염으로 인해 작업 관리자를 실행하지 못하도록 레지스트리 값을 추가한 경우 작업 관리자 실행 메뉴가 비활성화되어 있을수 있음

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
 - DisableTaskMgr = 1
레지스트리 값을 확인해보면 시스템 정책 영역에 DisableTaskMgr 값이 추가되어 있으며, 이로 인하여 작업 관리자 실행 메뉴 비활성화 및 "관리자가 작업 관리자를 사용하지 못하도록 했습니다." 메시지가 생성

위와 같은 증상으로 작업 관리자를 실행할 수 없는 경우에는 레지스트리 편집기(regedit)를 실행하여 "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr" 값을 찾아 삭제

일부 감염 환경에서는 레지스트리 편집기(regedit) 실행을 방해할 수 있으므로 명령 프롬프트(cmd.exe)를 통해 해당 레지스트리 값을 삭제 
명령 프롬프트(관리자)를 실행하여 "REG DELETE "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableTaskMgr /f" 명령어를 입력 후 실행
(vmware 오류)"The IDE device (disks/CD-ROM) configuration is incorrect. There is an IDE slave with no master at ide0:1. This configuration does not work correctly in virtual machines. Move the disk/CD-ROM from ide0:1 to ide0:0 using the configuration editor."

(vmware 오류)"The IDE device (disks/CD-ROM) configuration is incorrect. There is an IDE slave with no master at ide0:1. This configuration does not work correctly in virtual machines. Move the disk/CD-ROM from ide0:1 to ide0:0 using the configuration editor."

오류 :
vmware 에서 디스크 설정이 잘못되어 아래와 같이 에러가 나올때가 있다.
"The IDE device (disks/CD-ROM) configuration is incorrect. There is an IDE slave with no master at ide0:1. This configuration does not work correctly in virtual machines. Move the disk/CD-ROM from ide0:1 to ide0:0 using the configuration editor."

해결 :
settings >hardware>hard disk(scsi)>Advanced.. > Virtual device node > SCSI 0:0 Hard Disk(SCSI) 선택
원격데스크탑 연결 속도 향상

원격데스크탑 연결 속도 향상

옵션에서
디스플레이 탭 > [색] 메뉴에서 가장 낮는 농도를 선택

로컬리소스 탭 > 프린터 항목의 체크를 해제

로컬리소스 탭 >원격 오디오 설정 > 재생안함, 녹음 안함으로 선택

작업 환경 탭>  [지속적인 비트맵 캐싱]항목을 제외한 모든 다른 항목의 체크박스의 체크표시를 해제

MSSQL 복원(Restore) 시 데이터베이스가 사용 중이어서 배타적으로 액세스 할 수 없습니다

MSSQL 복원(Restore) 시 데이터베이스가 사용 중이어서 배타적으로 액세스 할 수 없습니다



MSSQL DB 복원 시 아래와 같은 오류가 발생했을 경우 조치방법입니다.

Exclusive access could not be obtained because the database is in use.



서버 XXX에 대한 복원이(가) 실패했습니다. (Microsoft.SqlServer.SmoExtended)

추가정보 :

Transact-SQL 문 또는 일괄 처리를 실행하는 동안 예외가 발생했습니다.

(Microsoft.SqlServer.ConnectionInfo)

데이터베이스가 사용 중이어서 배타적으로 액세스 할 수 없습니다. RESTORE DATABASE이(가) 비정상적으로 종료됩니다. (Microsoft SQL Server, 오류: 3101)


이 오류가 발생하는 원인은 DB 복원(Restore) 시 아직 해당 DB에 접속되어 있는 세션이 남아있기 때문입니다. 아무도 접근하지 못하도록 DB 접근을 제한하여 복원 작업을 진행할 수 있습니다.
복원이 완료되면 자동으로 접근제한 설정도 해제됩니다.
아래의 과정을 순서대로 따라하시면 DB접근을 제한하여 DB복원을 마무리할 수 있습니다.


1. 복원(Restore) 하려는 DB를 마우스 오른쪽 클릭하여 속성을 클릭합니다.







2. 좌측 카테고리 중 옵션 메뉴를 선택 후 액세스 제한 항목의 MULTI_USER, SINGLE_USER, RESTRICTED_USER 중 RESTRICTED_USER(제한된 사용자)로 선택 후 확인 버튼을 클릭합니다.





3. 데이터베이스 속성을 변경하려면 SQL Server에서 데이터베이스에 대한 다른 모든 연결을 닫아야합니다. 다른 모든 연결을 닫고 속성을 변경하시겠습니까? 라는 물음이 나오면 예 버튼을 클릭합니다.







4. 변경된 속성이 적용되면 DB명 옆에 제한된 사용자 라고 표시되어 있는 것을 확인할 수 있습니다.







5. 이제 복원을 위한 준비가 되었으니 복원 작업을 진행하시면 아래와 같이 데이터베이스의 복원이 완료되었습니다. 라는 완료 메시지를 확인할 수 있습니다.






출처:
http://h5bak.tistory.com/283 [이준빈은 호박머리]
C# UTF-8 문자열 Base64 인코딩/디코딩

C# UTF-8 문자열 Base64 인코딩/디코딩


C#에서는 System 네임스페이스의 Convert 클래스에서 기본적으로 Base64 문자열로 강제변환하는 메소드를 제공한다.
이는 다만 byte형식의 데이터만을 변환 가능하므로 문자열을 Base64로 변환하려면 문자열을 byte배열로 변환해서 사용해야 한다.
한글 문자열일 경우 텍스트인코딩 형식에 따라 깨짐현상이 발생할 수 있으므로 텍스트인코딩을 요즘 대부분 사용하는 UTF-8 형식으로 이러한 일련의 과정들을 사용하기 편리하도록 메소드로 구현 하였다.

using System;

namespace MyProject
{
    public class SecurityUtil
    {
        #region Base64
        public static string Base64Encode(string data)
        {
            try
            {
                byte[] encData_byte = new byte[data.Length];
                encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
                string encodedData = Convert.ToBase64String(encData_byte);
                return encodedData;
            }
            catch (Exception e)
            {
                throw new Exception("Error in Base64Encode: " + e.Message);
            }
        }

        public static string Base64Decode(string data)
        {
            try
            {
                System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
                System.Text.Decoder utf8Decode = encoder.GetDecoder();

                byte[] todecode_byte = Convert.FromBase64String(data);
                int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
                char[] decoded_char = new char[charCount];
                utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
                string result = new String(decoded_char);
                return result;
            }
            catch (Exception e)
            {
                throw new Exception("Error in Base64Decode: " + e.Message);
            }
        }
        #endregion

        public static void Main(string[] args)
        {
            string testingStr = "가나다라마바사아자차카타파하";
            string encodedStr = SecurityUtil.Base64Encode(testingStr);
            string decodedStr = SecurityUtil.Base64Encode(encodedStr);
            Console.WriteLine(encodedStr);
            Console.WriteLine(decodedStr);
        }
    }
}

출처 :
https://m.blog.naver.com/PostView.nhn?blogId=csaiur&logNo=220224658525&proxyReferer=https%3A%2F%2Fwww.google.co.jp%2F
IIS 목록 기본 설정 및 바인딩 백업 및 복원(Appcmd.exe 이용)

IIS 목록 기본 설정 및 바인딩 백업 및 복원(Appcmd.exe 이용)

IIS 목록 기본 설정 및 바인딩 백업 및 복원(Appcmd.exe 이용)

1. 백업

Cd C:\Windows\System32\inetsrv
위 경로에서
./appcmd.exe add backup "My Backup Name"

1. 복원
Cd C:\Windows\System32\inetsrv
위 경로에서
./appcmd.exe restore backup "My Backup Name"

1. 백업삭제
Cd C:\Windows\System32\inetsrv
위 경로에서
./appcmd.exe delete backup "My Backup Name"



주의 사항 IIS 설정이 백업 되는 것이지 웹페이지 파일 및 FTP 파일이 백업 및 복원 되는것은 아님.

출처 : 
https://m.blog.naver.com/PostView.nhn?blogId=dodobob27&logNo=80202329212&proxyReferer=https%3A%2F%2Fwww.google.co.jp%2F
원하는 자리수만 가져오기

원하는 자리수만 가져오기

collection.Skip(Math.Max(0, collection.Count() - N));

public static class MiscExtensions
{
    // Ex: collection.TakeLast(5);
    public static IEnumerable<T> TakeLast<T>(this IEnumerable<T> source, int N)
    {
        return source.Skip(Math.Max(0, source.Count() - N));
    }
}
Newtonsoft.Json, Version=11.0.0.0, Culture=neutral 과 ** 사이의 충돌을 해결할 수 없습니다.(VS에서 버전충돌)

Newtonsoft.Json, Version=11.0.0.0, Culture=neutral 과 ** 사이의 충돌을 해결할 수 없습니다.(VS에서 버전충돌)

문제 :
"Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"과(와) "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" 사이의 충돌을 해결할 수 없습니다. 임의로 "Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"을(를) 선택합니다.
충돌을 해결하고 경고 메시지가 표시되지 않게 하려면 app.config에서 "Newtonsoft.Json, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" 어셈블리의 버전을 "4.5.0.0" []에서 "11.0.0.0" [C:\_T\_WORK\Box\Site\Framework\Framework\bin\Debug\Newtonsoft.Json.dll](으)로 다시 매핑하십시오.

해결 : 
해당 메세지를 지워주려면  (framework의 버전을 확인하고) web.config에 아래 내용 추가.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>




파일 또는 폴더 확인(c#)

파일 또는 폴더 확인(c#)

// get the file attributes for file or directory
FileAttributes attr = File.GetAttributes(@"c:\Temp");

//detect whether its a directory or file
if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
    MessageBox.Show("Its a directory");
else
    MessageBox.Show("Its a file");

MS-SQL 테이블 복사

MS-SQL 테이블 복사


1. 테이블을 생성하면서 테이블의 데이타 복사
select * into 생성될테이블명 from 원본테이블명

테이블 구조만 복사하겠다면
select * into 생성될테이블명 from 원본테이블명 where 1=2

2. 테이블이 이미 생성되어 있는경우 데이타만 복사
insert into 카피될테이블명 select * from 원본테이블명
특정 데이타만 복사 하겠다면
insert into 카피될테이블명 select * from 원본테이블명 where 검색조건

트랜잭션 로그가 'LOG_BACKUP'(으)로 인해 꽉 찼습니다.

트랜잭션 로그가 'LOG_BACKUP'(으)로 인해 꽉 찼습니다.

문제 :
트랜잭션 로그가 'LOG_BACKUP'(으)로 인해 꽉 찼습니다.

해결:
로그 사용량 확인해서 로그 축소함.
-- 로그 정보확인
DBCC SQLPERF(LOGSPACE)
EXEC SP_HELPFILE
SELECT * FROM SYSFILES

-- 데이터베이스 복구 모델을 SIMPLE로 설정하여 파일을 자름
ALTER DATABASE [데이터베이스명]
SET RECOVERY SIMPLE;

-- 트랜잭션 로그파일을 최소의 단위로 축소
DBCC SHRINKFILE ([데이터베이스 로그명], TRUNCATEONLY);

-- 데이터베이스 복구 모델을 FULL로 설정
ALTER DATABASE [데이터베이스명]
SET RECOVERY FULL;

파일의 전체 경로를 가져왔을 때 파일명, 확장자, 경로, 디렉토리등을 따로 분리해서 사용

파일의 전체 경로를 가져왔을 때 파일명, 확장자, 경로, 디렉토리등을 따로 분리해서 사용

1. 파일명을 추출하고 싶을 때 // 파일 명을 추출합니다. string filepath = @"D:\다운로드\POP\Survive You.mp3"; Console.WriteLine(Path.GetFileName(filepath)); 결과 : “Survive You.mp3” 2. 파일의 확장자를 가져오고 싶을 때 // . 을 포함한 확장자를 가져오고 싶을때 string filepath = @"D:\다운로드\POP\Survive You.mp3"; Console.WriteLine(Path.GetExtension(filepath)); 결과 : “.mp3” 3. 파일의 확장자를 제외한 파일명을 가져오고 싶을 때 // 확장자가 없는 파일명을 가져오고 싶을때 string filepath = @"D:\다운로드\POP\Survive You.mp3"; Console.WriteLine(Path.GetFileNameWithoutExtension(filepath)); 결과 : “Survive You” 4. 파일을 제외한 경로명만 가져오고 싶을때 // 파일을 제외한 경로명만 가져올때 string filepath = @"D:\다운로드\POP\Survive You.mp3"; Console.WriteLine(Path.GetDirectoryName(filepath)); 결과 : “D:\다운로드\POP” 5. 파일과 경로를 합치고 싶을 때 파일과 경로를 분리해 놓고 다시 합치고 싶을 때 Path.Combine() 함수를 사용 문자열을 합쳐도 되겠지만 Combine 을 사용하면 합칠 때 경로의 구분자인 역슬레쉬를 안넣어도 자동으로 추가 // 파일을 제외한 경로명만 가져올때 string filepath = @"D:\다운로드\POP\Survive You.mp3"; Console.WriteLine(Path.Combine("D:\\다운로드\\POP", "Survive You.mp3")); Console.WriteLine(Path.Combine("D:\\다운로드\\POP\\", "Survive You.mp3")); 결과 : “D:\다운로드\POP\Survive You.mp3” “D:\다운로드\POP\Survive You.mp3” 출처: http://mainia.tistory.com/2349
18456 에러, 연결 안됨 에러

18456 에러, 연결 안됨 에러

18456 오류
1. 비밀번호가 맞지 않음
또는
1. 아이피 혹은 서버 정보가 맞지 않음
또는
1.서버의 속성 -> 서버인증 - SQL Server 및 Windows 인증모드 로 변경

로그 확인 방법
서버의 속성 -> 보안-로그인 감사에 보니 실패한 로그인만 감시로 해놓고 체크
-> master DB에서 sp_readerrorlog 로 확인
-> 예제 : 이유: SQL 인증을 사용하여 로그인하지 못했습니다. 서버가 Windows 인증만 사용하도록 구성되어 있습니다. [클라이언트: XXX.XXX.XXX.XXX]
DB이동 작업시 처리내용

DB이동 작업시 처리내용

1. 원본 DB백업 -> 로그자르기 -> 다시 DB백업 ->백업된 내용 압축후 원격 열어서 카피

1. DB 속성에 sqlserver 및 windows 인증모드 로 변경

1. 다른 DB와 연결되는 계정 추가

1. 복원한DB에서 기존 사용자 생성후 사용자 매핑
EXEC sp_change_users_login 'Update_One', '유저명', '유저명';
만약 user이름이 없다고 나오면 master DB에서 유저 생성후 sp_change_users 다시 실행
CREATE LOGIN [로그인아이디] WITH PASSWORD=N'암호', DEFAULT_DATABASE=[DB명], DEFAULT_LANGUAGE=[한국어], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

1. DB에러메세지 추가 (sp_addmessage)

1. master DB 프로시저 등록

1. fnunction테이블 생성

1. sql에이전트 잡스케줄 등록(실행시켜서 에러 안나는지 확인)

1. DB속성 자동증가/최대크기 설정(100M단위로, 최대파일크기 제한없음)

1. 복원 및 작업 모두 완료후 백업을 한번더 진행.

1. 락걸리는 로그 설정(?)

1.  DB서버와 웹서버 hosts 연결(RDP연결 서비스)

1. (RDP(원격통신)) 고급보안이 포함된 방화벽 > 인바운드규칙> 포트  12357을 열어줌

1. 고급보안이 포함된 방화벽 > 인바운드규칙> 포트  1433을 열어줌

1. 방화벽 프로그램 > 허용되는 프로그램 >  DTC 체크 (인바운드에서 1433포트와 RDP포트 열어주었다면 해당내용도 체크 되어 있음)

1. 서비스에서 SQLserver 에이전트 자동 , 지연된 시작으로 변경

이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다.

이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다.

문제 :
Microsoft.Net.Compilers.1.0.0
1>C:\_T\_WORK\Box\Site\FrontEnd\A.csproj(378,5): error : 이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 ..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props입니다.

원인 :
경로에 파일어 없어서 그런경우가 종종있다..

해결 :
솔루션 파일에 해당 파일명을 찾아서 주석처리 해준다.
특정 컬럼명을 포함하는 테이블 목록보기

특정 컬럼명을 포함하는 테이블 목록보기

SELECT
    B.NAME AS 테이블명
    ,A.NAME AS 컬럼명
    ,TYPE_NAME(USER_TYPE_ID) AS 데이타타입
    ,CONVERT(INT, MAX_LENGTH) AS 길이
    ,B.CRDATE AS 테이블생성일
FROM SYS.ALL_COLUMNS AS A
INNER JOIN SYSOBJECTS AS B ON A.OBJECT_ID=B.ID AND B.XTYPE='U'
WHERE A.NAME='user_ratio'

input button을 스타일시트 적용

input button을 스타일시트 적용

<style>
.button {
border:1x solid #ff0080;    /*---테두리 정의---*/
background-Color:#ffe6f2;   /*--백그라운드 정의---*/
font:12px 굴림;      /*--폰트 정의---*/
font-weight:bold;   /*--폰트 굵기---*/
color:#ff0080;    /*--폰트 색깔---*/
width:130;height:30;  /*--버튼 크기---*/
}
</style>

<input type="button" value="확인" class="button">
추가 기능 (액티브액스) 설치시, 보안 경고, 알 수 없는 게시자 문제

추가 기능 (액티브액스) 설치시, 보안 경고, 알 수 없는 게시자 문제

문제 :
Internet Explorer 보안 경고 창에서 설치를 클릭하면 Web Launcher 추가 기능을 설치 후 인터넷 옵션 문제로 인해 Web Launcher 추가 기능을 설치할 수 없는 경우도 있다.
Web Launcher 추가 기능을 설치할 수 없다는  Internet Explorer 보안 경고 창이고, 파일 이름과 게시자를 보여주면서 게시자를 알 수 없다고 한다. 설치 파일을 실행 할 수도 없고, 단지 해당 내용을 확인 할 수만 있다.

해결 : 
Step 1. 제어판-인터넷 옵션을 실행한다.   인터넷 옵션에서 2번 째 탭인 보안 탭을 선택하고, 사용자 지정 수준을 클릭한다.
Step 2. 스크롤을 아래로 내리면, 서명 안 된 ActiveX 컨트롤 다운로드를 "확인"으로 설정한다. 
Step 3.  인터넷 옵션에서 마지막 탭인 고급 탭으로 들어간다. 설정에서 아래로 스크롤을 내리다보면, "소프트웨어의 서명이 올바르지 않더라도 실행 또는 설치하도록 허용" 을 체크한 후 적용 한다. 


RDP로 다수 연결 설정

RDP로 다수 연결 설정

1. gpedit.msc(로컬 그룹 정책 편집기) 실행

1. 로컬 컴퓨터 정책 > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 터미널 서비스 > 원격 데스크톱 세션 호스트 > 연결

1. "원격 데스크톱 서비스 사용자를 하나의 원격 데스크톱 서비스 세션으로 제한"
-> 사용 안 함 - 여러번의 원격 접속을 허용

1. "연결 개수 제한" 항목을 클릭
-> 사용자 수를 제한함 (단, 999999를 입력하면 무제한)
즉. 연결 수를 제한하지 않으려면 999999를 입력합니다.

DTC 설정시 확인사항

DTC 설정시 확인사항

windows server 2012 MSDTC설정
1. 서버관리자 - 관리 - 역활기능 추가
1. 서버역활
1. 응용 프로그램 서버 >상세보기
1. 분산트랜잭션을 선택
1. 서버관리자에서 - 도구 에서 구성요소 서비스를 실행
1. 구성요소 서비스에서 컴퓨터 - 컴퓨터 오른 마우스 속성
1. 마지막에 MSDTC

--------------------------------------------------------------------------------
(요약정리 : msdtc 확인내용 - 방화벽 프로그램 열린지 확인, hosts  쌍방연결 확인후 핑해보고, DTC서비스 재시작해주고, 요소검사 dtc 설정 봐줌)

1. dtc 가 실행중인지 확인한다. (연결된 서버 양쪽 다 확인해야함)

2. BEGIN DISTRIBUTED TRANSACTION 가 쿼리에서 작동가능한지 양쪽에서 테스트 한다.
   (로컬에서도 안되면 로컬dtc가 문제가 있음)

3. dtcping.exe를 ms싸이트에서 다운로드 받아서 양쪽서버에 설치한 후 테스트 한다.
   (안되면 포트가 막혀있을 수도 있음-> dtcping 프로그램으로 통신이 안될때는
방화벽 인바운드규칙에서 49152-65535 , 영역 ip주소 > 다음 ip주소에 DB아이피  또는 해당대역대 (10.12.0.0/24)를 넣어줌)

4. 재부팅
< DTC 활성화하기 >

1. 네트워크 트랜잭션을 허용하려면 MSDTC를 활성화해야 합니다. MSDTC를 활성화하려면 다음 단계를 수행하십시오.
a.  시작을 누르고 실행을 누릅니다.
b.  실행 대화 상자에서 dcomcnfg.exe를 입력한 다음 확인을 누릅니다.
c.  구성 요소 서비스 창에서 구성 요소 서비스, 컴퓨터, 내 컴퓨터를 차례로 확장합니다.(관리도구 - 서비스 - remote procedure call(RPC) 서비스가 시작되어 있는지 확인)
d.  내 컴퓨터를 마우스 오른쪽 단추로 누른 다음 속성을 누릅니다.
e.  내 컴퓨터 등록 정보 대화 상자의 MSDTC 탭에서 보안 구성을 누릅니다.
f.  보안 구성 대화 상자에서 네트워크 DTC 액세스 확인란을 눌러 선택합니다.
g.  원격 컴퓨터로부터 이 컴퓨터에서 분산 트랜잭션을 실행할 수 있도록 하려면 인바운드 허용 확인란을 눌러 선택합니다.
h.  이 컴퓨터로부터 원격 컴퓨터에서 분산 트랜잭션을 실행할 수 있도록 하려면 아웃바운드 허용 확인란을 눌러 선택합니다.
i.  트랜잭션 관리자 통신 그룹 아래의 인증 필요 없음 옵션을 눌러 선택합니다.
j.  보안 구성 대화 상자에서 확인을 누릅니다.
k.  내 컴퓨터 등록 정보 대화 상자에서 확인을 누릅니다.

2. MSDTC 프로그램 및 포트 135를 예외로 포함하도록 Windows 방화벽을 구성해야 합니다. Windows 방화벽을 이렇게 구성하려면 다음 단계를 수행하십시오. a.  시작을 누르고 실행을 누릅니다.
b.  실행 대화 상자에 Firewall.cpl을 입력한 다음 확인을 누릅니다.
c.  제어판에서 Windows 방화벽을 두 번 누릅니다.
d.  Windows 방화벽 대화 상자의 예외 탭에서 프로그램 추가를 누릅니다.
(방화벽 > 허용되는 프로그램 >dtc 허용, microsoft distributed transaction coordinator 허용)
e.  프로그램 추가 대화 상자에서 찾아보기를 누른 다음 Msdtc.exe 파일을 찾습니다. 기본적으로 이 파일은 Installation drive:\Windows\System32 폴더에 있습니다.
f.  프로그램 추가 대화 상자에서 확인을 누릅니다.
g.  Windows 방화벽 대화 상자의 프로그램 및 서비스 목록에서 msdtc 옵션을 눌러 선택합니다.
h.  예외 탭에서 포트 추가를 누릅니다.
i.  포트 추가 대화 상자에서 포트 번호 입력란에 135를 입력한 다음 TCP 옵션을 눌러 선택합니다.
j.  포트 추가 대화 상자에서 이름 입력란에 예외의 이름을 입력한 다음 확인을 누릅니다.
k.  Windows 방화벽 대화 상자에서 j단계에 입력한 예외 이름을 프로그램 및 서비스 목록에서 선택한 다음 확인을 누릅니다.

l. 재부팅

출처: http://jubilate.tistory.com/12 [Jubilate]
ASP웹페이지 로컬 확인 방법

ASP웹페이지 로컬 확인 방법

1. IIS 기본설치 시 asp.dll 파일이 없고 ASP웹페이지도 확인이 불가능 .

1. 제어판 > 프로그램 및 기능 > Windows 기능 켜기/끄기

1. 인터넷 정보 서비스 항목에서 World Wide Web 서비스 > 응용 프로그램 개발 기능 항목에 하부항목을 확인

1.  ASP 항목의 체크함.
(서버측 include(SSI : Server side include) 기능도 필요한 경우 설치.)

1. 설치가 완료되면 C:\Windows\System32\inetsrv 폴더에서 asp.dll 파일을 확인 .


kcp 80040154 오류 발생시

kcp 80040154 오류 발생시

문제 :
kcp 80040154 오류

원인 :
??

해결 :
IIS (인터넷정보서비스 관리자)에서 해당 서비스 설정중 32비트 응용프로그램사용을 True로 하면 해결된다.
순서 : IIS 실행 -> 응용 프로그램 풀 -> 풀 선택 -> 고급설정 -> 32비트 응용프로그램사용(True)
80004005 에러 (로그인에서 요청한 데이터베이스 "**"을(를) 열 수 없습니다. 로그인이 실패했습니다. )

80004005 에러 (로그인에서 요청한 데이터베이스 "**"을(를) 열 수 없습니다. 로그인이 실패했습니다. )

문제:
데이터베이스 복원시
Microsoft OLE DB Provider for SQL Server 오류 '80004005'
로그인에서 요청한 데이터베이스 "**db"을(를) 열 수 없습니다. 로그인이 실패했습니다.

원인 :
복구한 데이터베이스 사용자 와 mssql 서버의 사용자가 다르다고 판단되어서 그렇다.(이름만 같은 다른 사용자로 인식)

해결:
사용자 매핑을 시켜주면 된다.

EXEC sp_change_users_login 'Update_One', '유저명', '유저명';
GO

참고 :
https://technet.microsoft.com/ko-kr/library/ms174378(v=sql.110).aspx
KCP  "cs01 인증정보가 변조 되었습니다"  오류

KCP "cs01 인증정보가 변조 되었습니다" 오류

"CS01 인증정보가 변조되었습니다"라는 오류가 뜨는 원인은 
1. 이름이 깨져서 넘어가는 경우
2. dll 권한이 없을때

1번의 경우 한글 빼고 영문으로 넘겨서 처리가 되면 한글깨짐 문제이므로 cs코드에 아래와 같이 추가해준다.
Response.Charset = "euc-kr";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("euc-kr");

부모테이블 수정/삭제시 자식테이블 자동으로 수정/삭제

부모테이블 수정/삭제시 자식테이블 자동으로 수정/삭제

부모테이블 수정/삭제시 자식테이블 자동으로 수정/삭제 

A,B,C라는 테이블이 있고 서로 연관 관계를 맺어놓습니다.
C는 B를 참조(C의 상위 부모테이블 B, B의 하위 자식테이블 C)
다시 B는 A를 참조(B의 상위 부모테이블 A, A의 하위 자식테이블 B)
A > B > C 순서대로 상위 격에 있다고 생각하시면 될것 같습니다.
3개의 테이블에서 레코드 값을 삭제하는 방법은
delete C => B => A 순서대로 관련 테이블을 삭제해야겠죠?
아니면 개체참조 오류가뜰테니깐요.
 
하지만 이같은 작업을 A테이블만 삭제해도 하위 자식테이블이 자동으로 삭제되는 방법이 있습니다.
바로 알아볼끼요?
 
 
삭제할수 있는 방법은
FK의 관계를 설정할 경우 CASCASE DELETE 를 설정하시게 된다면
A 테이블에서 삭제하면 B 테이블에 맞는 데이터가 삭제되게 할 수 있습니다.
 
아래처럼 키를 정의하실때 옵션을 사용할 수 있습니다.
 

SQL문)

ALTER TABLE BTable
ADD CONSTRAINT FK_B_1 FOREIGN KEY (CustomerId)
REFERENCES ATable (CustomerId) ON DELETE CASCADE
GO


혹은 GUI방식으로도 변경이 가능합니다. 한번 알아볼까요?


테이블 - 디자인 - 관계 순서로 들어가 봅니다.

 
부모테이블과 자식테이블의 관계에서 테이블 디자이너 - INSERT 및 UPDATE 사양을 펼친후에 "삭제 규칙" 을 "계단식 배열"로 변경하게되면 부모테이블의 컬럼을 삭제하면 참조된 자식테이블의 데이터도 함께 삭제되는것을 확인할수 있습니다.
 


위에서 봐서 알겠지만 수정은 "업데이트 규칙"을 동일하게 설정하면 같은 효과를 볼수 있습니다.



참조 : http://egloos.zum.com/sweeper/v/3005563
원본 : https://m.blog.naver.com/sky0210love/20148816689
트리거 생성(CREATE TRIGGER)

트리거 생성(CREATE TRIGGER)

트리거 생성(CREATE TRIGGER)
--기본 트리거 생성
CREATE OR REPLACE TRIGGER Audit_employee_reset
AFTER INSERT OR DELETE OR UPDATE OF COLUMN1, COLUMN2 ON TABLE_NM
BEGIN
   auditpackage.set_reason(NULL);
END;


CREATE OR REPLACE TRIGGER TRIGGER_TEST
  BEFORE DELETE OR INSERT OR UPDATE ON TABLE_NM
  FOR EACH ROW
WHEN (new.COLUMN1> 0)
DECLARE
    sal_diff number;
BEGIN

    INSERT INTO TEST1 VALUES(:old.COLUMN1||'-'||:NEW.COLUMN1);
    
    dbms_output.put('Old salary: ' || :old.COLUMN1);
    dbms_output.put('  New salary: ' || :new.COLUMN1);
    dbms_output.put_line('  Difference ' || :new.COLUMN1);
END;
/


CREATE OR REPLACE TRIGGER Dept_emplist_tr
   INSTEAD OF INSERT ON NESTED TABLE Emplist OF Dept_view
   REFERENCING NEW AS Employee
      PARENT AS Department
   FOR EACH ROW
BEGIN
-- The insert on the nested table is translated to an insert on the base table:
   INSERT INTO Emp_tab VALUES (
      :Employee.Empno, :Employee.Empname,:Employee.Salary, :Department.Deptno);
END;


--사용자 로그인 하면 실행하는 트리거? 별게 다 있네
CREATE OR REPLACE TRIGGER On_Logon  
  AFTER LOGON  
  ON The_user.Schema  
BEGIN  
  Do_Something;  
END;  


    IF INSERTING THEN    --등록이면
        ...
    ELSIF DELETING THEN  --삭제면
        ...    
    ELSE
    
    --업데이트된컬럼명이 COLUMN1 라면
    IF UPDATING('COLUMN1') THEN
        ...
    --그냥 업데이트 라면
    ELSIF UPDATING THEN
        ...        
    END IF;


--트리거 사용
ALTER TRIGGER TRIGGER_TEST ENABLE;
--트리거 사용 정지
ALTER TRIGGER TRIGGER_TEST DISABLE;


--트리거 Recompiling
ALTER TRIGGER TRIGGER_TEST COMPILE;


--트리거 이름으로 조회
SELECT Trigger_type, Triggering_event, Table_name
   FROM USER_TRIGGERS
   WHERE Trigger_name = 'TRIGGER_NAME';
   
SELECT Trigger_body
   FROM USER_TRIGGERS
   WHERE Trigger_name = 'TRIGGER_NAME';   

참고 : http://ooz.co.kr/33
원본 : https://479lgs.blog.me/220373814609
linked server 셋팅 및 사용

linked server 셋팅 및 사용

 - MSSQL 연결된 서버 생성


   EXEC sp_addlinkedserver
      @server = '[연결된 서버별칭]',
      @srvproduct = '',
      @provider = 'SQLOLEDB',
      @datasrc = '[서버 아이피]',
      @catalog = '[데이터 베이스명]'

 - MSSQL 연결계정 생성


   EXEC sp_addlinkedsrvlogin
      @rmtsrvname= '[연결된 서버별칭]',
      @useself= 'false',
      @rmtuser = '[(연결할 서버의)사용자 이름]',
      @rmtpassword = '[(연결할 서버의)사용자 암호]'

 - MSSQL 연결된 서버 확인

   SELECT FROM master.dbo.sysservers WHERE srvname = '[연결된 서버별칭]'

 - MSSQL 연결계정 확인


   SELECT FROM master.sys.linked_logins WHERE remote_name = '[사용자 이름]'

 - MSSQL 연결된 서버 이용방법

   연결된 서버를 등록한 후 사용하려면 [연결된 서버별칭].[데이터 베이스명].[데이터베이스 소유자명].[테이블명]
   형태로 호출하여 사용할 수 있습니다.
   SELECT 쿼리를 예로 들면 아래와 같습니다.


 - MSSQL 일반서버에 SELECT 쿼리시


​   SELECT [컬럼명] FROM [테이블명] WHERE [조건절]

 - MSSQL 연결된 서버에 SELECT 쿼리시


​   SELECT [컬럼명] FROM [연결된 서버별칭].[데이터 베이스명].[데이터베이스 소유자명].[테이블명] WHERE [조건절]

 - MSSQL 연결된 서버 삭제


   EXEC sp_dropserver
      @server = '[연결된 서버별칭]'

 - MSSQL 연결계정 삭제


   EXEC sp_droplinkedsrvlogin
      @rmtsrvname= '[연결된 서버별칭]',
      @locallogin = NULL

 [참고사항] 연결된 서버 삭제

   연결된 서버를 삭제하기 위해서는 sp_droplinkedsrvlogin 을 이용하여 연결계정을 먼저 삭제하고
   sp_dropserver 를 이용하여 연결된 서버를 삭제하여야 합니다.


 - 예제 1

   아래와 같은 정보를 갖는 연결된 서버를 생성하시오.


항목
상세 내용
연결된 서버별칭
linkedserver
서버 아이피
192.168.1.3
데이터 베이스명
test
사용자 이름
id
사용자 암호
password

 예제 1 쿼리

   EXEC sp_addlinkedserver
      @server = 'linkedserver',
      @srvproduct = '',
      @provider = 'SQLOLEDB',
      @datasrc = '192.168.1.3',
      @catalog = 'test'

   EXEC sp_addlinkedsrvlogin
      @rmtsrvname= 'linkedserver',
      @useself= 'false',
      @rmtuser = 'id',
      @rmtpassword = 'password'

 - 예제 2

   예제1에서 생성한 연결된 서버와 연결계정을 확인하시오.



 - 예제 2 연결된 서버 생성여부 확인

   SELECT FROM master.dbo.sysservers WHERE srvname = 'linkedserver'

srvid
srvstatus
srvname
1
1184
linkedserver

 - 예제 2 연결계정 생성여부 확인

   SELECT FROM master.sys.linked_logins WHERE remote_name = 'id'

server_id
local_principal_id
uses_self_credential
remote_name
modify_date
1
0
0
id
2015-03-22 16:11:41.637

srvid
srvstatus
srvname
1
1184
linkedserver

 - 예제 3

   예제1에서 생성한 연결된 서버를 이용하여 아래와 같은 테이블의 내용을 조회하시오.


 - 192.168.1.3 서버 test.dbo.성적 테이블
일련번호
이름
점수
1
홍길동
90
2
일지매
95
3
임꺽정
85

 - 예제 3 쿼리

   SELECT 일련번호이름점수 FROM linkedserver.test.dbo.성적

일련번호
이름
점수
1
홍길동
90
2
일지매
95
3
임꺽정
85

 - 예제 4

   예제1에서 생성한 연결된 서버와 연결계정을 삭제하시오.


 - 예제 4 쿼리


   EXEC sp_droplinkedsrvlogin
      @rmtsrvname= 'linkedserver',
      @locallogin = NULL

   EXEC sp_dropserver
      @server = 'linkedserver'

원본
https://m.blog.naver.com/PostView.nhn?blogId=diceworld&logNo=220311810558&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F