|
오라클의 암호화와 복호화
–오라클의 암호화와 복호화
–오라클의 암호화는 DBMS_OBFUSCATION_TOOLKIT를 이용
–이 패키지에는 4개의 프로시저가 있다.
–프로시저는 VARCHAR2 타입 및 RAW 타입을 암호/복호화 지원. 다른 타입은 지원되지 않으므로 NUMBER 타입은 TO_CHAR를 이용해야 한다.
–DBMS_OBFUSCATION_TOOLKIT 패키지는 기본적으로는 사용할 수 없는 상태이다. 설치시에는 준비 되지 않은 패키지이기 때문이다. 아래 파일을 직접 실행해야 패키지가 생성되고, 준비가 된다.
D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\dbmsobtk.sql
D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\prvtobtk.plb
–SQLPLUS에서 SYS계정으로 로그인한 후 실행합니다.
SQL> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\dbmsobtk.sql
–>패키지 생성
SQL> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\prvtobtk.plb
–>패키지 본문 생성
–SYS: DBMS_OBFUSCATION_TOOLKIT 패키지를 사용할 수 있는 권한을 SCOTT 사용자에게 부여
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO scott;
–SYS: DBMS_OBFUSCATION_TOOLKIT 패키지를 사용할 수 있는 권한을 모든 사용자에게 부여
GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO PUBLIC;
———————————–
–암호화 및 복호화용 패키지 작성
(사용할 곳에서 패키지 생성) 나의 경우는 scott에 했었음.
–선언
CREATE OR REPLACE PACKAGE CryptIT
IS
FUNCTION encrypt(str VARCHAR2, HASH VARCHAR2)
RETURN VARCHAR2;
FUNCTION decrypt(str VARCHAR2, HASH VARCHAR2)
RETURN VARCHAR2;
END CryptIT;
–몸체
CREATE OR REPLACE PACKAGE BODY CryptIT
IS
s VARCHAR2(2000);
FUNCTION encrypt(str VARCHAR2, HASH VARCHAR2) — 암호화
RETURN VARCHAR2
IS
p NUMBER := ((FLOOR(LENGTH(str)/8+0.9))*8);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(
input_string => RPAD(str,p)
,key_string => RPAD(HASH,8,’#’)
,encrypted_string => s
);
RETURN s;
END;
FUNCTION decrypt(str VARCHAR2, HASH VARCHAR2) — 복호화
RETURN VARCHAR2
IS
BEGIN
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
input_string => str
,key_string => RPAD(HASH,8,’#’)
,decrypted_string => s
);
RETURN TRIM(s);
END;
END CryptIT;
CREATE TABLE abc(id NUMBER, pass VARCHAR2(20));
INSERT INTO abc (id, pass) VALUES (1, CryptIT.encrypt(‘12345′,’test’));
COMMIT;
SELECT id, pass FROM abc;
how to config context in Tomcat
[출처] 톰캣(Tomcat)에서 컨텍스트를 설정하는 방법 (Tomcat 6.0에서 테스트)
[주의사항] 톰캣 설정파일에서 한글을 사용하지 말자. (주석안의 한글고 사용하면 톰캣이 실행안된다.)
TOMCAT_HOME : 톰캣 설치 디렉터리
1. 도메인으로 분류하는 방법
TOMCAT_HOME\conf\server.xml 을 열면 기본적으로 하나의 Service 엘리먼트가 있고
그 하위에 Engine 엘리먼트가, 또 그 하위에 아래와 같은 하나의 Host 엘리먼트가 있다.
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
아래와 같이 추가하려는 도메인으로 Host 엘리먼트를 하나 더 추가한다.
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
<Host name=”www.testdomain.com” appBase=”C:\testdomain”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
appBase는 이 컨텍스트의 물리적 영역이 되겠다.
물론 실제의 물리적인 디렉터리도 아래와 같이 필요하다.
C:\testdomain\ROOT
C:\testdomain\ROOT\WEB-INF
WEB-INF의 web.xml등은 TOMCAT_HOME\webapps\ROOT\WEB-INF에서 복사한다.
C:\testdomain\ROOT 디렉터리는 이 컨텍스트의 루트 디렉터리로 작동한다.
여기서 www.testdomain.com은 추가하려는 도메인이 되겠으며,
실제로 도메인을 보유하지 않고 개발 PC에서 작업하는 경우,
C:\Windows\system32\drivers\etc\hosts 파일을 열고
마지막 줄에 다음을 추가한다.
127.0.0.1 www.testdomain.com
이제 웹브라우저를 열고 [www.testdomain.com:포트번호]에 접속하면 된다.
만일 C:\testdomain\ROOT 가 아닌 C:\testdomain 를 룰트 디렉터리로 사용하고자 하는 경우에는
server.xml을 다음과 같이 작성한다.
<Hostname=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
<Host name=”www.testdomain.com” appBase=”C:\testdomain”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<context path=”” docBase=”D:\Team_ePro\StrutsPilot”></context>
</Host>
2. 포트 번호로 분류하는 방법
톰캣에서도 MS의 IIS와 같이 포트 번호에 따라 호스팅하는 것이 가능하다.
TOMCAT_HOME\conf\server.xml 을 열고 아래와 같이 Service 엘리먼트를 추가한다.
<Service name=”testdomain“>
<Connector port=”8090” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”testdomain” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”localhost” appBase=”C:\testdomain”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<context path=”” docBase=”C:\testdomain“></context>
</Host>
</Engine>
</Service>
Service 엘리먼트의 name 속성은 추가하려는 컨텍스트의 이름이 되겠다.
첫 Connector 엘리먼트의 port 속성은 사용하려는 포트 번호를 넣으면 된다.
Host 엘리먼트와 context 엘리먼트, appBase에 대한 물리적 경로 생성은 1항의 설명과 같다.
이제 웹브라우저를 열고 [localhost:포트번호]에 접속하면 된다.
—————————————————————————————
톰캣 6.0 에서 웹사이트 여러개 운영하기 (2)톰캣에서 하나의 IP로 여러개의 웹사이트를 운영하는 방법은 2가지가 있다.
# 가상 호스트(Virtual Host)를 이용하는 방법
# IP Address의 port를 여러개 사용하는 방법
여기서는 가상 호스트를 이용하여 톰캣에서 여러개의 웹사이트를 운영하는 방법에 대해서 설명하고자 한다.
설치 환경은 다음과 같다.
* O/S : Windows XP (Windows Server 동일)
* Tomcat 6.0.10
설명의 편의를 위해 톰캣의 설치 디렉토리는 ‘TOMCAT_HOME’ 으로 표기할 것이다. 참고로 내 경우는 C:\Server\Tomcat6.0 이다.
설정하는 방법은 /TOMCAT_HOME/conf/에 있는 server.xml 파일만 수정하면 된다. server.xml의 쓸데없는 주석부분을 다 없애고 관련 부분만 남겨놓으면 아래와 같다.
<Service name=”Catalina”>
<Connector port=”8080″ protocol=”HTTP/1.1″
maxThreads=”150″ connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
</Engine>
</Service>
위의 내용에서 핵심 부분은 <Host></Host> 영역이다.
1. 우선 <Connector port=”8080″ protocol=”HTTP/1.1″ 부분의 port를 80으로 수정한다.
도메인명이 기본으로 80포트를 사용하기 때문이다.
2. <Host>… </Host> 에 해당하는 부분을 복사하여 2개를 만든다. 그리고 이렇게 수정하자.
<Host name=”www.myweb1.com” appBase=”d:/webapps/myweb1″
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
<Host name=”www.myweb2.com” appBase=”d:/webapps/myweb2″
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
appBase=”webapps” 는 톰캣의 기본 웹루트인 TOMCAT_HOME/webapps 디렉토리를 가르킨다. 웹사이트를 원하는 디렉토리에 두고 싶다면 d:/webapps/myweb1 처럼 자기가 지정하고 싶은 곳으로 수정하면 된다.
3. 마지막으로 웹사이트들의 ROOT 디렉토리를 지정해주자. 아래의 폴더를 생성한다.
d:/webapps/myweb1/ROOT/
d:/webapps/myweb1/ROOT/WEB-INF/
d:/webapps/myweb2/ROOT/
d:/webapps/myweb2/ROOT/WEB-INF/
그리고 WEB-INF 폴더 밑에 각각 web.xml 파일을 추가한다. 그냥 /TOMCAT_HOME/webapps/ROOT/WEB-INF/에 있는 web.xml 을 복사하면 된다.
4. 테스트하기 위해 ROOT/index.html 또는 index.jsp를 만든다.
이제 톰캣을 재시작하고 웹브라우저로 접속해 보자.
http://www.myweb1.com
http://www.myweb2.com
정말 간단하지 않은가?
톰캣 6.0에서 웹사이트 여러개 운영하기 (1)
아파치와 연동없이 톰캣만으로도 하나의 IP로 다수의 웹사이트를 운영하는 것이 가능하다.
(아파치와 톰캣을 연동하는 방법에 대해서는 차후에 자세히 올리도록 하겠다)
특히 개발자의 경우 여러개의 프로젝트를 개발하거나 테스트하고자 할 때 웹사이트를 여러개 운영해야한다. 다수의 웹 사이트를 세팅하는 방법은 크게 2가지가 있다.
* 가상호스트를 이용하는 방법
* IP Address의 port를 여러개 사용하는 방법
가상호스트를 이용하는 방법은 도메인을 이용하여 실제로 서비스를 운영하는 경우가 아니면 개발자에겐 별 의미가 없다. 여기서는 두번째 방법인
IP 어드레스의 포트를 이용하는 방법에 대해서 설명하겠다. (바로가기 : 톰캣에서 가상 호스트를 이용하는 방법)
우선 설치 환경은 다음과 같다.* O/S : Windows XP (난 아직 리눅스를 잘 모른다. 비슷하겠지만 테스트해보지 않았다)
* Tomcat 6.0 (정확히는 6.0.10) : 다운로드
설명의 편의를 위해 톰캣의 설치 디렉토리는 ‘TOMCAT_HOME’ 으로 표기할 것이다. 참고로 내 경우는 C:\Server\Tomcat6.0 이다.
설정하는 방법은 간단하다. /TOMCAT_HOME/conf/에 있는 server.xml 파일만 수정하면 끝이다. server.xml의 쓸데없는 주석부분을 다 없애고 핵심부분만 남겨놓으면 아래와 같다.
<Service name=”Catalina”>
<Connector port=”8080″ protocol=”HTTP/1.1″
maxThreads=”150″ connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
</Engine>
</Service>
우선 빨간색으로 표시한 부분만 이해하고 넘어가도 상관없다.
Connector port=”8080″은 HTTP로 넘어오는 포트를 지정하는 것이다. 톰캣의 기본 포트가 8080인 이유가 여기에 있다. 따라서 8080 대신 기본 80포트를 사용하고 싶다면? 바로 이 부분을 port=”80″으로 바꾸어주면 된다.
다음, Host 지시어의 appBase=”webapps” 는 웹어플리케이션(웹사이트)의 위치를 나타낸다. appBase=”./webapps”와 같은 의미다. 실제 위치는 TOMCAT_HOME/webapps이다. 물론 “d:/weapps/myweb1″ 과 같이 절대경로로 지정하는 것도 가능하다.
그럼 웹사이트를 하다 더 추가하고 싶다면? 위의 <Service>…</Service>를 하나 더 만들어 버리면 된다. 위의 코드를 복사한 다음 server.xml 에 추가한다. 그리고 빨간색으로 표시한 부분만 수정하자.
<Service name=”Catalina2″>
<Connector port=”9090″ protocol=”HTTP/1.1″
maxThreads=”150″ connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina2″ defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”localhost” appBase=”d:/webapps/myweb2″
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
</Engine>
</Service>
다른 웹어플리케이션을 돌리기 위해 서비스를 하나 더 추가한 것이다.
port=”9090″ 은 새로 추가하고 싶은 포트이다.
appBase=”d:/webapps/myweb2″는 9090 포트에서 돌아갈 웹사이트 위치이다.
이제 server.xml 설정은 끝난 것이다.
마지막으로 웹사이트의 ROOT 디렉토리를 지정해주자. 아래의 폴더를 생성한다.
d:/webapps/myweb2/ROOT/ (
d:/webapps/myweb2/ROOT/WEB-INF/
(WEB-INF 폴더를 만들고 web.xml 파일을 추가한다. 그냥 /TOMCAT_HOME/webapps/ROOT/WEB-INF/에 있는 web.xml 을 복사하면 된다.
무지 간단하다. 하지만 난 이 간단한 것을 위해서 하루종일 삽질해야만 했다. 검색해 보아도 문서는 많은데 실제 도움이 될만한 것이 별로 없었다.
테스트하기 위해 ROOT/index.html 또는 index.jsp를 만든다.
이제 톰캣을 재시작하고 웹브라우저로 접속해 보자.
http://localhost:8080
http://localhost:9090
출처 :
http://dbdb.tistory.com/rss
+++++
ROOT 디렉토리의 이름을 바꾸고 싶다면
<Host name=”localhost” appBase=”d:/dev/myweb”>
<Context path=”” docBase=”d:/dev/myweb”/> <!– 추가–>
</Host>
tomcat ROOT 설정 방법
웹 상에서 버전 별로 여러 방법을 소개하고 있지만,
톰켓6.0 에서는 아래의 방법이 적용이 되니 참고가 됐으면 좋겠습니다.
여러 방법이 있을 수 있겠지만, 손쉬운 방법으로는 conf/server.xml 중,
대략 96줄에 있는 <Host> 태그의 appBase를 변경해주거나,
<Host> 태그 내에 <Context> 태그를 추가해주면 됩니다.
—————————————————————————
말은 쉬우나, 따라하는 것은 쉽지 않기 때문에 예를 들어보면,
우선 톰켓이 기본적으로 보고 있는 루트 컨텍스트는 webapps/ROOT 입니다.
96: <Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
appBase는 ${catalina-home} 밑의 상대경로를 인자로 받으며,
기본적으로 보안과 context의 통일적인 적용을 이유로 컨텍스트의 루트는 ROOT 디렉토리 밑이 됩니다.
따라서, 톰켓이 설치가 되면 웹루트는 ${catalina-home}/webapps/ROOT 가 되는 것이지요…
보다 쉬운 이해를 위해 이를 3가지 별로 변경을 해봅시다.
1. webapp 자체를 웹루트 디렉토리로 만들고 싶을 때,
단지, <Host> 태그 내에 아래와 같은 컨텍스트를 추가하면 됩니다.
<Context path=”” docBase=”.” reloadable=”true”/>
사실 컨텍스트는 더 많은 옵션이 있으나 여기는 최소한의 사항만 적었습니다. 실서버에 적용할 때는 log 부분도 신경을 써주셔야 합니다. 더 자세한 사항은 웹을 검색해 보시기 바랍니다.
2. webapp/test/ROOT를 웹루트 디렉토리로 만들고 싶을 때,
96: <Host name=”localhost” appBase=”webapps/test”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
3. d:/env/home/my 를 웹루트 디렉토리로 만들고 싶을 때,
96: <Host name=”localhost” appBase=”d:/env/home/my”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”.” reloadable=”true”/>
</Host>
또는,
96: <Host name=”localhost” appBase=”d:/env/home/”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”my” reloadable=”true”/>
</Host>
두 설정의 차이를 꼭 잘 알고 계셔야 하며,
말이 조금 헛갈리기는 하지만, Context 를 빼먹으면 ROOT를 자동으로 웹루트로 쓴다는 것을 기억하셔야 합니다.
p.s.> 톰켓 5.0부터 추가적인 context는 server.xml에 추가하지 않고,
각 웹어플리케이션 디렉토리 별로 META-INF 밑에 context.xml을 추가하게 됩니다.
웹루트를 appBase와 같이 하려면 이의 설정을 server.xml에서 설정해도 무방한 것 같습니다만,
webapps를 루트로 쓰는 것은 특별한 경우가 아니면 지양하는 게 좋으며,
꼭 필요하다면 apache의 redirect를 쓰는 방법 등으로 해결할 수도 있습니다.
connection pooling test
Sample ASP page:
<%@ LANGUAGE=”VBSCRIPT” %>
<HTML>
<BODY>
>%
dim cn(10)
dim cmd(10)
For x = 0 to 10
Set cn(x) = Server.CreateObject(“ADODB.Connection”)
cn(x).Open “DRIVER={SQL Server};SERVER=Ovteam;DATABASE=Pubs;UID=<username>;PWD=<strong password>”
Set cmd(x) = Server.CreateObject(“ADODB.Command”)
cmd(x).activeconnection = cn(x)
cmd(x).commandtext = “SELECT * FROM Authors”
cmd(x).execute
Response.Write “Command executed: ” & x & “<BR>”
Set cmd(x) = Nothing
cn(x).close ‘comment this line out to recreate the problem
Set cn(x) = Nothing
Next
%>
</BODY>
<HTML>
- SQL Server 성능 모니터를 열고: 시작 메뉴에서 프로그램, 관리 도구 (공통) 및 성능 모니터를 선택 합니다.
- + 를 클릭 하 여 카운터를 추가 합니다.
- SQL Server 개체를 변경 합니다.
- 사용자 연결 카운터를 선택 하 고 추가클릭 합니다.
- 완료를 클릭 합니다.
- ASP 페이지를 실행 합니다.
- 사용자 연결 카운터를 봅니다. 연결이 풀으로 반환 되 고 다시 사용 됩니다만 아주 경우 시작 지점에서 카운터 하나를 두 개의 연결을 통해 이동 합니다. 연결을 증가 시작 하는 경우 다음은 반환 되지 않습니다 되 고 연결 풀을 다시 사용할 수 및 각 ADO 개체에 대 한 새 연결을 만드는 중.
from https://support.microsoft.com/ko-kr/kb/191572
finding specific text string in column through all tables – procedure
declare @name sysname, @id int
declare @sname sysname,@xtype int
declare @sql varchar(1000) , @b_data varchar(1000), @a_data varchar(10)
set @b_data = ‘http://’
DECLARE MYCUR CURSOR FOR
select name,id from dbo.sysobjects where xtype=’U’
OPEN MYCUR
FETCH NEXT FROM MYCUR INTO @name, @id
WHILE (@@FETCH_STATUS = 0)
BEGIN
DECLARE subcur CURSOR FOR
select name,xtype from dbo.syscolumns
where xtype in (
167 — varchar
,175 — char
,231 –nvarchar
,239 –nchar
)
and id=@id
OPEN subcur
FETCH NEXT FROM subcur INTO @sname,@xtype
WHILE (@@FETCH_STATUS = 0)
BEGIN
set @sql = ‘select * from dbo.’+@name+’ where ‘+ @sname + ‘ like ”%’+ @b_data +’%”’
exec (@sql)
FETCH NEXT FROM subcur INTO @sname,@xtype
END
CLOSE subcur
DEALLOCATE subcur
FETCH NEXT FROM MYCUR INTO @name, @id
END
CLOSE MYCUR
DEALLOCATE MYCUR
TABLE LAYOUT USING DIV TAGS
Database Transfer MsSql server Sync sid . 데이타베이스 이전시에 아이디 싱크
Database Transfer MsSql server Sync sid . 데이타베이스 이전시에 아이디 싱크
ALTER Procedure [dbo].[usp_SyncLoginSid](@_LoginID varchar(30), @_DBName varchar(30))
AS
Begin
declare @_LoginID varchar(30)
declare @_DBName varchar(30)
set @_LoginID = ‘LoginID’
set @_DBName = ‘DatabaseName’
declare @vBinSid varbinary(85)
select @vBinSid = sid
From felis.dbo.sysusers where name = @_LoginID
exec sp_addlogin @_LoginID,’ ‘, @_DBName, @sid= @vBinSid
End
in ms sql 2008
without master db
—————how to create new login and sync
use DatabaseName
declare @sid varvanary
select @sid=sid from sysusers where name=’DatabaseName’
create login LoginID with password=’LoginID’, SID=@sid, check_policy=OFF
윈도우서버 | [Windows 2012] SMTP 서버 설치 및 구성
윈도우서버 | [Windows 2012] SMTP 서버 설치 및 구성
페이지 정보
작성일
2015-02-01 13:28 조회9,219회 댓글0건
게시물 상단 버튼 시작 {
} 게시물 상단 버튼 끝
본문
본문 내용 시작 {
Windows Server 2008 R2: SMTP 서버 설치 및 구성
SMTP 서버 설치
다음 단계에서는 SMTP 서버 기능을 설치합니다.
1. 서버 관리자 열기: 키보드에서 Windows 단추를 클릭합니다. 서버 관리자를 입력합니다. 결과 창에서 서버 관리자를 클릭합니다.
2. 왼쪽 창에서 대시보드를 클릭합니다.
3. 역할 및 기능 추가를 클릭합니다. 역할 및 기능 추가는 오른쪽 상단의 관리 메뉴에서도 열 수 있습니다.
4. 시작하기 전에 창에서 다음을 클릭합니다.
5. 설치 유형에서 역할 기반 또는 기능 기반 설치를 클릭합니다. Next를 클릭합니다.
6. 서버 선택에서 서버 풀에서 서버 선택을 클릭하고 원하는 서버를 클릭한 후 다음을 클릭합니다. 서버 선택 창에 서버 관리자에서 서버 추가를 사용하여 추가된 서버가 표시됩니다. 기본적으로 로컬 서버가 선택됩니다. 서버 관리자에 서버 추가에는 Windows Server 2012에서 서버 추가를 사용하는 단계가 표시됩니다.
7. 서버 역할 창에서 다음을 클릭합니다.
8. 기능 창에서 SMTP 서버를 선택합니다. 메시지가 표시되면 기능 추가를 클릭합니다. Next를 클릭합니다.
9. 확인에서 필요한 경우 자동으로 대상 서버 다시 시작을 클릭한 후 설치를 클릭합니다. 완료되면 닫기를 클릭합니다.
SMTP 서버 구성
다음 단계에서는 IIS 6.0 관리자를 사용하여 SMTP 가상 서버를 구성합니다.
1. IIS 관리자 열기: 키보드에서 Windows 단추를 클릭합니다. IIS를 입력합니다. 결과 창에서 IIS(인터넷 정보 서비스) 6.0 관리자를 클릭합니다.
2. 컴퓨터 이름을 확장합니다. [SMTP 가상 서버 #1]을 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.
3. 액세스 탭에서 릴레이 단추를 클릭합니다.
4. 추가를 클릭합니다. 단일 컴퓨터의 경우 127.0.0.1을 입력하고 확인을 클릭합니다.
5. 127.0.0.1을 추가하면 로컬 서버에서 이 SMTP 서버를 통해 메시지를 보낼 수 있습니다. 추가 컴퓨터에서 이 SMTP 서버를 통해 메시지를 보내려면 해당 IP 주소를 입력합니다.
6. 배달 탭에서 아웃바운드 연결을 클릭합니다. 기본적으로 TCP 포트는 25입니다. 이 포트가 방화벽 내에서 열려 있는 경우 다른 포트를 입력할 수 있습니다. 확인을 클릭합니다.
7. 배달 탭에서 고급을 클릭합니다. 기본적으로 로컬 서버의 정규화된 도메인 이름이 표시됩니다. 인터넷 공급자에 따라 스마트 호스트 속성이 비어 있을 수 있습니다. 스마트 호스트가 필요한지 여부를 확인하기 위해 인터넷 공급자에게 문의해야 할 수도 있습니다. 그렇지 않은 경우 smtp.EMailProvider.com을 입력할 수 있습니다.
8. 확인을 클릭하여 모든 창을 닫습니다.
9. SMTP 서버 다시 시작: [SMTP 가상 서버 #1]을 마우스 오른쪽 단추로 클릭하고 중지를 클릭한 후 시작을 클릭합니다. SMTP 서버 설정을 적용하려면 다시 시작해야 합니다.
SMTP 서버 테스트
텔넷을 사용하여 SMTP 서버 구성을 테스트할 수 있습니다. 다음 단계에서는 구성된 SMTP 서버를 사용하여 전자 메일 주소로 메시지를 보냅니다. http://support.microsoft.com/kb/153119 에서는 텔넷 명령에 대한 설명을 제공합니다.
1. 관리자 권한으로 명령 창을 엽니다.
Windows Server 2008 R2 : 시작을 클릭하고 검색 입력란에 명령을 입력합니다. 명령 프롬프트를 마우스 오른쪽 단추로 클릭한 다음 관리자 권한으로 실행을 클릭합니다.
Windows Server 2012 : 키보드에서 Windows 단추를 클릭합니다. 명령을 입력합니다. 결과 창에서 명령 프롬프트를 마우스 오른쪽 단추로 클릭한 다음 작업 표시줄에서 관리자 권한으로 실행을 클릭합니다.
2. 명령 프롬프트에서 다음을 입력합니다.
telnet localhost 25
텔넷이 설치되지 않은 경우 다음을 입력하여 설치합니다.
pkgmgr /iu:”TelnetClient”
3. 다음을 입력하여 통신을 시작합니다.
EHLO server
4. 메일 보낸 사람 주소를 입력합니다.
MAIL FROM: YourEmailAddress@YourProvider.com
예를 들어 다음과 같이 입력합니다.
MAIL FROM: EmailAddress@outlook.com
5. 메일 받는 사람 주소를 입력합니다.
RCPT TO: YourEmailAddress@YourProvider.com
예를 들어 다음과 같이 입력합니다.
RCPT TO: EmailAddress@outlook.com
6. 다음을 입력하여 SMTP 서버에 데이터를 보낼 준비가 완료되었음을 알립니다.
DATA
7. 다음을 입력하여 제목을 입력합니다.
Subject: Test Message
8. Enter 키를 두 번 누릅니다.
9. 다음을 입력하여 메시지 본문을 입력합니다.
This is the message body of the test message.
10. Enter 키를 누르고 마침표(.)를 입력한 후 Enter 키를 누릅니다.
전자 메일 메시지의 RCPT TO 주소를 확인합니다. 전자 메일 메시지가 배달되지 않은 경우(받은 편지함 및 스팸 폴더 확인) 메시지가 전송되지 않고 SMTP 큐 폴더(C:\inetpub\mailroot\Queue)에 남아 있습니다.
참고자료
https://msdn.microsoft.com/ko-kr/library/dn292550.aspx
Eliminate Korean MySql function
CREATE DEFINER=`cosmos`@`%` FUNCTION `onlyHanja`(`iName` text )
RETURNS varchar(4000) CHARSET utf8
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ”
BEGIN
declare iChar varchar(1);
declare oName text;
declare i INT DEFAULT 1;
SET oName = iName;
WHILE i <= length(iName) DO
SET iChar = SUBSTRING(iName,i,1) ;
IF iChar between ‘가’ and ‘힣’ THEN
SET oName = replace(oName,iChar,”) ;
END IF ;
SET i = i + 1;
END WHILE;
SET oName = replace(oName,‘(‘,”);
SET oName = replace(oName,‘)’,”);
RETURN (oName);
END
korean hanja 구분
완성형 코드표에서 한글과 한자의 영역은 다음과 같습니다.
완성형 글자 코드의 한자 영역: xxyyh (xx: CAh ~ FDh, yy: A1h ~ FEh)
따라서 글자가 한글인지 확인하려면 위의 두 범위 내에 드는지를 채크해 보면 되겠습니다. 참고로 다른 종류의 문자의 영역들은 다음과 같습니다. ‘a’, ‘+’같은 1바이트 문자(반각)는 여기에 포함되지 않습니다. 보기에는 같은 글자라도 2바이트 문자(전각)인 ‘a’, ‘+’와 1바이트 문자(반각)인 ‘a’, ‘+’는 전혀 틀린 문자입니다.
A3A1h ~ A3FEh: 전각 문자
A4A1h ~ A4FEh: 한글자모
A5A1h ~ A5AAh: 소문자 로마숫자 (i~x)
A5B0h ~ A5B9h: 대문자 로마숫자 (I ~ X)
A5C1h ~ A5D8h: 대문자 그리스 문자
A5E1h ~ A5F8h: 소문자 그리스 문자
A6A1h ~ A6E4h: 라인 문자
A7A1h ~ A7EFh: 단위
A8A1h ~ A8B0h: 대문자 발음기호
A8B1h ~ A8BEh: 원문자 한글 자음 (ㄱ~ㅎ)
A8BFh ~ A8CCh: 원문자 가나다 (가~하)
A8CDh ~ A8E6h: 원문자 영문 소문자 (a~z)
A8E7h ~ A8F5h: 원문자 숫자 (1~15)
A8B1h ~ A8BEh: 분수 (1/2, 1/3, 2/3, 1/4, 3/4, 1/8, 3/8, 5/8, 7/8)
A9A1h ~ A9B0h: 소문자 발음기호
A9B1h ~ A9BEh: 괄호문자 한글 자음 (ㄱ~ㅎ)
A9BFh ~ A9CCh: 괄호문자 가나다 (가~하)
A9CDh ~ A9E6h: 괄호문자 영문 소문자 (a~z)
A9E7h ~ A9F5h: 괄호문자 숫자 (1~15)
A9B1h ~ A9BEh: 위, 아래첨자 (1, 2, 3, 4, n, 1, 2, 3, 4)
ABA1h ~ ABF3h: 가타카나
ABA1h ~ ABF6h: 히라가나
ACA1h ~ ACC1h: 키릴 문자 대문자
ACD1h ~ ACF1h: 키릴 문자 소문자
예전에 만들어 두었던 게임에서 캐릭터 이름 등을 입력받아 유효성을 체크하는 필터 소스이다.
아스키에서의 특수문자 확인
{
ERROR_NAME_OK, // OK
ERROR_NAME_MAX_LENGTH, // 문자열 길이 초과.
ERROR_NAME_MIN_LENGTH, // 문자열이 너무 짧음.
ERROR_NAME_SPECIAL_CODE, // 특수코드 사용.
ERROR_NAME_VALUE, // 숫자 사용.
ERROR_NAME_BLINK_MORE, // 공백 중복 사용.
};
int Check_Filter_Name( const char* buffer, int minLen, int maxLen )
{
int len = strlen(buffer);
// 길이 검사
// if( len > NAME_LEN )
if( len >= maxLen )
return ERROR_NAME_MAX_LENGTH;
else if( len < minLen )
return ERROR_NAME_MIN_LENGTH;
// 특수문자 검사
for( int x=0; x<len; ++x )
{
if( ((unsigned char)buffer[x]>= 0xB0 ) &&
((unsigned char)buffer[x] <= 0xC8 ) &&
((unsigned char)buffer[x+1] >= 0xA1) &&
((unsigned char)buffer[x+1] <= 0xFE ))
{
// 한글 해당 부분
x++;
continue;
}
else if( ( (unsigned char)buffer[x] >= 0xCA ) &&
( (unsigned char)buffer[x] <= 0xFD ) &&
( (unsigned char)buffer[x+1] >= 0xA1 ) &&
( (unsigned char)buffer[x+1] <= 0xFE) )
{
// 한자 해당 부분
return ERROR_NAME_SPECIAL_CODE;
}
else if ( ( ( (unsigned char)buffer[x] >= 0x41 ) &&
( (unsigned char)buffer[x] <= 0x5A ) ) ||
( ( (unsigned char)buffer[x] >= 0x61 ) &&
( (unsigned char)buffer[x] <= 0x7A) ) )
{
// 영어 해당 부분
continue;
}
else if ( ( buffer[x]>= ‘0’ ) && ( buffer[x] <= ‘9’ ) )
{
// 숫자 처리 부분
continue;
}
else if(( (unsigned char)buffer[x]>= 0xA1 ) &&
( (unsigned char)buffer[x+1] >= 0xA1 ) )
{
// 2byte special char
return ERROR_NAME_SPECIAL_CODE;
}
else
{
// 1byte special character
return ERROR_NAME_SPECIAL_CODE;
}
}
return ERROR_NAME_OK;
}
유니코드에서의 특수문자 확인 (영어, 숫자,완성된 한글을 제외하고 거르기
for(int i = 0; i < len; i++)
{
// 숫자
if(strSource[i] >= 0x0030 && strSource[i] <= 0x0039)
continue;
// 영어 대소문자
else if( (strSource[i] >= 0x0041 && strSource[i] <= 0x005a) ||
(strSource[i] >= 0x0061 && strSource[i] <= 0x007a))
continue;
// 한글
else if((strSource[i] >= 0xAC00 && strSource[i] <= 0xD7A3))
continue;
else
return false;
// 현재는 숫자,영어,한글자로 완성된 한글만을 검색한다. ㅎㅎㅎ 같은것도 안됨.
// 한글 자모 1100 ~ 11FF
// 한글 호환 자모 3130 ~ 318F
// ㅎㅎ 이나 ㅋㅋㅋㅋ 같은 단어도 막을려면..
// 한글 자모 나 호환 자모로 사용하려면 따로 처리해야 한다.
}