DataBase 2009. 9. 14. 16:20
반응형

License 정보를 Database에 넣어서 관리하고 싶을 때 사용했던 방식이다.

Mysql은 자체적으로 암호화 함수를 제공한다.


CREATE TABLE LICENSE_INFO (            
 MAX_SUBS blob NOT NULL,                 
) TYPE=InnoDB;

AES_ENCRYPT : 암호화
format) AES_ENCRYPT(FIELD_VALUE, 'KEY'));
ex)  insert into LICENSE_INFO values (AES_ENCRYPT(200, 'ssuk'_key));

'KEY' 값은 나중에 복호화 할때 이용되기 때문에 기억해야 한다.


AES_DECRYPT : 복호화
format) AES_DECRYPT(FILED_NAME, 'KEY')
ex) select AES_DECRYPT(MAX_SUBS, 'ssuk_key') from LICENSE_INFO;

결과에 암호화로 넣은 200이 나오는 것을 확인할 수 있음


이렇게 Msyql 간단히 사용할 수 있다.^^


그럼 Psql은??
사실 Psql도 암호화/복호화 함수가 있기 때문에 쉽게 사용할 수 있다.
모르는 사람이 많은 이유는 따로 contrib를 설치 해야하기 때문이다.

1. postgresql-contrib-xxx.rpm을 설치한다.
ex) postgresql-contrib-8.2.13-1PGDG.rhel4.i386.rpm (내가 사용한 rpm)

2. pgcrypto.sql 파일을 DB에 적용한다.
ex) psql DB_NAME < /usr/share/pgsql/contrib/pgcrypto.sql

3. 실제 사용

CREATE TABLE LICENSE_INFO (
 MAX_SUBS varchar(32)          
);

encode(encrypt()) : 암호화
format) (encode(encrypt('FIELD_VALUE', 'KEY', 'aes'), 'hex'),
ex) insert into LICENSE_INFO values (encode(encrypt('200', 'ssuk_key', 'aes'), 'hex'));

'KEY' 값은 나중에 복호화 할때 이용되기 때문에 기억해야 한다.

decrypt(decode()) : 복호화
format) decrypt(decode(FILED_NAME, 'hex'), 'KEY', 'aes') 
ex) select decrypt(decode(MAX_SUBS, 'hex'), 'ssuk_key', 'aes') from LICENSE_INFO;

결과에 암호화로 넣은 200이 나오는 것을 확인할 수 있음

이로써 Psql도 간단히 암호화/복호화를 쓸 수 있다.
반응형

'DataBase' 카테고리의 다른 글

INNER JOIN  (0) 2009.09.17
JOIN  (0) 2009.09.17
[Mysql] 기초 키워드 및 함수  (0) 2009.06.17
[Mysql] 문자 함수  (0) 2009.06.17
[Mysql] Oracle에 MINUS를 Mysql에서 구현해보자  (0) 2009.06.16
posted by ssuk1010
:
C/C++ 2009. 9. 14. 15:50
반응형

회사 다니면서 사용하게 된 snprintf()는 사이즈를 체크할 수 있기 때문에
사이즈 커져 생길 수 있는 오류를 미리 예방할 수 있다.
(많은 core는 string을 copy하면서 발생)

그러다 어느날 sprintf()를 쓰면서 한가지 문제가 발생했다.

snprintf(cmd, CMD_LEN-1, "%s/INMSIFD/smb-inmsifd-1.0/get_patch_file.sh", getenv("XN_HOME"));
    if( !(fp = fopen(cmd, "r")) )
    {
        uLogApp(LOG_MAJ, "getFtpSystemPatchFile() << FILE : %s isn't exist!!", cmd);
        return uFalse;
    }
    if(fp) {
        pclose(fp); fp = NULL;
    }

    snprintf(cmd, CMD_LEN-1, "%s %s %s %s %s %s %s", cmd, g_SmbInfo.patchIpAddr, g_SmbInfo.patchId,
            g_SmbInfo.patchPassword, g_SmbInfo.patchBasePath,
            g_SmbInfo.patchDownDir, fileName);

    uLogApp(LOG_DEB0, "getFtpSystemPatchFile() << CMD : (%s) ", cmd);

소스가 조금 지저분하지만..
1. snprintf()를 이용해서 cmd에 특정 값을 저장한다.
2. 다시 snprintf()를 이용해서 cmd에 기존에 저장된 cmd값과 다른 값들을 함께 저장한다.
결과 : 기존 cmd에 있는 값들은 모두 삭제

기존 cmd값이 삭제되기 때문에 원하는 결과가 출력되지 않는다.
이렇게 사용한 것은 sprintf()를 사용하던 버릇때문에 발생한 문제인데
똑같은 사용이라도 sprintf()를 사용하면 발생하지 않는 문제이다.

<해결방법>
1. snprintf() -> sprintf()를 사용 ( 조금 무식한 방법으로, 사이즈 체크가 어렵기 때문에 패스)
2. offset을 이용한 방법 (권장)

다음은 offset을 이용해 해결한 방식이다.


xi32    offset=0;
    offset = snprintf(cmd, CMD_LEN-1, "%s/INMSIFD/smb-inmsifd-1.0/get_patch_config.sh",
            getenv("XN_HOME"));

    if( !(fp = fopen(cmd, "r")) )
    {
        uLogApp(LOG_MAJ, "getFtpSystemPatchCfg() << FILE : %s isn't exist!!", cmd);
        return uFalse;
    }
    if(fp) {
        pclose(fp); fp = NULL;
    }
    uLogApp(LOG_MAJ, "CMD : (%s) ", cmd);
    // get ftp SYSTEM_PATCH_CONFIG.ini
    snprintf(cmd+offset, CMD_LEN-1, " %s %s %s %s %s", g_SmbInfo.patchIpAddr, g_SmbInfo.patchId,
            g_SmbInfo.patchPassword, g_SmbInfo.patchBasePath, g_SmbInfo.patchDownDir);
    uLogApp(LOG_MAJ, "CMD : (%s) ", cmd);

보다시피, offset을 사용하여 기존 cmd에서 남기고자 하는 만큼 off을 이용해서 포인터를 이동해서 복사한다. 문제 해결!!!

하지만 기존 값을 중간에 넣고 싶다면, 이 방법도 사용하지 못할 것....
그럴 때는 다른 변수를 사용해야 겠지???

왜 sprintf()는 가능한데 snprintf()는 안될까??
궁금하다~

반응형
posted by ssuk1010
:
DataBase 2009. 6. 17. 16:20
반응형
1. ORSER BY : 정렬
ORDER BY COLUMN DESC (내림차순)
ORDER BY COLUMN ASC (오름차순)

2. SUM(COLUMN): 합
SELECT SUM(COLUMN) FROM Table_Name;

3. MAX(COLUMN): 최대 값
SELECT MAX(COLUMN) FROM Table_Name;

4. MIN(COLUMN): 최소 값
SELECT MIN(COLUMN) FROM Table_Name;

5. COUNT(COLUMN): 갯수
SELECT SUM(COLUMN) FROM Table_Name;

6. AVG(COLUMN): 평균
SELECT AVG(COLUMN) FROM Table_Name;

7. DISTINCT: 중복제거
SELECT DISTINCT COLUMN FROM Table_Name;

8. LIMIT(시작할 결과 번호, 반환할 결과 갯수): 결과 갯수 제한
SELECT * FROM Table_Name LIMIT 0, 2; -> 첫번째 결과부터 2개로 제한
SELECT * FROM Table_Name LIMIT 2; ->결과를 2개로 제한
반응형

'DataBase' 카테고리의 다른 글

JOIN  (0) 2009.09.17
[Mysql/Psql] 데이터 암호화  (0) 2009.09.14
[Mysql] 문자 함수  (0) 2009.06.17
[Mysql] Oracle에 MINUS를 Mysql에서 구현해보자  (0) 2009.06.16
[MySql] Alter Table 문법  (0) 2009.06.15
posted by ssuk1010
: