검색창에서 ~? 또는 ~* 으로 검색
그냥 ? 나 * 로 검색할 경우
?는 임의의 문자 1개, *는 임의의 문자 여러개로 인식하여 다른 검색 결과가 나오게 된다.
2016-07-13
2016-05-02
IE 문서 모드 지정하기
각 페이지마다 아래 메타 태그를 추가한다.
웹서버가 IIS라면 web.config에 아래 내용을 추가함으로써 메타 태그를 넣지 않아도 모든 페이지에 문서 모드를 지정할 수 있다.
아니면 HTTP 응답 헤더에 이름은 X-UA-Compatible, 값은 IE=5를 넣어주면 된다.
HTTP 응답 헤더에 값을 추가하면 web.config에 자동으로 위의 내용이 추가된다.
IE=5 이외에도
IE=EmulateIE7
IE=EmulateIE8
IE=EmulateIE9
IE=EmulateIE10
IE=7
IE=8
IE=9
IE=10
IE=edge
등 이 있다.
IE=7 등은 문서 모드를 해당 버전 표준모드로 하라는 것이고 EmulateIE7 등은 문서 모드를 해당 버전으로 하되 DOCTYPE에 따라 표준 모드, 퀵 모드가 선택되고 IE=edge는 문서 모드를 해당 브라우저가 지원하는 최신 버전의 표준모드로 하라는 뜻이다.
이런 식으로 여러 개를 지정해 줄 수도 있다고 한다.
이 경우 IE7, IE8에선 문서모드가 IE7으로 되고 IE9에선 IE9가 된다고 하는데 확인해보지는 않았다.
크롬 프레임이 설치될 때 적용되는 chrome=1 도 있다고 하는데
이렇게 하면 크롬 프레임이 있는 사용자는 크롬 프레임으로 렌더링 된다고 한다.
하지만 크롬 프레임은 2014년을 이후로 더 이상 개발하지 않는다고 하니 필요는 없을 거 같다.
더 이상 IE가 쓰이지 않는다면 chrome=1 뿐만 아니라 위의 모든 것이 다 필요없어지겠지만.
<meta http-equiv="X-UA-Compatible" content="IE=5" />
웹서버가 IIS라면 web.config에 아래 내용을 추가함으로써 메타 태그를 넣지 않아도 모든 페이지에 문서 모드를 지정할 수 있다.
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=5" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>아니면 HTTP 응답 헤더에 이름은 X-UA-Compatible, 값은 IE=5를 넣어주면 된다.
HTTP 응답 헤더에 값을 추가하면 web.config에 자동으로 위의 내용이 추가된다.
IE=5 이외에도
IE=EmulateIE7
IE=EmulateIE8
IE=EmulateIE9
IE=EmulateIE10
IE=7
IE=8
IE=9
IE=10
IE=edge
등 이 있다.
IE=7 등은 문서 모드를 해당 버전 표준모드로 하라는 것이고 EmulateIE7 등은 문서 모드를 해당 버전으로 하되 DOCTYPE에 따라 표준 모드, 퀵 모드가 선택되고 IE=edge는 문서 모드를 해당 브라우저가 지원하는 최신 버전의 표준모드로 하라는 뜻이다.
<meta http-equiv="X-UA-Compatible" content="IE=7; IE=9" />
이런 식으로 여러 개를 지정해 줄 수도 있다고 한다.
이 경우 IE7, IE8에선 문서모드가 IE7으로 되고 IE9에선 IE9가 된다고 하는데 확인해보지는 않았다.
크롬 프레임이 설치될 때 적용되는 chrome=1 도 있다고 하는데
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
이렇게 하면 크롬 프레임이 있는 사용자는 크롬 프레임으로 렌더링 된다고 한다.
하지만 크롬 프레임은 2014년을 이후로 더 이상 개발하지 않는다고 하니 필요는 없을 거 같다.
더 이상 IE가 쓰이지 않는다면 chrome=1 뿐만 아니라 위의 모든 것이 다 필요없어지겠지만.
2015-12-28
엑셀 한영 자동으로 바뀌는거 해제하기
엑셀에서 chk 를 입력해야하는데 계속 촤 로 자동 변환되어서 찾아봤다.
옵션 - 언어교정 - 자동고침옵션
여기서 한/영 자동 고침 체크 박스 해제
옵션 - 언어교정 - 자동고침옵션
여기서 한/영 자동 고침 체크 박스 해제
2015-11-26
비주얼 스튜디오로 웹사이트 디버깅시 일정 시간 지나면 디버깅 풀리는 현상 해결 방법
IIS에서 응용 프로그램 풀로 간 다음 해당 웹사이트가 사용하는 응용 프로그램 풀의 고급 설정에서 프로세스 모델 - Ping 사용을 False로 변경
아직 확실하게 검증되진 않았지만 설정 변경 후 디버깅이 자동으로 풀리진 않는거 같다.
아직 확실하게 검증되진 않았지만 설정 변경 후 디버깅이 자동으로 풀리진 않는거 같다.
2015-08-27
윈도우 10에서 Synaptics 외부 USB 포인팅 장치가 연결된 경우 내부 포인팅 장치를 비활성화합니다 설정이 재부팅시 리셋되는 문제 해결 방법
regedit.exe 실행
HKEY_LOCAL_MACHINE\SOFTWARE\Synaptics\SynTP\Install
DeleteUserSettingsOnUpgrade 값 0으로 수정
참조: http://answers.microsoft.com/en-us/windows/forum/windows_10-other_settings/windows-10-synaptics-touchpad-settings-lost-on/968ef7c5-0d90-4af1-b143-3f813cb1b37e
가끔 윈도우 업데이트 후 설정이 풀려서 다시해야 하는 경우가 생긴다.
HKEY_LOCAL_MACHINE\SOFTWARE\Synaptics\SynTP\Install
DeleteUserSettingsOnUpgrade 값 0으로 수정
참조: http://answers.microsoft.com/en-us/windows/forum/windows_10-other_settings/windows-10-synaptics-touchpad-settings-lost-on/968ef7c5-0d90-4af1-b143-3f813cb1b37e
가끔 윈도우 업데이트 후 설정이 풀려서 다시해야 하는 경우가 생긴다.
2015-07-31
Windows 10에서 Chrome 일본어 깨질 때 해결 방법
크롬 44.0.2403.125 기준.
주소창에 chrome://flags 치고
DirectWrite 사용 중지항목을 를 사용으로 바꾼 후 크롬 재시작
주소창에 chrome://flags 치고
DirectWrite 사용 중지항목을 를 사용으로 바꾼 후 크롬 재시작
2015-06-24
Visual Studio 2013, Visual Studio 2015 자동 중괄호 완료 끄기
비주얼 스튜디오 2013에서는
이와 같은 소스에서 중괄호를 넣을려고
를 입력하면 자동으로
이렇게 되버리기 때문에 }를 지워야해서 상당히 번거롭다.
}가 자동으로 안붙게 하기 위해선
옵션 - 텍스트 편집기 - 모든 언어 (또는 원하는 언어) - 자동 중괄호 완료(B) 체크 해제
하면 된다.
2015에서도 동일.
if (foo)
bar += bar;
이와 같은 소스에서 중괄호를 넣을려고
if (foo) {
bar += bar;
를 입력하면 자동으로
if (foo) {}
bar += bar;
이렇게 되버리기 때문에 }를 지워야해서 상당히 번거롭다.
}가 자동으로 안붙게 하기 위해선
옵션 - 텍스트 편집기 - 모든 언어 (또는 원하는 언어) - 자동 중괄호 완료(B) 체크 해제
하면 된다.
2015에서도 동일.
2015-06-10
자바스크립트 소수점 계산 시 값 오류 해결 방법
자바스크립트에서 소수점을 계산하다보면 값이 이상하게 나오는 것을 볼 수 있다. 간단한 예로 0.1 + 0.2의 경우 원하는 답은 0.3이지만 실제로는 0.30000000000000004이 나온다. 해결 방법은 toFixed() 함수를 사용하는 것. 사용 방법은 아래와 같다.
(0.1 + 0.2).toFixed(1)
이 경우 값은 0.3이 정상적으로 나온다. 파라메타로 넣은 1은 소수점 1번째까지 표시하라는 뜻으로 2자리를 표시하고 싶으면 2, 표시하고 싶지 않으면 아예 넣지 않으면 된다. 그냥 단순히 글자를 잘라버린게 아닌가 하는 의혹이 생긴 사람을 위해 한가지 더 예제를 준비하자면 6157000 * 9.133의 경우는 56231881가 맞는 결과지만 실제로 해보면 56231880.99999999가 나오는 것을 볼 수 있다. 이것을 (6157000 * 9.133).toFixed() 이렇게 하면 정상적으로 56231881가 나온다.
(0.1 + 0.2).toFixed(1)
이 경우 값은 0.3이 정상적으로 나온다. 파라메타로 넣은 1은 소수점 1번째까지 표시하라는 뜻으로 2자리를 표시하고 싶으면 2, 표시하고 싶지 않으면 아예 넣지 않으면 된다. 그냥 단순히 글자를 잘라버린게 아닌가 하는 의혹이 생긴 사람을 위해 한가지 더 예제를 준비하자면 6157000 * 9.133의 경우는 56231881가 맞는 결과지만 실제로 해보면 56231880.99999999가 나오는 것을 볼 수 있다. 이것을 (6157000 * 9.133).toFixed() 이렇게 하면 정상적으로 56231881가 나온다.
2015-05-21
MS SQL sa계정 비밀번호 변경하기
SQL Server Management 실행 후 윈도우 인증으로 접속 후 다음 쿼리 실행. 쿼리 실행 전에 암호는 변경할 암호로 변경해주자.
sp_password @old = null, @new = '암호', @loginame ='sa'
go
보다 자세한 내용은 여기에 적혀있다. https://support.microsoft.com/en-us/kb/322336/ko
sp_password @old = null, @new = '암호', @loginame ='sa'
go
보다 자세한 내용은 여기에 적혀있다. https://support.microsoft.com/en-us/kb/322336/ko
2015-05-20
Windows Server 2008 R2 TLS 1.2 활성화 하기
1. 레지스트리 실행 (실행 창에 regedit)
2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols로 이동
3. TLS 1.2라는 이름으로 새로운 키 생성
4. TLS 1.2 키 안에 Client라는 키와 Server라는 키 생성
5. Client 키 안에 DWORD (32비트) 값을 추가 이름을 DisabledByDefault, 값을 0, 단위는 16진수로 설정
6. Client 키 안에 DWORD (32비트) 값을 추가 이름을 Enabled, 값을 1, 단위는 16진수로 설정
7. Server 키 안에 DWORD (32비트) 값을 추가하고 이름을 DisabledByDefault, 값을 0, 단위는 16진수로 설정
8. Server 키 안에 DWORD (32비트) 값을 추가하고 이름을 Enabled, 값을 1, 단위는 16진수로 설정
9. 서버 재부팅
참조한 사이트는 여기다. https://support.quovadisglobal.com/KB/a433/how-to-enable-tls-12-on-windows-server-2008-r2.aspx
2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols로 이동
3. TLS 1.2라는 이름으로 새로운 키 생성
4. TLS 1.2 키 안에 Client라는 키와 Server라는 키 생성
5. Client 키 안에 DWORD (32비트) 값을 추가 이름을 DisabledByDefault, 값을 0, 단위는 16진수로 설정
6. Client 키 안에 DWORD (32비트) 값을 추가 이름을 Enabled, 값을 1, 단위는 16진수로 설정
7. Server 키 안에 DWORD (32비트) 값을 추가하고 이름을 DisabledByDefault, 값을 0, 단위는 16진수로 설정
8. Server 키 안에 DWORD (32비트) 값을 추가하고 이름을 Enabled, 값을 1, 단위는 16진수로 설정
9. 서버 재부팅
참조한 사이트는 여기다. https://support.quovadisglobal.com/KB/a433/how-to-enable-tls-12-on-windows-server-2008-r2.aspx
2015-05-18
Visual Studio에서 공백이 점으로 표시될 때 해결 방법
Ctrl + W 을 입력 후 바로 Ctrl + R 을 입력.
공백을 공백 문자로 표시하거나 비표시 할 때 쓰는 단축키라고 한다.
http://blogs.msdn.com/b/eva/archive/2009/03/24/visual-studio-tip-3.aspx
공백을 공백 문자로 표시하거나 비표시 할 때 쓰는 단축키라고 한다.
http://blogs.msdn.com/b/eva/archive/2009/03/24/visual-studio-tip-3.aspx
2015-04-16
Visual Studio 2013 로그인 시 메서드를 찾을 수 없습니다 'Void Newtonsoft.Json.Serialization.JsonDictionaryContract.set_PropertyNameResolver(System.Func`2)' 오류 해결 방법
Visual Studio Community 2013 에서 로그인을 해야하는데
메서드를 찾을 수 없습니다
'Void Newtonsoft.Json.Serialization.JsonDictionaryContract.set_PropertyNameResolver(System.Func`2)'
라는 오류가 뜨면서 로그인이 안되길래 구글링을 하면서 겨우 로그인 문제를 해결하였다.
해결 방법은 msdn에 있는 포럼에서 찾았다. https://social.msdn.microsoft.com/Forums/vstudio/en-US/6556acd3-5656-455b-a53a-ce95ed9209bc/vs2013-premium-check-for-an-updated-license-fails-method-not-found?forum=visualstudiogeneral
저기서 프리미엄 버전을 물어보는 거였지만 커뮤니티 버전에서도 잘 되었다.
저 내용을 토대로
1. 코드 플렉스 ( http://json.codeplex.com/ )에서 Json.NET 을 다운로드하고
2. 압축을 풀고
3. 명령 프롬포트에서 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools 폴더로 이동 후
4. gacutil.exe /if "C:\압축을 푼 폴더명\Bin\Net35\Newtonsoft.Json.dll" 를 실행 후 (당시 C드라이브에 압축을 풀었었다. 다른 드라이브에 풀었을 경우 거기에 맞춰주면 될 듯하다.)
5. 탐색기로 C:\Windows\Assembly 폴더에 Newtonsoft.Json 이 추가되었는지 확인하고
6. 탐색기로 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 폴더로 이동 후
7. devenv.exe.config 파일을 열고
8. <runtime><assemblyBinding></assemblyBinding></runtime> 사이에 다음과 내용을 추가한다.
참고로 당시 환경은 Visual Studio Community 2013 은 UPDATE 4 였으며 OS는 Windows 7 Ultimate K 였고 다운로드 받은 Json.NET 버전은 Json.NET 6.0 Release 8 였다. 그리고 저걸 하기 전에 이것저것 해보는 과정에서 gacutil.exe" /if "C:\압축을 푼 폴더명\Bin\Net45\Newtonsoft.Json.dll 도 실행했었는데 이것도 연관이 있을지는 모르겠다.
메서드를 찾을 수 없습니다
'Void Newtonsoft.Json.Serialization.JsonDictionaryContract.set_PropertyNameResolver(System.Func`2
라는 오류가 뜨면서 로그인이 안되길래 구글링을 하면서 겨우 로그인 문제를 해결하였다.
해결 방법은 msdn에 있는 포럼에서 찾았다. https://social.msdn.microsoft.com/Forums/vstudio/en-US/6556acd3-5656-455b-a53a-ce95ed9209bc/vs2013-premium-check-for-an-updated-license-fails-method-not-found?forum=visualstudiogeneral
저기서 프리미엄 버전을 물어보는 거였지만 커뮤니티 버전에서도 잘 되었다.
저 내용을 토대로
1. 코드 플렉스 ( http://json.codeplex.com/ )에서 Json.NET 을 다운로드하고
2. 압축을 풀고
3. 명령 프롬포트에서 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools 폴더로 이동 후
4. gacutil.exe /if "C:\압축을 푼 폴더명\Bin\Net35\Newtonsoft.Json.dll" 를 실행 후 (당시 C드라이브에 압축을 풀었었다. 다른 드라이브에 풀었을 경우 거기에 맞춰주면 될 듯하다.)
5. 탐색기로 C:\Windows\Assembly 폴더에 Newtonsoft.Json 이 추가되었는지 확인하고
6. 탐색기로 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 폴더로 이동 후
7. devenv.exe.config 파일을 열고
8. <runtime><assemblyBinding></assemblyBinding></runtime> 사이에 다음과 내용을 추가한다.
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="1.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>참고로 당시 환경은 Visual Studio Community 2013 은 UPDATE 4 였으며 OS는 Windows 7 Ultimate K 였고 다운로드 받은 Json.NET 버전은 Json.NET 6.0 Release 8 였다. 그리고 저걸 하기 전에 이것저것 해보는 과정에서 gacutil.exe" /if "C:\압축을 푼 폴더명\Bin\Net45\Newtonsoft.Json.dll 도 실행했었는데 이것도 연관이 있을지는 모르겠다.
2015-04-15
Visual Studio Community 2013 재설치 시 Setup Blocked 오류 해결 방법
Visual Studio Community 2013 을 제거 후 다시 설치할려고 하면
Visual Studio Professional 2013 is currently installed on this machine. (이하 생략)
라면서 설치가 되지 않는다.
해결 방법은 명령 프롬포트 (cmd)를 실행하고 언어팩 설치파일인 vs_langpack.exe 가 있는 위치까지 이동 후
vs_langpack.exe /uninstall
를 입력해서 언어팩을 제거해준다.
만약 언어팩(vs_langpack.exe)을 설치한 이후 설치파일을 삭제한 상태라 언어팩이 없는 상태라면 이 곳에서 다시 받을 수 있다. http://go.microsoft.com/?linkid=9832175
Visual Studio Professional 2013 is currently installed on this machine. (이하 생략)
라면서 설치가 되지 않는다.
해결 방법은 명령 프롬포트 (cmd)를 실행하고 언어팩 설치파일인 vs_langpack.exe 가 있는 위치까지 이동 후
vs_langpack.exe /uninstall
를 입력해서 언어팩을 제거해준다.
만약 언어팩(vs_langpack.exe)을 설치한 이후 설치파일을 삭제한 상태라 언어팩이 없는 상태라면 이 곳에서 다시 받을 수 있다. http://go.microsoft.com/?linkid=9832175
2015-02-25
아웃룩 2013 IMAP ost 파일 폴더 변경하기
마소에 ost 파일 폴더 바꾸는 방법은 나와있으나 실제로 따라해보면 Exchange만 가능하고 IMAP은 해당 되지 않는다. IMAP의 경우는 아래와 같이 해야한다. Exchange일 경우에는 이 문서처럼 하면 된다. 아마도. http://support.microsoft.com/kb/2752583/ko
1. 레지스트리 실행 (실행창에 regedit 입력)
2. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook 로 이동
3. 문자열 값 추가 ( 값 이름: ForcePSTPath / 값 데이터: ost 파일 저장할 폴더(예: D:\Outlook) )
저 값을 추가 후 IMAP 계정을 추가하면 ost 파일이 ForcePSTPath로 지정한 폴더에 저장된다. 저 값을 추가할 시 Exchange의 경우는 어떻게 되는지 미확인.
1. 레지스트리 실행 (실행창에 regedit 입력)
2. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook 로 이동
3. 문자열 값 추가 ( 값 이름: ForcePSTPath / 값 데이터: ost 파일 저장할 폴더(예: D:\Outlook) )
저 값을 추가 후 IMAP 계정을 추가하면 ost 파일이 ForcePSTPath로 지정한 폴더에 저장된다. 저 값을 추가할 시 Exchange의 경우는 어떻게 되는지 미확인.
아웃룩 2013 프로필 로드 중에서 진행 안될 때 해결 방법
1. 아웃룩을 안전모드로 실행
- 안전모드로 실행하려면 아웃룩을 Ctrl 키를 누른 채로 실행하거나 실행 창에서 outlook /safe 로 실행하면 된다.
2. 파일 - 옵션
3. Outlook 옵션 창이 뜨면 고급 선택
4. 스크롤을 내려서 표시 부분의 하드웨어 그래픽 가속 사용안함(G) 체크 후 확인
만약 이 과정을 거쳤는데도 여전히 안된다면 안전모드로 다시 실행 후 옵션에서 하드웨어 그래픽 가속 사용안함이 체크되어 있는지 확인 후 체크가 안되어있다면 옵션이 저장이 되는지 확인하고 옵션이 저장되지 않는다면 레지스트리에 직접 값을 넣어야한다.
1. 실행 창으로 regedit 실행
2. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics 로 이동
3. DWORD 추가 (값 이름: DisableHardwareAcceleration / 값 데이터: 1 )
- 안전모드로 실행하려면 아웃룩을 Ctrl 키를 누른 채로 실행하거나 실행 창에서 outlook /safe 로 실행하면 된다.
2. 파일 - 옵션
3. Outlook 옵션 창이 뜨면 고급 선택
4. 스크롤을 내려서 표시 부분의 하드웨어 그래픽 가속 사용안함(G) 체크 후 확인
만약 이 과정을 거쳤는데도 여전히 안된다면 안전모드로 다시 실행 후 옵션에서 하드웨어 그래픽 가속 사용안함이 체크되어 있는지 확인 후 체크가 안되어있다면 옵션이 저장이 되는지 확인하고 옵션이 저장되지 않는다면 레지스트리에 직접 값을 넣어야한다.
1. 실행 창으로 regedit 실행
2. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics 로 이동
3. DWORD 추가 (값 이름: DisableHardwareAcceleration / 값 데이터: 1 )
2014-12-15
MS SQL 암호화 된 저장 프로시저 복호화하기
우선 관리자 전용 연결(DAC)로 연결한다.
1. SQL Server Management Studio 실행
2. 파일 - 새로 만들기 - 데이터베이스 엔진 쿼리
3. 로그인 할 서버이름 앞에 admin: 을 붙이고 로그인 (예: (local) → admin:(local) / . → admin:. / 127.0.0.1 → admin:127.0.0.1 )
4. 아래 쿼리를 복사해서 넣고 윗 부분의 USE문과 @ObjectOwnerOrSchema, @ObjectName 값을 수정 후 실행
프로시저 내용이 길 경우 PRINT(@ContentOfDecryptedObject) 로 하면 내용이 짤린다. 위처럼 NTEXT로 변환해주면 안짤리고 잘 나오나 NTEXT로 변환해준 것 역시 내용이 더 길어지면 역시 짤린다. PRINT로 안하고 SELECT로 하면 짤리진 않는 것 같다. SELECT로 할 경우 보기 좋게 하기 위한 추가 작업이 필요하긴 하지만. 반복문 돌리면서 @ContentOfDecryptedObject를 특정 길이만큼씩만 짤라서 PRINT 하는 것도 생각해봐야 할듯.
1. SQL Server Management Studio 실행
2. 파일 - 새로 만들기 - 데이터베이스 엔진 쿼리
3. 로그인 할 서버이름 앞에 admin: 을 붙이고 로그인 (예: (local) → admin:(local) / . → admin:. / 127.0.0.1 → admin:127.0.0.1 )
4. 아래 쿼리를 복사해서 넣고 윗 부분의 USE문과 @ObjectOwnerOrSchema, @ObjectName 값을 수정 후 실행
USE DB -- DB명
DECLARE @ObjectOwnerOrSchema NVARCHAR(128)
DECLARE @ObjectName NVARCHAR(128)
SET @ObjectOwnerOrSchema = 'dbo' -- 스키마
SET @ObjectName = 'Stored_Procedure' -- 프로시저
DECLARE @i INT
DECLARE @ObjectDataLength INT
DECLARE @ContentOfEncryptedObject NVARCHAR(MAX)
DECLARE @ContentOfDecryptedObject NVARCHAR(MAX)
DECLARE @ContentOfFakeObject NVARCHAR(MAX)
DECLARE @ContentOfFakeEncryptedObject NVARCHAR(MAX)
DECLARE @ObjectType NVARCHAR(128)
DECLARE @ObjectID INT
SET NOCOUNT ON
SET @ObjectID = OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']')
-- Check that the provided object exists in the database.
IF @ObjectID IS NULL
BEGIN
RAISERROR('The object name or schema provided does not exist in the database', 16, 1)
RETURN
END
-- Check that the provided object is encrypted.
IF NOT EXISTS(SELECT TOP 1 * FROM syscomments WHERE id = @ObjectID AND encrypted = 1)
BEGIN
RAISERROR('The object provided exists however it is not encrypted. Aborting.', 16, 1)
RETURN
END
-- Determine the type of the object
IF OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']', 'PROCEDURE') IS NOT NULL
SET @ObjectType = 'PROCEDURE'
ELSE
IF OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']', 'TRIGGER') IS NOT NULL
SET @ObjectType = 'TRIGGER'
ELSE
IF OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']', 'VIEW') IS NOT NULL
SET @ObjectType = 'VIEW'
ELSE
SET @ObjectType = 'FUNCTION'
-- Get the binary representation of the object- syscomments no longer holds
-- the content of encrypted object.
SELECT TOP 1 @ContentOfEncryptedObject = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']')
AND valclass = 1 and subobjid = 1
SET @ObjectDataLength = DATALENGTH(@ContentOfEncryptedObject)/2
-- We need to alter the existing object and make it into a dummy object
-- in order to decrypt its content. This is done in a transaction
-- (which is later rolled back) to ensure that all changes have a minimal
-- impact on the database.
SET @ContentOfFakeObject = N'ALTER ' + @ObjectType + N' [' + @ObjectOwnerOrSchema + N'].[' + @ObjectName + N'] WITH ENCRYPTION AS'
WHILE DATALENGTH(@ContentOfFakeObject)/2 < @ObjectDataLength
BEGIN
IF DATALENGTH(@ContentOfFakeObject)/2 + 4000 < @ObjectDataLength
SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', 4000)
ELSE
SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', @ObjectDataLength - (DATALENGTH(@ContentOfFakeObject)/2))
END
-- Since we need to alter the object in order to decrypt it, this is done
-- in a transaction
SET XACT_ABORT OFF
BEGIN TRAN
EXEC(@ContentOfFakeObject)
IF @@ERROR <> 0
ROLLBACK TRAN
-- Get the encrypted content of the new "fake" object.
SELECT TOP 1 @ContentOfFakeEncryptedObject = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']')
AND valclass = 1 and subobjid = 1
IF @@TRANCOUNT > 0
ROLLBACK TRAN
-- Generate a CREATE script for the dummy object text.
SET @ContentOfFakeObject = N'CREATE ' + @ObjectType + N' [' + @ObjectOwnerOrSchema + N'].[' + @ObjectName + N'] WITH ENCRYPTION AS'
WHILE DATALENGTH(@ContentOfFakeObject)/2 < @ObjectDataLength
BEGIN
IF DATALENGTH(@ContentOfFakeObject)/2 + 4000 < @ObjectDataLength
SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', 4000)
ELSE
SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', @ObjectDataLength - (DATALENGTH(@ContentOfFakeObject)/2))
END
SET @i = 1
--Fill the variable that holds the decrypted data with a filler character
SET @ContentOfDecryptedObject = N''
WHILE DATALENGTH(@ContentOfDecryptedObject)/2 < @ObjectDataLength
BEGIN
IF DATALENGTH(@ContentOfDecryptedObject)/2 + 4000 < @ObjectDataLength
SET @ContentOfDecryptedObject = @ContentOfDecryptedObject + REPLICATE(N'A', 4000)
ELSE
SET @ContentOfDecryptedObject = @ContentOfDecryptedObject + REPLICATE(N'A', @ObjectDataLength - (DATALENGTH(@ContentOfDecryptedObject)/2))
END
WHILE @i <= @ObjectDataLength
BEGIN
--xor real & fake & fake encrypted
SET @ContentOfDecryptedObject = STUFF(@ContentOfDecryptedObject, @i, 1,
NCHAR(
UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1)) ^
(
UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1)) ^
UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1))
)))
SET @i = @i + 1
END
-- PRINT the content of the decrypted object
PRINT(CAST(@ContentOfDecryptedObject AS NTEXT))
프로시저 내용이 길 경우 PRINT(@ContentOfDecryptedObject) 로 하면 내용이 짤린다. 위처럼 NTEXT로 변환해주면 안짤리고 잘 나오나 NTEXT로 변환해준 것 역시 내용이 더 길어지면 역시 짤린다. PRINT로 안하고 SELECT로 하면 짤리진 않는 것 같다. SELECT로 할 경우 보기 좋게 하기 위한 추가 작업이 필요하긴 하지만. 반복문 돌리면서 @ContentOfDecryptedObject를 특정 길이만큼씩만 짤라서 PRINT 하는 것도 생각해봐야 할듯.
2014-12-08
서피스의 타이핑 커버 펑션키(F1 ~ F12)를 Fn키 누르지 않고 입력하는 법
서피스 프로3를 사용하는데 타이핑 커버를 부착해서 써보니 펑션키(F1 ~ F12)가 입력되지 않고 볼륨키 같은 기능들이 작동을 한다. F1 ~ F12는 fn키를 누르면서 눌러야 작동을 하길래 뭔가 거꾸로 된거 같다는 느낌에 찾아보니 이 문서에서 답을 찾을 수 있었다.
Fn + Caps Lock
이 키를 눌러주면 그 이후로 fn 키를 누르지 않고도 F1 ~ F12를 입력 할 수 수 있게 되며 볼륨키 같은 것은 fn 키를 눌러야 입력이 되게 된다.
Fn + Caps Lock
이 키를 눌러주면 그 이후로 fn 키를 누르지 않고도 F1 ~ F12를 입력 할 수 수 있게 되며 볼륨키 같은 것은 fn 키를 눌러야 입력이 되게 된다.
2014-11-25
Windows에서 SSL 사용안하는 WebDAV에 연결이 안될 때
Windows에서 SSL을 사용안하는 WebDAV는 기본적으로 연결이 되지 않는다. 연결을 하기 위해선 레지스트리에서 값을 수정해주어야한다. Windows 7, Windows 8.1 에서 확인하였고 그 이외에는 미확인.
1. 윈도우키 + R
2. regedit 입력 후 확인
3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WebClient\Parameters
4. BasicAuthLevel 값 2로 수정
5. 재부팅
BasicAuthLevel의 기본 값은 1인데 이 문서에 따르면 각 값이 뜻하는 것은 다음과 같다.
0 - 기본 인증이 사용되지 않음
1 - SSL 연결에 대해서만 기본 인증이 사용됨
2 - SSL 및 SSL 이외의 연결 모두에 기본 인증이 사용됨
1. 윈도우키 + R
2. regedit 입력 후 확인
3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WebClient\Parameters
4. BasicAuthLevel 값 2로 수정
5. 재부팅
BasicAuthLevel의 기본 값은 1인데 이 문서에 따르면 각 값이 뜻하는 것은 다음과 같다.
0 - 기본 인증이 사용되지 않음
1 - SSL 연결에 대해서만 기본 인증이 사용됨
2 - SSL 및 SSL 이외의 연결 모두에 기본 인증이 사용됨
Windows에서 WebDAV에 50메가 이상 파일 업로드 하는 방법
Windows 7, Windows 8.1에서 적용가능하며 그 이외에는 미확인
1. 윈도우키 + R
2. regedit 입력 후 확인
3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WebClient\Parameters
4. FileSizeLimitInBytes 값 수정
5. 재부팅
FileSizeLimitInBytes 값은 0xFFFFFFFF(4294967295) 즉 약 4기가까지 가능.
1. 윈도우키 + R
2. regedit 입력 후 확인
3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WebClient\Parameters
4. FileSizeLimitInBytes 값 수정
5. 재부팅
FileSizeLimitInBytes 값은 0xFFFFFFFF(4294967295) 즉 약 4기가까지 가능.
Windows 7에서 WebDAV 폴더, 파일 목록 불러오는 속도 느린 현상 수정 방법
1. Internet Explorer 실행
2. 도구 - 옵션
3. 연결 탭
4. LAN 설정
5. 자동 구성에서 자동으로 설정 검색 체크박스 해제
6. 확인
7. 적용 또는 확인
Windows 8.1에선 굳이 설정하지 않아도 속도가 빠르다.
2. 도구 - 옵션
3. 연결 탭
4. LAN 설정
5. 자동 구성에서 자동으로 설정 검색 체크박스 해제
6. 확인
7. 적용 또는 확인
Windows 8.1에선 굳이 설정하지 않아도 속도가 빠르다.
피드 구독하기:
글 (Atom)