2012/07/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/07/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/07/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'


가장 많이 본 글