안녕하세요? SQL프론티어 3기 윤선식입니다.

 

각 버젼별 암호화 알고리즘을 정리해 보았습니다.

SQL 2012의 경우 RTM이 나와 봐야 알겠지만, 아마 크게 변경되진 않으리라 예상됩니다.

 

참고로, 여기서 이야기하는 양방향과 단방향은 아래 기준에 의해 편의상 정한 용어이오니 혼돈 없기 바랍니다.

 - 양방향 : 암호화, 복호화가 가능한 것.

 - 단방향 : 복호화가 불가능하고 암호화만 가능한 것.

 

1. 양방향

 1) SQL Server 2005 암호화 알고리즘

  http://technet.microsoft.com/ko-kr/library/ms345262(SQL.90).aspx

  DES, Triple DES, RC2, RC4, 128비트 RC4, DESX, 128비트 AES, 192비트 AES, 256비트 AES

 

 2) SQL Server 2008 암호화 알고리즘

  http://technet.microsoft.com/ko-kr/library/ms345262(SQL.100).aspx

  DES, Triple DES, TRIPLE_DES_3KEY, RC2, RC4, 128비트 RC4, DESX, 128비트 AES, 192비트 AES, 256비트 AES

 

 3) SQL Server 2008 R2 암호화 알고리즘

  http://technet.microsoft.com/ko-kr/library/ms345262(SQL.105).aspx

  DES, Triple DES, TRIPLE_DES_3KEY, RC2, RC4, 128비트 RC4, DESX, 128비트 AES, 192비트 AES, 256비트 AES

 

 4) SQL Server 2012 암호화 알고리즘

  http://technet.microsoft.com/ko-kr/library/ms345262(en-us,SQL.110).aspx

  DES, Triple DES, TRIPLE_DES_3KEY, RC2, RC4, 128-bit RC4, DESX, 128-bit AES, 192-bit AES, and 256-bit AES

 

2. 단방향(Hash)

 1) SQL Server 2005 암호화 알고리즘(단방향)

  http://msdn.microsoft.com/en-us/library/ms174415(v=sql.90).aspx

  MD2, MD4, MD5, SHA, SHA1

 

 2) SQL Server 2008 암호화 알고리즘(단방향)

  http://msdn.microsoft.com/en-us/library/ms174415(v=sql.100).aspx

  MD2, MD4, MD5, SHA, SHA1

 

 3) SQL Server 2008 R2 암호화 알고리즘(단방향)

  http://msdn.microsoft.com/en-us/library/ms174415(v=sql.105).aspx

  MD2, MD4, MD5, SHA, SHA1

 

 4) SQL Server 2012 암호화 알고리즘(단방향)

  http://msdn.microsoft.com/en-us/library/ms174415(v=sql.110).aspx

  MD2, MD4, MD5, SHA, SHA1, SHA2_256, SHA2_512

 

이상입니다.


안녕하세요? SQL 프론티어 3기 쓸만한게없네(윤선식)입니다.

 

지난 번 ISDATE 함수에 이은 ISNUMERIC 함수 설명입니다. ^^.

 http://www.sqler.com/467518

 

ISNUMERC 함수는 ISDATE(표현) 이런 식으로 사용하고, 숫자형식인 경우 1 숫자형식이 아닌 경우 0을 반환합니다.

 

SELECT

       ISNUMERIC('1234') AS '1',

       ISNUMERIC('A587') AS '2',

       ISNUMERIC('222!') AS '3',

       ISNUMERIC('123l123') AS '4',

       ISNUMERIC('157.123') AS '5',

       ISNUMERIC(NULL) AS '6',

       ISNUMERIC('') AS '7',

       ISNUMERIC('0') AS '8',

       ISNUMERIC('12345678901234567890') AS '9',

       ISNUMERIC('1234567890123456789012345678901234567890123456789012345678901234567890') AS '10',

       ISNUMERIC('1.234567890123456789012345678901234567890123456789012345678901234567890') AS '11'

ISNUMERIC.png

 

1 : ISNUMERIC('1234') AS '1' : 숫자 형태입니다. "1"을 반환합니다.

2 : ISNUMERIC('A587') AS '2' : 문자가 포함되어 있습니다. "0"을 반환합니다.

3 : ISNUMERIC('222!') AS '3' : 특수문자가 포함되어 있습니다. "0"을 반환합니다.

4 : ISNUMERIC('123l123') AS '4' : 지난 번 ISDATE 함수 속임수 처럼 중간에 1이 아닌 L 이 있습니다. "0"을 반환합니다.

5 : ISNUMERIC('157.123') AS '5' : 소숫점을 포함해 봅니다. 숫자형태로 인식하여 "1"을 반환합니다.

6 : ISNUMERIC(NULL) AS '6' : NULL은 숫자로 인식하지 않습니다. "0"을 반환합니다.

7 : ISNUMERIC('') AS '7' : 공백도 숫자로 인식하지 않습니다. "0"을 반환합니다.

8 : ISNUMERIC('0') AS '8' : 0 은 숫자입니다. "1"을 반환합니다.

9 : ISNUMERIC('12345678901234567890') AS '9' : BIGINT 보다 큰 수를 대입해 봅니다. 숫자로 인식하여 "1"을 반환합니다.

10 : ISNUMERIC('1234567890123456789012345678901234567890123456789012345678901234567890') AS '10' : 매우 큰 숫자형태를 대입해 봅니다. 이 또한 형태가 숫자이어서 전체 자릿수와 상관없이 숫자로 인식합니다. 그러므로, "1"을 반환합니다.

11 : ISNUMERIC('1.234567890123456789012345678901234567890123456789012345678901234567890') AS '11' : 매우 큰 소숫점 형태를 대입해 봅니다. 이 또한 형태가 숫자이어서 전체 소숫점 자릿수와 상관없이 숫자로 인식합니다. 그러므로, "1"을 반환합니다.

 

결론적으로 숫자로 인식할 수 있는 모든 문자를 숫자형태로 보고 있습니다.

실무에서 사용할 때에는 단순하게 사용할 것이 아니라 DataType을 반드시 확인하고 사용해야 할 듯 합니다.

 

감사합니다.


코드명 지을 때 지역 명칭인 건 다 아시죠?

 

Denali는 알래스카 내부에 위치한 맥킨리 산을 의미합니다.

즉 알래스카에 있는 국립공원이 있는 곳이라고 보시면 될 듯 하네요.

 

Denali_National_Park.jpg

 

멋지죠?


http://www.sqler.com/467497 이 글에 있어서 ㅋ. 예전에 알던 자료와 조금 더 테스트해서 삽질한 것을 좀 정리해 봤습니다.

 

ISDATE 함수는 ISDATE(표현) 이런 식으로 사용하고, 날짜형식인 경우 1 날짜형식이 아닌 경우 0을 반환합니다.

 

SELECT

       ISDATE('20120101') AS '1',

       ISDATE('2012/01/01') AS '2',

       ISDATE('2012-01-01') AS '3',

       ISDATE('12-01-01') AS '4',

       ISDATE('2012-04-31') AS '5',

       ISDATE(NULL) AS '6',

       ISDATE('201l-12-31') AS '7',

       ISDATE('123') AS '8',

       ISDATE('2012-01-01 15:55:59.455') AS '9',

       ISDATE('2012-01-01 15:55:59.4551') AS '10',

       ISDATE('1752-12-31') AS '11',

       ISDATE('1753-01-01') AS '12',

       ISDATE('2999-01-01') AS '13',

       ISDATE('9999-12-31') AS '14',

       ISDATE('01/2012/12')AS '15',

       CONVERT(DATETIME,'01/2012/12') AS 'DATETIME-01/2012/12'

ISDATE.png

 

1 : ISDATE('20120101') AS '1' : 기본 날짜 형태 중 하나입니다. "1"을 반환합니다.
2 : ISDATE('2012/01/01') AS '2' : 기본 날짜 형태 중 하나입니다. "1"을 반환합니다.
3 : ISDATE('2012-01-01') AS '3' : 기본 날짜 형태 중 하나입니다. "1"을 반환합니다.
4 : ISDATE('12-01-01') AS '4' : 기본 짧은날짜 형태 중 하나입니다. "1"을 반환합니다.
5 : ISDATE('2012-04-31') AS '5' : ISDATE 함수는 이럴 때 빛을 발하죠... 4월 31일은 없습니다.  "0"을 반환합니다.
6 : ISDATE(NULL) AS '6' : NULL 값일 경우 "0"을 반환합니다.
7 : ISDATE('201l-12-31') AS '7' : '어, 이상한데? 1이 되어야 하는 거 아닌가?' 하지만 잘 보면 2011이 아니라 201L 입니다.  "0"을 반환합니다.

8. ISDATE('123') AS '8' : 날짜형태라고 볼 수 없죠. 당연히 "0"을 반환합니다.
9 : ISDATE('2012-01-01 15:55:59.455') AS '9' : ISDATE 함수는 초의 소수점 세 자리까지 받아들일 수 있습니다. "1"을 반환합니다.
10 : ISDATE('2012-01-01 15:55:59.4551') AS '10' : 9번 설명과 같습니다. 소수점 자리수 초과로 "0"을 반환합니다.
11 : ISDATE('1752-12-31') AS '11' : '어, 이것도 날짜 맞잖아.' 네. 맞습니다. 하지만 "0"을 반환합니다.

  요건 이 글 참조요~

   http://www.sqler.com/271895#comment_271983
12 : ISDATE('1753-01-01') AS '12' : 윗 글을 읽으셨나요? 이제 왜 위의 날짜와 하루 차이인데 "1"을 반환하는 지 아실 겁니다. ^^.
13 : ISDATE('2999-01-01') AS '13' : 아직 오지 않은 2999년. 다들 그 때까지 살아 계실 거죠? 정상적인 일자로 "1"을 반환합니다.
14 : ISDATE('9999-12-31') AS '14' : 이제 조금 더 가 보겠습니다.. 9999년 12월 31일. 네... 오래 사세요. "1"을 반환합니다.
15 : ISDATE('01/2012/12')AS '15' : 년-월-일 같은 형태와 달리 월-년-일로 처리해 보았습니다. "1"로 반환하네요. 날짜로 인식합니다.
16 : CONVERT(DATETIME,'01/2012/12') AS 'DATETIME-01/2012/12' : 15번에 대해 어떻게 인식하는지 직접 보여 드립니다.

   

참고로 이 결과는 국가나 언어설정에 따라 조금 다른 차이가 있을 수 있습니다.

다만, 그 부분에 대해서는 다루지 않았으니 주의해 주세요...

 

감사합니다.


Client 에서 SQL Server로 연결하기 위해서는 어떠한 프로토콜들을 사용할까요?

많은 분들은 IP를 사용하죠. (IP 또는 컴퓨터이름)

 

그렇다면, 접속 시 사용하는 프로토콜은 어떠한 것들이 있을까요?

공유 메모리, TCP/IP, 명명된 파이프, VIA 가 그것들입니다.

해당 프로토콜의 사용유무는 SQL Server 구성관리자(SQL Server Configuration Manager)에서 확인과 설정이 가능합니다.

 

1.png

 

 

1.     공유 메모리(Shared Memory)

A.     서버에서 직접 접속할 때 사용할 때 쓸 수 있습니다. 즉 로컬컴퓨터가 서버인 경우에만 됩니다.

B.      접속형태는 <servername>[\instancename] 입니다.

C.      “.”이나 “(local)” 또는 “localhost”와 같은 형태로 사용이 가능합니다.

 2.png

D.     동일한 컴퓨터인 경우 가장 우수한 성능을 보입니다.

E.      포트를 지정할 수 없습니다.

F.      접속상태를 확인하면 다음과 같습니다.

SELECT net_transport

FROM sys.dm_exec_connections

WHERE session_id = @@SPID;

3.png

 

 

2.     TCP/IP

A.     가장 많이 사용하는 형태입니다.

B.      서버주소를 IP 주소 또는 컴퓨터 이름을 사용합니다.

C.      기본 포트는 1433입니다.

D.     TCP: <servername>[\instancename>],<port> 또는 TCP:<ipaddress>[\instancename],<port>와 같은 형태로 사용이 가능하며,

“TCP:” 는 생략할 수 있습니다. 또한, 기본 포트 1433을 사용할 때에는 포트번호를 생략할 수 있습니다.

 4.png

E.      로컬컴퓨터라도 “127.0.0.1”과 같이 IP Address를 사용하면 공유메모리가 아닌 TCP/IP로 동작합니다.

F.      접속상태를 확인하면 다음과 같습니다.

SELECT net_transport

FROM sys.dm_exec_connections

WHERE session_id = @@SPID;

 5.png

 

3.     명명된 파이프(Named Pipe)

A.     간혹 사용하는 경우가 있지만 그다지 많이 사용하지 않는 방식입니다.

B.      구성관리자에 명시된 이름을 사용합니다.

C.      기본포트는 445 이며, 포트를 변경할 수 없습니다.

D.     np:\\<ipaddress>\pipe\sql\query  또는 np:\\<computer_name>\pipe\sql\query 의 형태로 사용이 가능하며,
“np:”
는 생략할 수 있습니다.

 7.png

E.      위 예제는 제가 일부러 \\.\pipe\sql\query 에서 \\.\pipe\sql\query1 로 바꾼 것이며,

F.      구성관리자에서 다음과 같이 변경하였습니다.

6.png

G.     파이프명이 일치하지 않을 경우 다음과 같이 접속오류가 발생합니다.

 9.png

H.     접속상태를 확인하면 다음과 같습니다.

SELECT net_transport

FROM sys.dm_exec_connections

WHERE session_id = @@SPID;

      8.png

 

4.     VIA(Virtual Interface Adapter)

A.     VIA 프로토콜은 하드웨어와 함께 동작하기 때문에 거의 사용하지 않고 있습니다.

B.      또한, 다음 버전부터는 제거된다고 합니다.

 

 

참고 URL : http://msdn.microsoft.com/ko-kr/library/ms190611.aspx

 

이상 쓸만한게없네 윤선식입니다.

+ Recent posts