2012년 12월 21일 금요일

SQL Server Web Edition 라이선스 제한 조건

Microsoft 에서는 SPLA 라이선스를 통해서 공급 가능한 SQL Server 버젼으로 Web Edition 을 제공합니다. Standard 버젼에 비해 매우 저렴하며, 미러링/복제등 DB서버간 연동 기능등이 아닌 일반적인 쿼리 기반인 경우 문제가 없을 정도로 일반적으로 많이 사용되지 않은 불필요한 기능을 뺀 제품 입니다. 하지만,.! 이 제품 사용시 사용 조건이 너무 까다로워서 실제로 많은 사용은 어려울것으로 보입니다.

사용조건 :
본 소프트웨어는 공동 및 인터넷 액세스를 지원하는 용도로만 사용됩니다.
- 웹 페이지
- 웹 사이트
- 웹 응용 프로그램
- 웹 서비스
비즈니스 응용 프로그램 계열(예: CRM, ERP 및 기타 프로그램)을 지원하는 데는 사용되지 않습니다.

위와 같은 문서상 내용으로는 웹서버 연동 DB 로 사용에는 별다른 문제가 없을것으로 해석되지만, 한국 MS 의 입장에서는 그게 아닌것 같습니다.

한국 MS 의 해석은,
- 웹사이트를 운영에만 사용하되, 가급적 로그인 기반이 아닌 단순한 페이지 용도로만 사용하기를 권장.
- 웹사이트이지만, 사이트 형식이 로그인 기반으로 상당 가능하도록 되어 있는 경우 라이센스 위반.
- Web Edition 을 사용하기전에,. 사전에 개발된 웹사이트를 MS 에 심사받아서 허가된 경우에만 가능.
위와 같은 추가적인 해석 조건을 달았습니다.

확실하지는 않지만, 소비자 입장에서 볼때에는 Web Edition 은 말그대로 별 쓸모도 없는 상품이며, 이를 미끼로 Standard 버젼을 사용할수 밖에 없도록 하여 매출 증대를 목적으로 하는 전략 같습니다.

최근의 소프트웨어는 오픈소스가 대세이며, 패키지 판매 자체가 아니라 그 서비스를 기반으로 수익을 가져가는 모델인데 Microsoft 에서는 여전히 기존 방식을 고수할 뿐만 아니라 더 강화를 하고 있는 모습니다.

이럴 경우, 소비자에게, 엄청난 소프트웨어 비용 투자 보다는 오픈소스쪽으로 선회할 가능성을 MS 에서 오히려 더 열어주고 더욱이 방향 제시까지 해주는 것 같은 느낌마져 들 정도입니다. Microsoft 에서 오픈소스 대비 총소유 비용에 대해서 강점을 얘기하지만 실제에서는 MS 얘기와는 다르게 호스팅 시장에서는 대부분 상당 낮습니다.

아무튼 Microsoft 의 라이선스 정책은 많은 아쉬움이 있습니다.

 


2012년 12월 6일 목요일

Adaptec Storage Manager, Raid 구성시 64KB 오류

Adaptec Storage Manager 로 장착된 디스크를 Raid 구성을 하려고 할때 아래와 같은 메시지가 출력되는 경우가 있음. 주로 1TB 이상 대용량 디스크를 장착하는 경우인데,  이때는 해당 Raid Controller 모델의 펌웨어를 업데이트 해보고 그래도 동일 증상이면 Adaptec Storage Manager 툴 버젼을 업그레이드 해보는 것이 좋음.

Adaptec 5805  ASM for Windows
http://www.adaptec.com/en-us/speed/raid/storage_manager/asm_windows_x86_v6_50_18579_exe.htm

 

[Details: The specified free space must be aligned to 64KB and have a size that is a multiple of 64KB. RC: -5 API: 0x93 IOCTL: 0x0]

 

 

 


2012년 11월 21일 수요일

SQL, 암호화된 데이터 검색

암호화(대칭키)된 컬럼 데이터에 대해서 like 검색은 안되며, equal 검색을 해야 함. 2가지 방법이 있는듯.

 

1. 암호화된 컬럼을 복호화 하여 조건절 비교

ssn varbinary(256);
select * from table
where convert( varchar(256), decryptbykey(ssn) ) = '111-11-1111';

2. 암호화된 데이터에 대한 Hash 값을 별도의 컬럼에 저장후 Hash 값 비교

ssn varbinary(256);
ssnhash varchar(67);
select * from table
where ssnhash = convert( varchar(67), HashBytes('SHA2_256', '111-11-1111'));

 

 


2012년 11월 20일 화요일

SQL Server TDE 예제

마스터키에는 2가지가 있는데,. 인스턴스 수준의 키와, Database 수준의 키가 있으며, 서비스 마스터키는 SQL Server 설치시에 생성이 됨. Database 수준의 마스터키는 사용자 DB를 생성후 해당 DB에서 생성.

Master Key 의 존재 여부는 select * from sys.symmetric_keys 를 통해서 확인 또는 Management Studio 에서 해당 DB의 보안에서 대칭 키 와 인증서 항목에서 확인이 가능 함.

SELECT * from sys.certificates
SELECT * FROM sys.dm_database_encryption_keys;

 

SERVICE MASTER KEY

1. Service Master Key Backup
BACKUP SERVICE MASTER KEY TO FILE = 'c:\mssql_service_master.key'
ENCRYPTION BY PASSWORD = '3dH85Hhk003GHk2597gheij4';  -- key 암호화용 패스워드

2. Service Master Key Restore
RESTORE SERVICE MASTER KEY     FROM FILE = 'c:\mssql_service_master.key' 
DECRYPTION BY PASSWORD = '3dH85Hhk003GHk2597gheij4'  FORCE ;
-> 1.2, System DB 마이그레이션/복구 등외, 일반적으로 활용할 일이 거의 없음.

 3. Service Master Key Regenerate
ALTER SERVICE MASTER KEY REGENERATE;
-> DPAPI 는 키를 SQL 서비스 실행 계정으로 부터 전달 받기에,
      SQL 서비스 계정을 변경했거나, Master DB 를 이전한 경우에 해당.
      http://technet.microsoft.com/en-us/library/ms187788.aspx

 

DATABASE MASTER KEY

1. Create Master Key
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'sfj5300osdVdgwdfkli7';

2. Backup Master key
USE master;
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'sfj5300osdVdgwdfkli7';
BACKUP MASTER KEY TO FILE = 'c:\DBmaster.key'    
ENCRYPTION BY PASSWORD = 'sd092735k%jnadsg';  -- DB key 암호화용 패스워드. 암호정책적용.

3. Restore Master key
USE master;
RESTORE MASTER KEY     FROM FILE = 'c:\DBmaster.key'    
DECRYPTION BY PASSWORD = 'sd092735k%jnadsg'    -- DB key 암호화시 사용한 패스워드(복호화)
ENCRYPTION BY PASSWORD = '259087M#MyjkFkjhywiyedfgGDFD'; -- DB key 암호화 패스워드

4. Drop Master Key
USE master;
DROP MASTER KEY;

5. Alter Master Key
USE master;
ALTER MASTER KEY REGENERATE
WITH ENCRYPTION BY PASSWORD = 'dsjdkflJ435907NnmM#sX003'; -- DB 마스터키 재생성. 키 백업필요.

 

CERTIFICATE

1.  Crate Certificates
USE master;
CREATE CERTIFICATE testDBcert
ENCRYPTION BY PASSWORD = 'Gvbd2439587y'    -- private key 암호화용 패스워드
WITH SUBJECT = 'testDB Company',    EXPIRY_DATE = '20201231'; 

2. Backup Certificates [매우중요]
USE master;
BACKUP CERTIFICATE testDBcert  TO FILE = 'D:\SQL DATA\testDB.cer'    
WITH PRIVATE KEY (
-- DECRYPTION BY PASSWORD = 'Gvbd2439587y',  -- private key 암호화용 패스워드
FILE = 'D:\SQL DATA\testDB.pvk' ,    
ENCRYPTION BY PASSWORD = 'f34535sdD9d' ); 
--> 개인키와 같이 백업,  다른 서버에 DB 이전/복원시 필요.

3. Restore Certificates
USE master;
CREATE CERTIFICATE testDBcert  FROM FILE = 'D:\SQL DATA\testDB.cer'     
WITH PRIVATE KEY (
FILE = 'D:\SQL DATA\testDB.pvk',   
ENCRYPTION BY PASSWORD = 'Gvbd2439587y',
DECRYPTION BY PASSWORD = 'f34535sdD9d');

4. Drop Certificates
USE master;
DROP CERTIFICATE testDBcert;

 

DATABASE ENCRYPTION

1. Create Database Encryption Key (DEK)
USE testDB; 
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE  testDBcert;

[인증서미백업시] 경고: 데이터베이스 암호화 키를 암호화하는 데 사용된 인증서가 백업되지 않았습니다. 인증서와 인증서에 연결된 개인 키를 즉시 백업해야 합니다. 인증서를 사용할 수 없게 되거나 다른 서버에서 데이터베이스를 복원하거나 연결해야 할 경우 인증서와 개인 키의 백업본이 있어야 합니다. 그렇지 않으면 데이터베이스를 열 수 없습니다.

2. Enable TDE
USE testDB;
ALTER DATABASE testDB SET ENCRYPTION ON

3. Disable TDE
USE testDB;
ALTER DATABASE testDB SET ENCRYPTION OFF;
-- 암호화 해제가 완료될때 까지 기다림

4. Delete Database Encryption Key (DEK)
USE testDB; 
DROP DATABASE ENCRYPTION KEY;

 

ps,
다른 시스템에, 사용자 DB 복원이나 Attach 하는 경우, 복원 시스템에는 인스턴스 Master Key 가 설치한후(안되어 있는 경우) 해당 DB를 암호화에 사용한 인증서 복원후, DB복원이나 Attach를 진행 하면 됨.

개인정보보호법에서는, 블록 암호화는 TDE 로 만족되며, 패스워드는 SHA-256 이상의 일방향 암호 알고리즘을 사용해야 하므로 응용프로그램에서는 해당 알고리즘을 이용하여 문자열 암호화는 문제가 없을것이고, SQL 쿼리문에서 직접 암호화를 하는 경우 SQL Server 2012 에서 지원하는 HashBytes('SHA2_256', 'string'); 함수를 이용하면 됨.

그외 주민등록번호나 계좌번호, 신용카드 번호, 여권 번호, 바이오 정보, 운전면허 번호등 복호화가 필요한 경우 인증서를 이용한 대칭키 encryptbykey/descryptbykey  함수를 활용 (대칭키 활용시, MasterKey 및 인증서는 해당 DB에서 생성) .

 


2012년 11월 12일 월요일

jQuery, CheckBox, DropDownList/ComboBox

DropDownList/ComboBox


$("#ComboBox").val();
$("#ComboBox option:selected").text();
$("#ComboBox").change(function() { /*  */ });
$("#ComboBox").val(1);

CheckBox

if ($("#IsCharge").attr("checked")) { };
$("#IsCharge").attr('checked', true);
$('input[name=foo]').attr('checked', true);
$("input[type='checkbox']:checked").each(    
      function() {      
            /*  */   
      }
);

 

 


SQL 2012 SP1 설치후, SQL_Tools_ANS 관련 이벤트

OS : Windows Server 2012 Standard
DB : SQL Server 2012 Enterprise

 

MsiInstaller / 1004
제품 '{A7037EB2-F953-4B12-B843-195F4D988DA1}', 기능 'SQL_Tools_ANS', 구성 요소 '{0CECE655-2A0F-4593-AF4B-EFC31D622982}'을(를) 검색하지 못했습니다. 리소스 ''이(가) 존재하지 않습니다.

MsiInstaller / 1001
구성 요소 '{6E985C15-8B6D-413D-B456-4F624D9C11C2}'을(를) 요청하는 동안 제품 '{A7037EB2-F953-4B12-B843-195F4D988DA1}'의 기능 SQL_Tools_ANS을(를) 검색하지 못했습니다.

 

Feedback 이 이미 제출되어 있는 상태로, SP1 Installer 의 구성요소 검사 버그로 추정됨.

본제품 설치시 해당 구성요소를 미설치 했는데 sp1 에서는 설치 여부 검사 과정에 오류가 있는듯하며, 현재 Windows Installer 에서 지속적으로 설치 재시도를 함. 해당 내용에 대해서 Microsoft 에서 코멘트가 있기 전 까지 SP1 설치 중단을 하는 것이 좋아 보임.

 서버 운영에 영향을 주는 정도라면, 백업이 있는 경우 복원하거나 또는 임시 조치로 Installer 관련 프로세스를 강제 종료 처리를 하면 됨. (msiexec.exe, ngen.exe, ngentask.exe 등)

 

업데이트 ==> Microsoft® SQL Server® 2012 서비스 팩 1(SP1), CU1,2 fix 포함. (배포일자 2013-01-04)
http://www.microsoft.com/ko-kr/download/details.aspx?id=35575 (sp1)
http://www.microsoft.com/ko-kr/download/details.aspx?id=36215 (update for sp1)

 


2012년 10월 17일 수요일

c#, XML to HTML

xml 데이터를 파싱해서 필요한 부분만 뽑아서 웹에 출력하려고 했지만,. 서버에서 뽑아지는 xml 데이터 형식이 다양해서 일일히 스타일 만들기도 귀찮고 해서 그냥 xml 전체를 html 로 만들어서 보자는 목적으로 만든 코드. html 의 집합 목록 태그이므로 Tree 형식으로 보기는 그런데로..^^

XmlDocument doc = new XmlDocument();
doc.LoadXml(System.IO.File.ReadAllText("backup.xml", Encoding.UTF8));
sb.Append("<div id=\"xmlData\">");
foreach(XmlNode xn in doc.ChildNodes) {
    getChildNode(xn);
}
sb.Append("</div>");


static void getChildNode(XmlNode xn) {
    if (xn.NodeType == XmlNodeType.Text | xn.NodeType == XmlNodeType.CDATA) {
        sb.AppendLine(xn.Value);
        string x = xn.Value;
        if (x.StartsWith("<")) {
            XmlDocument xd = new XmlDocument();
            xd.LoadXml(x);
            foreach(XmlNode xn2 in xd.ChildNodes) {
                getChildNode(xn2);
            }
        }
    } else {
        sb.AppendLine(xn.Name);
        if (xn.Attributes != null) {
            if (xn.Attributes.Count > 0) {
                sb.AppendLine("<ul>");
                foreach(XmlAttribute xa in xn.Attributes) {
                    sb.AppendLine("<li>" + xa.Name + " : " + xa.Value + "</li>");
                }
                sb.AppendLine("</ul>");
            }
        }
    }
    // 하위노드 재귀
    sb.AppendLine("<ul>");
    foreach(XmlNode child in xn.ChildNodes) {
        sb.AppendLine("<li>");
        getChildNode(child);
        sb.AppendLine("</li>");
    }
    sb.AppendLine("</ul>");
}




2012년 9월 19일 수요일

WebKnight 에서 Accept-Ranges 문제

환경 : IIS 7.5 / WebKnight 2.4

WebKnight 가 적용된 사이트에서 .flv 동영상 파일 출력시 Internet Explorer 은 최초 flv 출력후 이후 해당 페이지 재이동시 출력이 되지 않으며,  Chrome  최초 출력후 재이동시 출력되지 않으나 다시 요청시 출력,. FireFox 는 모두 정상적으로 출력 됨. 물론,. WebKnight 로딩을 해제하면 Explorer 도 출력에 전혀 문제가 없음.

Explorer 가 요청시에, 웹서버는 206(Partial Content) 코드를 반환.

IIS 에서 응답시에 Chrome / FireFfox 는 아래와 같이 Accept-Ranges:bytes  응답을 줘야 하지만,. Explorer 에 대해서는 해당 헤더값을 주지 않음.

Accept-Ranges:bytes
Content-Length:62247162
Content-Type:video/x-flv
Date:Wed, 19 Sep 2012 05:23:55 GMT
Etag:"f8adee757e95cd1:0"
Last-Modified:Tue, 18 Sep 2012 09:17:44 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET

 

WebKnight  내부적으로 처리에 문제가 있는 것으로 추정은 되지만,. 확실하게 WebKnight 의 어떤 부분에서 문제가 되는지는 알기 어려운 상태로,.  임시 해결 방법으론 IIS 에서 강제로 Accept-Ranges 헤더를 출력하고록 헤더 응답값에 추가로 해결.

 

 


2012년 9월 18일 화요일

VSS / ID: 12292

볼륨 섀도 복사본 서비스 오류: CLSID {463948d2-035d-4d1d-9bfc-473fece07dab}(으)로 섀도 복사본 공급자 COM 클래스를 만드는 동안 오류가 발생했습니다[0x80070005, 액세스가 거부되었습니다. ]. 작업: 하드웨어 공급자 인스턴스를 만드는 중 이 공급자의 호출 가능 인터페이스 가져오기 이 컨텍스트를 지원하는 모든 공급자의 인터페이스 나열 섀도 복사본 쿼리 컨텍스트: 공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5} 공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5} 클래스 ID: {463948d2-035d-4d1d-9bfc-473fece07dab} 스냅숏 컨텍스트: -1 스냅숏 컨텍스트: -1 실행 컨텍스트: Coordinator

작업:     하드웨어 공급자 인스턴스를 만드는 중
     이 공급자의 호출 가능 인터페이스 가져오기
     이 컨텍스트를 지원하는 모든 공급자의 인터페이스 나열
     섀도 복사본 쿼리
    컨텍스트:     공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5}
     공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5}
     클래스 ID: {463948d2-035d-4d1d-9bfc-473fece07dab}
     스냅숏 컨텍스트: -1
     스냅숏 컨텍스트: -1
     실행 컨텍스트: Coordinator  

* 공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5}        
       유형: [3] VSS_PROV_HARDWARE        
       이름: Microsoft iSCSI Target VSS Hardware Provider        
       버전: 6.2.9200.16384        
       CLSID: {463948d2-035d-4d1d-9bfc-473fece07dab}



VSS / ID: 13

볼륨 섀도 복사본 서비스 정보: COM 서버(CLSID: {463948d2-035d-4d1d-9bfc-473fece07dab}, 이름: HWPRV)를 시작할 수 없습니다. [0x80070005, 액세스가 거부되었습니다. ] 작업: 하드웨어 공급자 인스턴스를 만드는 중 이 공급자의 호출 가능 인터페이스 가져오기 이 컨텍스트를 지원하는 모든 공급자의 인터페이스 나열 섀도 복사본 쿼리 컨텍스트: 공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5} 공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5} 클래스 ID: {463948d2-035d-4d1d-9bfc-473fece07dab} 스냅숏 컨텍스트: -1 스냅숏 컨텍스트: -1 실행 컨텍스트: Coordinator


작업:     하드웨어 공급자 인스턴스를 만드는 중
     이 공급자의 호출 가능 인터페이스 가져오기
     이 컨텍스트를 지원하는 모든 공급자의 인터페이스 나열
     섀도 복사본 쿼리
    컨텍스트:     공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5}
     공급자 ID: {3f900f90-00e9-440e-873a-96ca5eb079e5}
     클래스 ID: {463948d2-035d-4d1d-9bfc-473fece07dab}
     스냅숏 컨텍스트: -1
     스냅숏 컨텍스트: -1
     실행 컨텍스트: Coordinator  



2012년 8월 28일 화요일

c#, Security 이벤트로그에서 로그온 뽑기

다음 예는,.  서버에 로그온한 내역을 뽑아 달라는 요청이 있어서 급조한 내용이며, Message  문자열에서 정규편식을 통해서 로그온 이름과, IP주소(원격로그인) 와 로그온 시간을 뽑는 것.
c# 이기는 하지만,. PowerShell 로도 가능.^^

이벤트로그의 Message 문자열에서 필요한 것만 정규편식으로 파싱.
- Windows 2000
4624 (성공) , 4648(시도)
계정 이름:  UpdatusUser
원본 네트워크 주소: xxx.xxx.xxx.xxx
- Windows 2008 / R2
528(성공), 552 (시도)
사용자 이름: yeonpil
원본 네트워크 주소: xxx.xxx.xxx.xxx
로그온 유형:   5

운영체제 종류에 따라서 이벤트 코드가 다르므로 운영체제 구분 코드로 조건절 추가.


Version _ver = Environment.OSVersion.Version;
string _osVer = _ver.Major.ToString() + "." + _ver.Minor.ToString(); // 5.2 , 6.1


ManagementObjectSearcher searcher 
= new ManagementObjectSearcher("SELECT Message, TimeGenerated FROM Win32_NTLogEvent
        WHERE Logfile = 'Security' AND(" + _evtCode + ")");
        string _Message; string _TimeGenerated; 
        string _Account = ""; 
        string _IpAddress = ""; 
        foreach(ManagementObject obj in searcher.Get()) {
            _Message = obj["Message"].ToString();
            _TimeGenerated = obj["TimeGenerated"].ToString();
            Regex regex1 = new Regex(_AccountString + ":(.+)\r");
            Regex regex2 = new Regex("원본 네트워크 주소:(.+)\r");
            MatchCollection match1 = regex1.Matches(_Message);
            if (match1.Count > 0) {
                _Account = match1[1].Groups[1].Value.Trim();
            }
            Match match2 = regex2.Match(_Message);
            if (match2.Success) {
                _IpAddress = match2.Groups[1].Value.Trim();
            }
            Console.WriteLine(_Account + ":" + _IpAddress +
                "\t" + wmiDateConvert(_TimeGenerated));
        }

아래와 같은 코드도 사용 가능



        foreach(System.Diagnostics.EventLogEntry entry in _evt.Entries) {
            string _EventCode = Convert.ToString(entry.InstanceId & 0xFFFF);
            if (_EventCode == "552") {}
        }


참 쉽죠잉~~~ ? 헐.

닷넷프레임워크 3.5 / 4.0 인 경우에는 System.Diagnostics.Eventing.Reader  클래스를 이용해서도 가능

참고 http://phejndorf.wordpress.com/2011/03/31/using-c-and-linq-to-read-a-windows-eventlog-file-evtx/




2012년 8월 27일 월요일

c#, NETWORKLIST.NetworkListManager 예

Vista 이후에, 네트워크 연결 관리자에서 현재 연결된 활성 네트워크 조회 코드 예제.
서버 모니터링에 필요해서... 어렵지 않아요~~^^

msdn. http://msdn.microsoft.com/en-us/library/windows/desktop/aa370803(v=vs.85).aspx


NETWORKLIST.NetworkListManager _nlManager = new NETWORKLIST.NetworkListManager();

foreach(NETWORKLIST.INetwork _network 
  in _nlManager.GetNetworks(NETWORKLIST.NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_CONNECTED)) {
    Console.WriteLine(_network.GetName());
    Console.WriteLine(_network.GetCategory());

    foreach(NETWORKLIST.INetworkConnection c in _network.GetNetworkConnections()) {
        var k = from _nis in NetworkInterface.GetAllNetworkInterfaces() 
              where _nis.Id == c.GetAdapterId().ToString("B").ToUpper() select _nis;

        if (k != null & k.Count() > 0) {
            NetworkInterface _ni = k.FirstOrDefault();
            Console.WriteLine(_ni.Id);
            Console.WriteLine(_ni.Name);
        }
    }
}


네트워크
NLM_NETWORK_CATEGORY_PUBLIC
{465ac774-d5f4-4a3f-9351-51440256a6bb}
{465AC774-D5F4-4A3F-9351-51440256A6BB}
로컬 영역 연결 3


2012년 8월 14일 화요일

maxJsonLength JavaScriptSerializer 예외

ASP.NET 사이트에서 json 데이터 요청을 ASP.NET 에서 처리를 하는 경우, 요청에 대한 응답값이 너무 큰 경우  "Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property." 와 같은 예외가 발생할수 있음.

maxJsonLength  의 기본값은, 2097152 characters. 102400 (100k).

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.maxjsonlength.aspx

web.config 에서 허용 값을 더 늘려줄수 있음.
<configuration>
       <system.web.extensions>
          <scripting>
              <webServices>
                  <jsonSerialization maxJsonLength="50000000"/>
              </webServices>
          </scripting>
      </system.web.extensions>
   </configuration>   




Delete Symantec Shared\VirusDefs Subfolders

시만텍 안티바이러스가 설치되어 있는 경우, 아래 폴더에 바이러스 정의가 저장 됨.
C:\Program Files\Common Files\Symantec Shared\VirusDefs

그런데,. 정의 파일이 지속적으로  쌓여서(몇 G 됨) 디스크 공간이 부족할때에
오래된 정의 파일을 삭제 하려면 해당 서비스를 중지후에 삭제 하면 됨.
삭제 대상은, 날짜별 폴더  및 .tmp 확장자 파일만 삭제해야 함.

 

[Symantec Endpoint Protection] 서비스 중지를 서비스 관리자 GUI 에서 disable 상태인 경우에는

C:\Program Files\Symantec\Symantec Endpoint Protection>Smc.exe -stop
C:\Program Files\Common Files\Symantec Shared\VirusDefs  하위 정의파일 폴더 삭제
C:\Program Files\Symantec\Symantec Endpoint Protection>Smc.exe -start

 


2012년 8월 10일 금요일

HP P2000 G3 iSCSI Storage

스토리지 장비 최초 셋업을 하기 위해서 스토리지 Management Tool 에 접근해야 함. 가장 쉽게 할수 있는 방법은, IP로 WEB UI 에 접근해서 설정하는 방법으로, 엔클로져의 관리 모드용 랜으로 연결하여 접근.

스토리지의 컨트롤러의 기본 설정값은 아래와 같음.
 - Controller A : 10.0.0.2 / 255.255.255.0
 - Controller B : 10.0.0.3 / 255.255.255.0
 - Default Gateway : 10.0.0.1

 

 

위와 같은 랜 환경(동일 대역)을 갖춘 PC를 통해서 WEB UI 에 접근이 가능.
(물론, Console(CLI) 모드를 통해서도 설정도 가능하며, 위 컨트롤러의 IP 변경도 가능)

만약 콘솔(CLI) 모드로 연결하려는 경우 아래와 같은 설정값으로 연결 가능 함.
(가능하면, 콘솔 모드보다는 WEB UI 모드가 쉽고 편하므로 WEB 모드 권장)
  - Connector : COM3
  - Baud rate : 115,200
  - Data bits : 8
  - Parity : None
  - Stop bits : 1
  - Flow control : None

   CLI 에서 IP 설정
   # set network-parameters ip 192.168.0.10 netmask 255.255.255.0 gateway 192.168.0.1 controller a
   # set network-parameters ip 192.168.0.11 netmask 255.255.255.0 gateway 192.168.0.1 controller b
   # show network-parameters
   # restart mc both

위와 같은 방법으로 연결이 완료되면 기본 로그인 manage / !manage 를 통해서 로그인 완료.

 


 

 

 

 



p2000-network-config.png
p2000-21.png
p2000-1.png
p2000-3.png

2012년 8월 8일 수요일

PHP for IIS 8 (update)

설치파일 : http://windows.php.net/download/#php-5.4 에서 VC9 x86 Non Thread Safe 버젼
(가능하면, 그냥 zip 파일 설치를 권장 함)

 

설치후, 

1. 모듈 매핑에 php 추가

  • Request path: *.php
  • Module: FastCgiModule  (IIS 모듈에서 CGI 설치되어 있어야 함)
  • Executable: "C:[Path to your PHP installation]php-cgi.exe"  (설치경로)
  • Name: PHP via FastCGI
  • Method : GET / POST / HEAD

2. PHP 설치 경로에 ApplicationPoolIdentity 계정의 실행권한 설정 필요.   
     특정 풀 계정 아니면, 그냥 IIS_USRS 를 줘도 크게 문제 없음.

3. FastCGI 에 등록 및 설정에서 "파일의 변경 내용 모니터" 에서 php.ini 파일 지정     
     php.ini 설정 변경시 바로 적용이 가능하도록.

4. php.ini 설정

  • Set fastcgi.impersonate = 1
  • Set cgi.fix_pathinfo=1
  • Set cgi.force_redirect = 0
  • extension_dir = "./ext"
  • extension=php_mssql.dll (mssql 연동시, SQL Native PHP Driver 사용시 모듈 별도 추가
  • extension=php_mysql.dll (mysql 연동시)
  • date.timezone = Asia/Seoul

 


서버 관련 무료 서적 pdf(en)

Understanding Microsoft Virtualization R2 Solutions
http://ligman.me/N1Bx4H

Introducing Windows Server 2012
http://ligman.me/N1CgTz

Introducing Microsoft SQL Server 2012
http://ligman.me/H8d9P3

Microsoft SQL Server AlwaysOn Solutions Guide for
High Availability and Disaster Recovery

http://ligman.me/N1I2o4

SQL Server 2012 Upgrade Technical Guide
http://ligman.me/N1Jo27

Backup and Restore of SQL Server Databases
http://ligman.me/N1HEpM

Master Data Services Capacity Guidelines
http://ligman.me/N1HX3Q

 


Tomcat JSP, java.lang.ClassNotFoundException

java.lang.ClassNotFoundException: org.apache.jsp.main_jsp
    at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:186)

org.apache.jasper.JasperException: /main.jsp(8,0) The value for the useBean class attribute xxx is invalid.

 

환경 : 기존 Resin 기반으로 개발된 Jsp 사이트를 Tomcat 기반으로 마이그레이션시 오류 발생

오류 :  Tomcat 에서 Jsp 코드내 선언된 Class 를 찾지 못함
          <jsp:useBean id="bbean" scope="request" class="xxx"  />

해결 :  Resin 에서는 WEB-INF\classes 내 클래스를 클래스 이름으로만으로도 참조가 가능하지만, Tomcat 에서는 패키지 이름까지 정확하게 지정을 해줘야 함. (Tomcat 5.5 기준)

 


2012년 7월 27일 금요일

SQL Server 2008 R2 서비스 팩 2 다운로드

Microsoft® SQL Server® 2008 R2 서비스 팩 2 다운로드가 지금 바로 가능! 7월 26일자로 배포 시작.  

  SQL Server® 2008 R2 서비스 팩 2
  http://www.microsoft.com/ko-kr/download/details.aspx?id=30437

  Microsoft® SQL Server® 2008 R2 SP2 - Express Edition
http://www.microsoft.com/ko-kr/download/details.aspx?id=30438

  Microsoft® SQL Server® 2008 R2 SP2 기능 팩
  http://www.microsoft.com/ko-kr/download/details.aspx?id=30440



2012년 7월 26일 목요일

IIS 8, SNI(서버 이름 표시) 지원

기존에 IIS 에서는 기본으로 SSL 에 대한 호스트 기반으로 작동하지 않고 포트 기반으로 작동 함.  바인딩 자체가 0.0.0.0:443 이렇게 되어서, 기본 SSL 포트를 통해서 여러 SSL 도메인을 사용할수가 없었음. 하지만, IIS 8로 업그레이드 되면서 SNI 기능을 지원하게 됨. (위키피디아 SNI) (but,  클라이언트중에 Windows XP  및 몇몇 웹브라우져는 지원하지 않음)

 

 호스트 이름:포트 : www.comodossl.co.kr:443

 인증서 해시 : 81605a6d1e4b6ab7fc5d6119b26c4ca55d80f65d 응용 프로그램 ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}

 인증서 저장소 이름: WebHosting

 클라이언트 인증서 해지 확인 : Enabled
 캐시된 클라이언트 인증서만 사용하여 해지 확인 : Disabled
 사용 확인 : Enabled
 해지 유효 시간 : 0
 URL 검색 제한 시간 : 0
 Ctl 식별자 : (null)
 Ctl 저장소 이름 : (null)
 DS 매퍼 사용 : Disabled
 클라이언트 인증서 협상 : Disabled

 물론, 기존 IIS 6 등에서도 아래와 같은 방법으로 동일 SSL 포트가 사용 가능하지만,.

 cscript.exe adsutil.vbs set /w3svc/<replace with your site id>/SecureBindings ":443:www.domain1.com" 위의 경우 WildcardSSL 또는 MultiDomainSSL 인 경우에만 적용이 가능

iis8-ssl-sni.png

2012년 7월 23일 월요일

SQL CLR 을 통한 공유 폴더 파일 복사 예

SQL Server CLR 은 닷넷 프레임워크 런타임을 통합하여  SQL Server 의 확장성을 매우 높혀주는 방식으로,. 자세한 사항은 http://msdn.microsoft.com/ko-kr/library/ms131102 를 참조. 아래 예제 코드는 SQL Server 에서 공유 폴더의  파일 정보를 가져오는 사용자 정의 함수 간단 코드.


using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Security.Principal;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Permissions;

public partial class UserDefinedFunctions {
    [DllImport("advapi32.dll", SetLastError = true)]
[PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")] 

public static extern bool LogonUser(string lpszUsername,
        string lpszDomain,
        string lpszPassword,
        int dwLogonType,
        int dwLogonProvider,
        ref IntPtr phToken);

    [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)] 
public static SqlString yeonpilTestFunction(SqlString LogonName,
        SqlString DomainName,
        SqlString LogonPassword,
        SqlString LocalPathFile,
        SqlString RemoteUNCFile) {
        // ALTER DATABASE CLRTest SET TRUSTWORTHY ON 
        IntPtr token = IntPtr.Zero;
        bool valid = LogonUser((string) LogonName, (string) DomainName,
            (string) LogonPassword, 2, 0, ref token);

        if (valid) {
            using(WindowsImpersonationContext context = WindowsIdentity.Impersonate(token)) {
                File.Copy((string) LocalPathFile, (string) RemoteUNCFile, true);
                context.Undo();
            }
        }

        return new SqlString("Success");
    }
};


간단하며,. 공유 폴더에 접근 하려면 원격지 서버에 대한 인증을 해야 하는데, 레거시 API  참조. 인증을 통과한 후에는 일반적인 닷넷 코드를 그대로 사용 하면 되며 SQL 에서 사용자 정의 함수의 데이터 형에 맞게 처리만 해주면 완료.

 배포는,  VS.NET 의 배포를 하게 되면 원격지 SQL 서버에 배포가 자동으로 됨. 하지만 자동으로 배포시에는 SQL 서버에서 권한 문제로 설정값 편집이 되지 않으므로, SQL 쿼리 스트립트를 생성하여 서버에서 실행하여 등록하는 것이 좋음.

CREATE FUNCTION [dbo].[yeonpilFunction](@LogonName [nvarchar](4000), @DomainName [nvarchar](4000), @LogonPassword [nvarchar](4000), @LocalPathFile [nvarchar](4000), @RemoteUNCFile [nvarchar](4000)) RETURNS [nvarchar](4000) WITH EXECUTE AS CALLER AS EXTERNAL NAME [SqlServerCLRTest].[UserDefinedFunctions].[yeonpilFunction]
 GO

EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFile', @value=N'Function1.cs' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'FUNCTION',@level1name=N'yeonpilFunction'
 GO

 EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFileLine', @value=N'17' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'FUNCTION',@level1name=N'yeonpilFunction'
 GO

위와 같은 함수를 생성후에 아래와 같은 방식으로 사용자 쿼리문에서 호출 하여 사용

exec yeonpilFunction  'id','domain', 'pwd','d:\test11.txt','\\원격지서버\d$\saved.txt'


Symantec Endpoint Protection(SEP) Manager Password Reset

C:\Program Files (x86)\Symantec\Symantec Endpoint Protection Manager\Tools 의 resetpass.bat 배치 파일을 실행하면 초기화 됨.
@echo off setlocalset CATALINA_HOME=%CD%\..\tomcat set JAVA_HOME=%CD%\..\jdk"%JAVA_HOME%\bin\java.exe" -Xms64m -Xmx256m -XX:MinHeapFreeRatio=30 -XX:MaxHeapFreeRatio=40 -classpath "%CD%\..\bin\inst.jar;%CD%\..\bin\inst-res.jar" -Dcatalina.home="%CATALINA_HOME%" -Djava.library.path="%CATALINA_HOME%\bin" com.sygate.scm.tools.DatabaseFrame setpassword admin admin endlocal
 

2012년 7월 20일 금요일

WindowsUpdateClient / ID: 20

로그 이름: System 원본: Microsoft-Windows-WindowsUpdateClient 이벤트 ID: 20 작업 범주: Windows Update 에이전트 수준: 오류 키워드: 실패,설치 사용자: SYSTEM 설명: 설치 실패: 0x8024d00e 오류 때문에 Windows에서 다음 업데이트를 설치하지 못했습니다. Windows Update Core. 0x8024d00e => WU_E_SETUP_REBOOTREQUIRED  리붓팅 필요 Windows Update Agent setup package requires a reboot to complete installation.

2012년 7월 19일 목요일

원격 데스크톱 클라이언트 6.0 네트워크 수준 인증 오류

환경 : Windows Xp Professional SP3 메시지: 사용자 컴퓨터에서 지원하지 않는 네트워크 수준 인증이 원격 컴퓨터에 필요합니다.

 원격 데스크톱 클라이언트 6.0 으로, 터미널 서버에 접근하는 경우 네트워크 인증 호환성 문제로 위와 같은 메시지가 출력될수 있음. (네트워크 수준 인증, http://technet.microsoft.com/ko-kr/library/cc732713(v=ws.10))

 Windows Server 2008 / R2 에서는 2가지 옵션별 선택이 가능하지만, Windows Server 2012 에서는 허용시에, "네트워크 수준 인증을 사용하여 원격 데스크톱을 실행하는 컴퓨터에서만 연결 허용" 이 기본값으로 설정 됨. 물론 허용 설정하면 예전 인증 방식을 통해서 가능함. 그렇지만 권장 사항은 아님.



 Windows XP SP3 에서는 기본값으로 Credssp 보안 공급자가 활성화 되어 있지 않으므로 직접 허용 설정을 해줘야 함.(레지스트 수정 필요)

 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "Authentication Packages"=hex(7):6d,00,73,00,76,00,31,00,5f,00,30,00,00,00,00,00 kerberos msv1_0 schannel wdigest tspkg (추가)

 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders] "SecurityProviders"="msapsspc.dll, schannel.dll, digest.dll, msnsspc.dll, credssp.dll (추가)"

windows-server-2012rc-remote-desktop.png



WindowsUpdateFailure 0x800B0001 - Windows Error Reporting

응용프로그램 이벤트 로그

로그 이름: Application 원본: Windows Error Reporting 이벤트 ID: 1001 설명: 오류 버킷 , 유형 0 이벤트 이름: WindowsUpdateFailure 응답: 사용할 수 없음 Cab ID: 0 문제 서명: P1: 7.6.7600.256 P2: 800b0001 P3: D67661EB-2423-451D-BF5D-13199E37DF28 P4: Scan P5: 101 P6: Managed

WindowsUpdate.log 로그

Setup Checking for agent SelfUpdate Setup Client version: Core: 7.6.7600.256 Aux: 7.6.7600.256 Misc Validating signature for C:\Windows\SoftwareDistribution\SelfUpdate\wuident.cab: Misc Microsoft signed: Yes Misc WARNING: Digital Signatures on file C:\Windows\SoftwareDistribution\SelfUpdate\wuident.cab are not trusted: Error 0x800b0001 Setup WARNING: SelfUpdate check failed to download package information, error = 0x800B0001 Setup FATAL: SelfUpdate check failed, err = 0x800B0001 Agent * WARNING: Skipping scan, self-update check returned 0x800B0001 Agent * WARNING: Exit code = 0x800B0001

위와 같은 오류가 발생하는 원인은 업데이트 파일의 서명 검증 오류.

 0x800B0001  => TRUST_E_PROVIDER_UNKNOWN 원인은,  보안 문제로 인증서 체인 서명자를 Microosft 에서 업데이트 했고, 기존 서명자를 파기 했기 때문.

  http://technet.microsoft.com/en-us/security/advisory/2718704

 기존 : Microsoft Code Signing PCA 변경:  Microsoft Update Signing CA 1.1 오류는 Windows Update Service 를 통해서 패치 관리가 되는 클라이언트로,  WSUS 를 최신(Fix) 버젼으로 업데이트를 진행하면 됨.

다운로드 http://support.microsoft.com/kb/2720211


2012년 7월 18일 수요일

c#, DateTime to UnixTime / UnixTime to DateTime Convert

public DateTime UnixTimeToDateTime(double value) {
    DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
    return unixEpoch.AddSeconds(value);
}
public double DateTimeToUnixTime(DateTime value) {
    TimeSpan span = (value - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime());
    return (double) span.TotalSeconds;
}


MySQL(Connector/Net) 을 이용한 Parameter Query 예

using MySql.Data;
using MySql.Data.MySqlClient;
using(MySqlConnection Con 
= new MySqlConnection("server=yeonpil.org;database=x;user id=x;password=x"))
 {
        MySqlCommand Cmd = new MySqlCommand();
        Cmd.Connection = Con;
        if (Con.State == ConnectionState.Closed) {
            Con.Open();
        }
        Cmd.CommandText = "INSERT INTO Table1 (name) values (?name)";
        Cmd.Parameters.Add("?name", MySqlDbType.VarChar, 50).Value = nameValue; 
// m.Parameters.AddWithValue("@param_val_1", val1);       
// m.Parameters.Add(new MySqlParameter("param1", val1)); 
        Cmd.ExecuteNonQuery(); 
     Cmd.Dispose();
  }

2012년 7월 17일 화요일

SyndicationFeed 클래스를 이용한 RSS Feed 읽기

RSS 파서가 많이 있기는 하지만, 프레임워크 내장 클래스 사용 using

System.ServiceModel.Syndication;


var reader = XmlReader.Create(_feedURL);
var feed = System.ServiceModel.Syndication.SyndicationFeed.Load(reader);
if (null == feed) return;
foreach(SyndicationItem item in feed.Items)
 {
    Console.WriteLine(item.Links.FirstOrDefault().Uri.ToString());
    Console.WriteLine(item.Title.Text);
    Console.WriteLine(item.PublishDate.ToString());
}


클래스 상세는 http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx


2012년 7월 11일 수요일

c#, html 에서 img src 경로 가져오기


public void getImgs(string _html) {
    Regex rxImages = new Regex("<img.+?src=[\"'](.+?)[\"'].+?>", 
                               RegexOptions.IgnoreCase & RegexOptions.IgnorePatternWhitespace);
    MatchCollection mc = rxImages.Matches(_html);
    foreach(Match m in mc) {
        Console.WriteLine(m.Groups[0].Value);
        Console.WriteLine(m.Groups[1].Value);
    }
}
result: 
0: < img src = "http://yeonpil.org/소녀시대.jpg" / > 
  1: http: //yeonpil.org/소녀시대.jpg


c#, xmlrpc 워드프레스 글 쓰기 예제 (wp.newPost)

using CookComputing.XmlRpc;
public class XmlRpc
{
    public struct blogInfo
    {
        public string post_title;
        public string post_content;
        public DateTime post_date;
        public string post_status;
        public string comment_status;
    }

    // http://codex.wordpress.org/XML-RPC_WordPress_API/Posts
    [XmlRpcUrl(http://yeonpil.org/xmlrpc.php)]
    public interface IWP
    {
        [XmlRpcMethod("wp.newPost")]
        string NewPage(int blogId, string strUserName, 
                                 string strPassword, blogInfo content);
    }
}
public class Wordpress : XmlRpc
{
    public void WritePost(string _title, string _content, 
                                         DateTime _date, string _status)
    {
        blogInfo _post = default(blogInfo);
        _post.post_title = _title;
        _post.post_content = _content;
        _post.post_date= _date;
        _post.post_status = _status;
        _post.comment_status = "open";

        IWP proxy = (IWP)XmlRpcProxyGen.Create(typeof(IWP));
        string result = proxy.NewPage(blogid, "id", "pwd", _post);

        Console.WriteLine("postID: " + result);
    }
}
 



워드프레스 API, wp.newPost(글쓰기)

Parameters
  • int blog_id
  • string username
  • string password
  • struct content
    • string post_type
    • string post_status
    • string post_title
    • int post_author
    • string post_excerpt
    • string post_content
    • datetime post_date_gmt | post_date
    • string post_format
    • string post_password
    • string comment_status
    • string ping_status
    • bool sticky
    • int post_thumbnail
    • int post_parent
    • array custom_fields
      • struct
        • string key
        • string value
    • struct terms: Taxonomy names as keys, array of term IDs as values.
    • struct terms_names: Taxonomy names as keys, array of term names as values.
    • struct enclosure
      • string url
      • int length
      • string type
    • any other fields supported by wp_insert_post

Return Values

  • string post_id

Errors

  • 401
    • If the user does not have the edit_posts cap for this post type.
    • If user does not have permission to create post of the specified post_status.
    • If post_author is different than the user's ID and the user does not have the edit_others_posts cap for this post type.
    • If sticky=true and user does not have permission to make the post sticky.
    • If a taxonomy in terms or terms_names is not supported by this post type.
    • If terms or terms_names is set but user does not have assign_terms cap.
    • If an ambiguous term name is used in terms_names.
  • 403
    • If invalid post_type is specified.
    • If an invalid term ID is specified in terms.
  • 404
    • If no author with that post_author ID exists.
    • If no attachment with that post_thumbnail ID exists.
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts http://codex.wordpress.org/Function_Reference/wp_insert_post  

2012년 6월 13일 수요일

Ftdisk / ID: 45

시스템이 크래시 덤프 드라이버를 성공적으로 로드하지 못했습니다.

자세한 정보는 http://go.microsoft.com/fwlink/events.asp에 있는 도움말 및 지원 센터를 참조하십시오.

2012년 6월 2일 토요일

Register 32bit Windows Script Component on 64bit

x64 에서는 스크립트 컴포넌트가 등록될때 기본으로 x64 모드로 등록 됨. 그래서, 작업자 프로세스에서 어떤 이유 때문에 x32 호환 모드로 작동하게 되면 오류가 발생.

 C:\Windows\SysWOW64\regsvr32.exe /i:"usercomponent.wsc" "C:\WINDOWS\SYSWOW64\scrobj.dll" /s

2012년 5월 31일 목요일

COM / ID: 4830

사용할 수 있는 메모리가 매우 부족한 상태에서 컴퓨터가 실행되고 있습니다. 시스템을 올바로 작동하기 위해 구성 요소 활성화를 거부했습니다. 이 문제가 계속되면 메모리를 더 설치하거나 페이징 파일 크기를 늘리십시오. 메모리 통계는 다음과 같습니다.

dwMemoryLoad = 64
ullTotalPhys = 0x07ff4f000
ullAvailPhys = 0x02d85a000
ullTotalPageFile = 0x176969000
ullAvailPageFile = 0x012ac5000
ullTotalVirtual = 0x07ffe0000
ullAvailVirtual = 0x07d807000

프로세스 이름: dllhost.exe
Comsvcs.dll 파일 버전: ENU 2001.12.4720.3959 shp


2012년 5월 24일 목요일

WinTarget / ID: 10

Microsoft iSCSI Software Target 서비스가 네트워크 주소 10.0.1.152, 포트 3260에 바인딩하지 못했습니다. 작업에 실패했습니다. 오류 코드: 10049. 이 포트를 사용하고 있는 다른 응용 프로그램 없는지 확인하십시오.

2012년 5월 11일 금요일

MSiSCSI / ID: 121

인터넷 저장소 이름 서버(iSNS) 클라이언트 기능에 허용된 방화벽 예외를 사용할 수 없습니다. iSNS 클라이언트 기능을 사용할 수 없습니다.

iScsiPrt / ID: 5

초기자 포털을 설정하지 못했습니다. 덤프 데이터에 오류 상태가 표시됩니다.

2012년 5월 10일 목요일

WHEA-Logger / ID: 19

수정된 하드웨어 오류가 발생했습니다.

보고 주체 구성 요소: 프로세서 코어
오류 원본: 수정된 컴퓨터 검사
오류 유형: 버스/상호 연결 오류
프로세서 ID: 5

SQLSERVERAGENT / ID: 324

OpenSQLServerInstanceRegKey:GetRegKeyAccessMask failed (reason: 2).
SQL Server 2012 (11.0.2100.60)

2012년 5월 6일 일요일

MPIO for iSCSI on Windows Server 2008 R2

# DSM 추가 (기본 Microsoft DSM) 

http://technet.microsoft.com/en-us/library/ee619743(WS.10).aspx

mpclaim -r -i -d "MSFT2005iSCSIBusType_0x9" 

(벤더 장치별로 제공됨. Intel, HP등)   

# 디스크 정보 보기 

mpclaim -s -d 

MPIO 디스크
     시스템 디스크
      LB 정책
        DSM 이름
 -----------------------------------------------------------
 MPIO Disk0
   디스크 1
        RRWS
         Microsoft DSM

# Microsoft iSCSI Initiator 에서 멀티 세션 추가 

세션 추가시 마다,. [다중 경로 사용] 을 체크하고 [고급] 에서  로컬 IP 와 Target IP(포털) 을 다르게 지정하여 네트워크 경로를 서로 다르게 가져 감. => 장치에서 보면 동일한 디스크 이름, LUN에, Target 이 다른 목록을 볼수 있음.

  mpclaim -s -d 1 

MPIO Disk1: 02 경로, 하위 집합의 라운드 로빈, 암시적만 DSM 제어: Microsoft DSM SN: 60CFF00144457D26AA44F1000 지원되는 부하 분산 정책: FOO RRWS LQD WP LB 경로 ID
            상태
                 SCSI 주소
           가중치 ------------------------------------------------------------------
 0000000077010001 활성/최적화되지 않음
        001|000|001|000
   0 TPG_State : 활성/최적화되지 않음
       , TPG_Id: 1, : 5 0000000077010000 활성/최적화됨
            001|000|000|000   0 * TPG_State : 활성/최적화됨
           , TPG_Id: 0, : 1


2012년 3월 14일 수요일

MSSQLSERVER / ID: 10982

리소스 관리자 분류자 사용자 정의 함수를 실행하지 못했습니다. 자세한 내용은 세션 ID 229의 SQL Server 오류 로그에서 이전 오류를 확인하십시오. 분류자 경과 시간: 3055밀리초.

MSSQLSERVER / ID: 1204

SQL Server 데이터베이스 엔진 인스턴스에서 지금 LOCK 리소스를 가져올 수 없습니다. 활성 사용자가 적을 때 문을 다시 실행하십시오. 데이터베이스 관리자에게 이 인스턴스의 잠금 및 메모리 구성이나 장기 실행 트랜잭션을 확인하도록 요청하십시오.

2019년 12월 MS 취약점 패치 주요 사항

서버 관련 주요 중요 취약점 CVE-2019-1470 | Hyper-V 정보 유출 취약성 https://portal.msrc.microsoft.com/ko-KR/security-guidance/advisory/CVE-2019-1470 CVE...