DBº¸¾ÈÀÇ Ãâ¹ßÁ¡ÀÌ DB¿¡ ´ëÇÑ Àý´ëÀû ±ÇÇÑÀ» Çà»çÇÒ ¼ö ÀÖ´Â °ü¸®ÀÚ °èÁ¤(OS°ü¸®ÀÚÀÎ ¡®root¡¯¿Í DB°ü¸®ÀÚÀÎ ¡®SYSTEM¡¯)Àº ÃÖ¿ì¼±ÀûÀ¸·Î ÅëÁ¦µÇ¾î¾ß ÇÏ´Â 1Â÷ ÅëÁ¦ ´ë»óÀ̶ó´Â °ÍÀ̸ç, ±×·¸±â ¶§¹®¿¡ ¸ðµç º¸¾È Á¦Ç°ÀÌ SOD(Separate of Duty, Áï DB°ü¸®ÀÚÀÇ ±ÇÇÑ Áß Áß¿ä µ¥ÀÌÅÍ¿¡ ´ëÇÑ Á¢±ÙÀ» ÅëÁ¦ÇÏ´Â ±ÇÇÑÀ» º¸¾È°ü¸®ÀÚ°¡ Çà»ç Çϵµ·Ï ºÐ¸® ÇÏ´Â °Í)¿¡ ±â¹ÝÇÏ°í ÀÖ´Ù.
À¯°¨½º·´°Ôµµ Å»ýÀûÀ¸·Î, DBMS º¥´õ¿¡¼ Á¦°øÇÏ´Â TDE¿Í °°Àº º¸¾È Á¦Ç°(¶Ç´Â Function)µéÀº DB°ü¸®ÀÚ°¡ ¸ðµç °ü¸®¿Í ÅëÁ¦¸¦ Çϵµ·Ï µÇ¾î ÀÖ´Ù. Áï, ¡°DB°ü¸®ÀÚ´Â ½Å·ÚÇÒ ¼ö ÀÖ´Ù¡±´Â ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀº ÀüÁ¦°¡ ±ò¸° °ÍÀÌ´Ù.
MSSQL 2008°ú Oracle 11gÀÇ TDEµéÀº È®ÀÎ °á°ú ´Ù¼ÒÀÇ Â÷ÀÌ´Â ÀÖ¾úÁö¸¸ DB¾ÏÈ£È Á¦Ç°ÀÌ °®Ãß¾î¾ß ÇÒ º¸¾È ±â´Éµé Áß ¾ÏÈ£È ±â´ÉÀ» Á¦¿ÜÇϸé, Å° ±â¹Ð¼º À¯Áö ¿ä°Ç°ú Å° »ç¿ë±ÇÇÑ ÅëÁ¦ ¿ä°Ç µî Áß¿äÇÑ ±â´ÉµéÀÌ Á¦°øµÇÁö ¾Ê°Å³ª ¹ÌºñÇÔÀ» ¾Ë ¼ö ÀÖ¾ú´Ù. ƯÈ÷ Å×ÀÌºí ½ºÆäÀ̽º ´ÜÀ§ÀÇ ¾ÏÈ£È ¹æ¹ýÀº ¸Þ¸ð¸®»ó¿¡¼ Æò¹® µ¥ÀÌÅÍ°¡ ³ëÃâµÇ´Â ¹®Á¦Á¡µµ Áö´Ï°í ÀÖ´Ù.
ÀÌ·Î ÀÎÇÑ À§ÇèÀº ¾ÆÁÖ ½±°Ô ¾ÏÈ£È ÇÑ µ¥ÀÌÅÍÀÇ À¯ÃâÀÌ °¡´ÉÇÏ°Ô µÇ¸ç, ½ÇÁ¦ °ËÁõÀ¸·Î È®ÀÎ µÇ¾ú´Ù.
[°ËÁõ °á°ú ¿ä¾à]
°ËÁõ Ç׸ñ |
MSSQL 2008ÀÇ TDE |
Oracle 11gÀÇ TDE |
¸Þ¸ð¸®¿¡ Å×À̺í Àüü¸¦ Æò¹®À¸·Î ·ÎµùÇÏ´Â Ãë¾à¼º °ËÁõ |
¸Þ¸ð¸®¿¡ Æò¹®À¸·Î ¾ÏÈ£È Å×À̺íÀ» ·ÎµùÇÏ°í ÀÖÀ¸¸ç dump¸¦ ÅëÇØ Æò¹®À¸·Î ³ëÃâµÈ °ÍÀÌ È®ÀεÊ. |
¸Þ¸ð¸®¿¡ Æò¹®À¸·Î ¾ÏÈ£È Å×À̺íÀ» ·ÎµùÇÏ°í ÀÖÀ¸¸ç, SGA¸¦ ¸Þ¸ð¸® DumpÇϸé Æò¹®À¸·Î ³ëÃâµÈ °ÍÀÌ È®ÀεÊ. |
Á¢±ÙÅëÁ¦°¡ ¾È µÇ´Â Ãë¾à¼º °ËÁõ |
¾Ï¡¤º¹È£Å°ÀÇ »ç¿ë¿¡ ´ëÇÑ º°µµÀÇ ±ÇÇÑÅëÁ¦ ±â´ÉÀÌ ¾ø¾î GRANTµÈ »ç¿ëÀÚ ¶Ç´Â DBA´Â º¹È£ÈµÈ Á¤º¸¸¦ º¼ ¼ö ÀÖ¾ú´Ù. °á±¹, DB°¡ °¡µ¿µÇ´Â µ¿¾ÈÀÇ º¸¾È¼ºÀÇ ¾ÏÈ£È ÀÌÀü°ú °°´Ù. |
Á µ¿ |
Å° ±â¹Ð¼º À¯Áö¿¡ °üÇÑ Ãë¾à¼º °ËÁõ |
ÀÎÁõ¼ ¹× Å° ÆÄÀÏ°ú ÇÔ²² µ¥ÀÌÅÍ ÆÄÀÏÀÌ À¯Ã⠵Ǵ °æ¿ì, ´Ù¸¥ ¼¹ö¿¡¼µµ Á¦¾à ¾øÀÌ Á¶È¸°¡ °¡´ÉÇÏ´Ù. |
wallet°ú wallet open script°¡ ÇÔ²² µ¥ÀÌÅÍ ÆÄÀÏ°ú À¯Ã⠵Ǵ °æ¿ì, ´Ù¸¥ ¼¹ö¿¡¼µµ Á¦¾à ¾øÀÌ Á¶È¸°¡ °¡´ÉÇÏ´Ù. ¶ÇÇÑ Script ¶Ç´Â Interactive session¿¡¼ Æнº¿öµå°¡ È¸é »ó¿¡ Æò¹®À¸·Î ³ëÃâµÈ´Ù. |
À̹ø¿¡ °ËÁõÇØ º» ¹æ¹ýÀº ÁÖ·Î °¢ º¥´õ»çÀÇ ±¸Ãà°¡ÀÌµå ¹®¼ÀÇ ÀýÂ÷¿¡ µû¶ó ½Ã¿¬ÇØ º¸¾ÒÀ¸¸ç, ÀÌ ¿Ü¿¡ ´Ù¸¥ ±¸Çö ¹æ¹ýµéµµ ÀÖÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª Áß¿äÇÑ °ÍÀº Àû¿ë ¹æ¹ý¿¡ µû¶ó º¸¾È»óÀÇ ÇãÁ¡À» ÁÙÀÏ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ´Â °æ¿ì¶ó ÇÏ´õ¶óµµ, º¸¾È Á¦Ç°Àº ¾î¶°ÇÑ ÇãÁ¡µµ À־ ¾È µÈ´Ù.
DBMS º¥´õ»ç¸¶´Ù °íÀ¯ÇÑ TDEÀÇ °³¹ß ¸ñÀûÀÌ ÀÖÀ» °ÍÀÌ°í ±â´ÉÀÇ ÇÑ°èÁ¡ ¶ÇÇÑ °ø½Ä ¹®¼¿¡ ¸íÈ®È÷ Àû½ÃÇÏ°í ÀÖÀ¸¹Ç·Î Àû¿ë ÇÏ·Á´Â ÀÔÀå¿¡¼ ÃæºÐÈ÷ ÀÎÁöÇÏ°í °¢Á¾ ±ÔÁ¤¿¡ ¸Âµµ·Ï ±¸¼ºÇÏ¿© ÃæÁ·ÀÌ °¡´É ÇÑ °æ¿ì´Â »ç¿ë¿¡ ¹®Á¦°¡ ¾øÀ» °ÍÀÌ´Ù.
À¯Ãâ À§ÇèÀ» ¾ø¾Ö±â À§Çؼ´Â ¾î¶°ÇÑ °æ¿ì¿¡µµ º¸¾È¼ºÀÌ À¯ÁöµÇ¾î¾ß Çϸç À̸¦ À§Çؼ´Â ÇÊ¿äÇÑ ¸ðµç Option(Oracle»çÀÇ °æ¿ì´Â, HSM°ú Data Vault ¹× Audit Vault µîÀÇ Á¦Ç°ÀÌ ÁغñµÇ¾î ÀÖÀ½)À» °®Ãßµµ·Ï »ç¿ëÀÚ¿¡°Ô ±Ç°íÇÏ´Â °ÍÀÌ Å¸´çÇÏ´Ù.
±¹³»¿ÜÀÇ DB¾ÏÈ£È¿Í °ü·ÃÇÑ ¸ðµç ¿ä°Ç ¹× ±ÔÁ¤À» ÁؼöÇÏ´Â Àü¹® º¸¾È Á¦Ç°µé°ú, ÀϺΠ¿ä°Ç¸¸ ÃæÁ·µÇ´Â Á¦Ç°ÀÌ µ¿ÀÏÇÑ Àã´ë·Î Æò°¡ µÇ´Â ºÒÇÕ¸®ÇÑ ¹®Á¦Á¡¿¡ ´ëÇÑ ÀÎ½Ä °³¼±µµ ÇÊ¿äÇÏ´Ù.
º» ±â°í¹®ÀÇ ÀÛ¼º ¸ñÀû ¶ÇÇÑ ÀÌ·¯ÇÑ Á¡À» Á¤È®È÷ ¾Ë°í ÇÑ°èÁ¡À̳ª º¸¾È»óÀÇ ÇãÁ¡¿¡ ´ëÇÑ º¸¿ÏÀ» ÇÏ¿©¾ß ÇÑ´Ù´Â ÃëÁö¿¡¼ ÀÛ¼ºµÇ¾úÀ¸¸ç, TDE¸¦ Àû¿ëÇØ °³ÀÎÁ¤º¸º¸È£ °ü·Ã ¹ý ±ÔÁ¤»óÀÇ ¿ä°Ç°ú DB¾ÏÈ£È Á¦Ç°ÀÇ º¸¾È ±â´É ¿ä°ÇÀ» ÃæÁ·ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Î ±¸Ãà ÇÒ °æ¿ì¿¡ ÃæÁ·µÇ´Â ºÎºÐ°ú ÃæÁ·ÇÒ ¼ö ¾ø´Â ºÎºÐÀÌ ¹«¾ùÀÎÁö, ±×·Î ÀÎÇØ °¨¼öÇØ¾ß ÇÒ ºÎºÐÀº ¾î¶² °ÍÀÌ ÀÖ´ÂÁö¸¦ Á¤È®È÷ ¾Ë°í ÀÌ¿¡ ´ëÇÑ ´ëºñÃ¥À» ¼¼¿ì´Âµ¥ Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÏ´Â ¹Ù¶÷ÀÌ´Ù.
[ Appendix ] findsga À¯Æ¿¸®Æ¼ÀÇ ¼Ò½º
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <sys/errno.h>
#define OUTLEN 1024
main(argc, argv)
int argc;
char *argv[];
{
key_t key;
size_t size;
unsigned char *pSGA, *pSGAtmp;
char sSearch[1024];
int nSearch;
int k, l;
int nRtn;
int nShmId = 0;
if (argc != 4) {
printf ("%s <key> <size> <search string>", argv[0]);
exit (-1);
}
/* Initialization */
strcpy (sSearch, argv[3]);
nSearch = strlen (sSearch);
/* get key and size */
#ifdef LINUX
key = strtoll (argv[1],NULL,16);
#else
key = strtol (argv[1],NULL,16);
#endif
printf ("Key = [%08x][%ld]", key, key);
size = atol (argv[2]);
printf ("size= [%ld]", size);
/* shmget */
printf ("shmget...");
nShmId = shmget (key, size, SHM_HUGETLB|0440);
if (nShmId == -1) {
printf ("Error shmget with SHM_HUGETBL with errno=[%d]", errno);
nShmId = shmget (key, size, 0440);
if (nShmId == -1) {
printf ("Error shmget with errno=[%d]", errno);
exit (-1);
}
}
/* attach SGA */
printf ("shmat...");
pSGA = shmat (nShmId, NULL, 0400);
if (pSGA == NULL) {
printf ("Error shmat with errno=[%d]", errno);
exit (-1);
}
/* find specific string */
int i, j;
for (i = 0; i < size; i++) {
if (pSGA[i] == sSearch[0]) {
for (j=1; j < nSearch; j++) {
if (pSGA[i+j] == sSearch[j])
continue;
else
break;
}
if (j == nSearch) {
/* printf ("Found: [%s]", &pSGA[i]); */
printf ("Found: [%s]", sSearch);
/* print data around it */
pSGAtmp = (&pSGA[i]) - OUTLEN/2;
for (k = 0; k < OUTLEN;k = k+16) {
printf ("%08p ", pSGAtmp);
for (l = 0; l < 8; l++) {
printf ("%02x%02x ", pSGAtmp[k+l], pSGAtmp[k+l+1]);
}
printf (" ");
for (l = 0; l < 16; l++) {
if (pSGAtmp[k+l] >= 0x20 && pSGAtmp[k+l] <= 0x7E)
printf ("%c", pSGAtmp[k+l]);
else
printf (".");
}
printf (" ");
} /* end of for k */
i = i + nSearch;
}
}
} /* end of for i */
shmdt (pSGA);
printf ("Done Searching SGA data.");
exit (0);
}
[±Û_Á¶µ·¼· À̱۷ιú½Ã½ºÅÛ ÀÌ»ç(alex@cubeone.co.kr)]
<ÀúÀÛ±ÇÀÚ: º¸¾È´º½º(http://www.boannews.com/) ¹«´ÜÀüÀç-Àç¹èÆ÷±ÝÁö>