INFORMATION_SCHEMA ์์๋ณด๊ธฐ
- -
์ด๋ฒ ํฌ์คํ ์ 'MySQL'์ฆ 'DataBase(DB)'์ ๋ํ ์ ์์ ๋ฉํ ๋ฐ์ดํ,
๊ทธ๋ฆฌ๊ณ MySQL์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ information_schema์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL)๋?
์ํค๋ฐฑ๊ณผ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๊ณ ์์ต๋๋ค.
"์ฌ๋ฌ ์ฌ๋๋ค์ด ๊ณต์ ํ๊ณ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ํตํฉ ๊ด๋ฆฌ๋๋ ์ ๋ณด์ ์งํฉ์ด๋ค. ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ด๋ ํ๋ ์ด์์
์๋ฃ์ ๋ชจ์์ผ๋ก ๊ทธ ๋ด์ฉ์ ๊ณ ๋๋ก ๊ตฌ์กฐํํจ์ผ๋ก์จ ๊ฒ์๊ณผ ๊ฐฑ์ ์ ํจ์จํ๋ฅผ ๊พํ ๊ฒ์ด๋ค.
์ฆ ๋ช ๊ฐ์ ์๋ฃ ํ์ผ์ ์กฐ์ง์ ์ผ๋ก ํตํฉํ์ฌ ์๋ฃ ํญ๋ชฉ์ ์ค๋ณต์ ์์ ๊ณ ์๋ฃ๋ฅผ ๊ตฌ์กฐํํ์ฌ ๊ธฐ์ต์์ผ ๋์
์๋ฃ์ ์งํฉ์ฒด๋ผ๊ณ ํ ์ ์๋ค."
์ฆ ์ฝ๊ฒ ๋งํ์๋ฉด ์ฌ๋ฌ ์ฌ๋๋ค์ด ์ฌ์ฉ ํ ์ ์๋ "๋ฐ์ดํฐ์ ์งํฉ" ์ด๋ผ๋ ๊ฒ์ธ๋ฐ์
๊ทธ๋ ๋ค๋ฉด MetaData๋ ๋ฌด์์ผ๊น์.
๋ฉํ ๋ฐ์ดํ
๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ์ ๋ฆฌํ์ฌ ๊ฐ์ ๊ฐ์ง๊ณ ์๊ณ , ๊ทธ ํ ์ด๋ธ์ ์ ๋ฆฌํ์ฌ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋งํ๋๋ฐ์
ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค์ผ ํ๋ ๊ฒฝ์ฐ์ ํจ์จ์ ์ธ ์ ๋ณด ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ง๋ ๊ฒ ์ ๋๋ค.
์ข๋ ์์ธํ ์ค๋ช ๋๋ฆฌ์๋ฉด,
๋ฐ์ดํฐ์ ์ข ๋ฅ๊ฐ ๋๋ฌด ๋ง์์ง ๊ฒฝ์ฐ ์ด ๋ํ ๋ชฉ๋กํ ์ํฌ ํ์๊ฐ ์๊ธฐ๋๋ฐ,
์ด๋ฌํ ์๊ตฌ์ ๋ง์ถฐ ์๊ฒจ๋ ๊ฒ์ด ๋ฐ๋ก ๋ฉํ ๋ฐ์ดํฐ ์ ๋๋ค.
์ฝ๊ฒ ๋งํด ์ ๋ณด์ ๋ํ ์ ๋ณด๋ผ๊ณ ํ ์ ์์ผ๋ฉฐ, Karen Coyle์ ์ํ๋ฉด "์ด๋ค ๋ชฉ์ ์ ๊ฐ์ง๊ณ ๋ง๋ค์ด์ง
๋ฐ์ดํฐ (Constructed data with a purpose)"๋ผ๊ณ ๋ ์ ์ํฉ๋๋ค.
๋ฐ๋ผ์ MySQL ๋ํ ์์ธ์์ด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ์,
MySQL์ ๋ฉํ๋ฐ์ดํฐ๋ค์ ์ข ๋ฅ๋ณ๋ก ๋ฌถ์ด์ ํ ์ด๋ธ์ ๋ง๋ค๊ณ ์ด ํ ์ด๋ธ์ ๋ชจ์ ํ๋์ ์๋ก์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ
๋ง๋ค์ด ๋์์ต๋๋ค.
์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐ๋ก INFORMATION_SCHEMA๋ผ๊ณ ํ๋ ๊ฒ ์ ๋๋ค.
MySQL์ค์น ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ค์ด์ ธ์๋๋ฐ, ์ด์ ๋ MySQL์๋ฒ๊ฐ ์ด์ํ๋ ๋ชจ๋
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณณ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋ง ์ค์ํ ์ ์ฅ ์ฅ์์ง๋ง, ๋ฏผ๊ฐํ ์ ๋ณด๋ค ๋ํ ๋ค ํฌํจ๋์ด์๊ธฐ ๋๋ฌธ์
SQL ์ธ์ ์ (Injection)๊ณผ ๊ฐ์ ๊ณต๊ฒฉ์ ์ด์ฉ๋ ์๋ ์์ต๋๋ค.
INFORMATION_SCHEMA
- ๋ฐ์ดํฐ์ ์ํ ๋ฐ์ดํฐ (= ๋ฉํ ๋ฐ์ดํฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ ๋ฐ์ดํฐ๋ค์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์)
- ์์คํ ์นดํ๋ก๊ทธ๋ผ๊ณ ๋ ํจ.
โผ information_schema ํ ์ด๋ธ ๊ตฌ์กฐ ์ดํด๋ณด๊ธฐ
information_schema์ ๋ด๋ถ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ์ ํ ์ด๋ธ์ด ์กด์ฌํ๋๋ฐ,
๊ฐ ํ ์ด๋ธ์ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ๋ค.
| CHARACTER_SETS : ์ฌ์ฉ๊ฐ๋ฅํ ๋ชจ๋ ๋ฌธ์ ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
| COLLATIONS : ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ฝ๋ ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ฝ๋ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๊ฐ๋ค์ ๋น๊ต, ๊ฒ์ํ๊ฑฐ๋ ์ ๋ ฌ ๋ฑ์ ์์ ์ ์ํด ๋ฌธ์๋ค์ ์๋ก ๋น๊ตํ ๋ ์ฌ์ฉํ๋ ๊ท์น๋ค์ ์งํฉ์ด๋ค.
| COLLATION_CHARACTER_SET_APPLICABILITY : ์ด๋ค ์ฝ๋ ์ ์ ์ด๋ค ๋ฌธ์์ด ์ธํธ๊ฐ ์ ์ฉ๋๋์ง๋ฅผ ํ์ํ๋ค.
| COLUMNS : ํ ์ด๋ธ ์นผ๋ผ์ ์ฝ๋ ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์นผ๋ผ์ด๋ผ๋ char, varchar, text ํํ์ ์ปฌ๋ผ์ ์ฝ๋ ์ ์ ๊ฐ์ง๋ค. ๋น๋ฌธ์ ํ์ ์ ์ฝ๋ ์ ์ ๊ฐ์ง์ง ์๋๋ค.
| COLUMN_PRIVILEGES : ํ ์ด๋ธ ์นผ๋ผ ๊ถํ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
| KEY_COLUMN_USAGE : ์ ์ฝ์ฌํญ์ ๊ฐ์ง๊ณ ์๋ ํค ์ปฌ๋ผ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
| REFERENTIAL_CONSTRAINTS :
| ROUTINES : ์คํ ์ด๋ ๋ฃจํด์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ์คํ ์ด๋ ๋ฃจํด์ด๋ DB์์ ์ ์ฅ์ด ๊ฐ๋ฅํ SQL ๊ตฌ๋ฌธ์ด๋ค.(ํ๋ก์์ , ํจ์ ํฌํจ)
| SCHEMATA : ํ๋์ ์คํค๋ง๋ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค. SCHMATA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
| STATISTICS : ํ ์ด๋ธ ์ธ๋ฑ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
| TABLES : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กด์ฌํ๋ ํ ์ด๋ธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
| TABLE_CONSTRAINTS : ํ ์ด๋ธ์ ๋ํ ์ ์ฝ์ฌํญ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
| TRIGGERS : ํธ๋ฆฌ๊ฑฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ํธ๋ฆฌ๊ฑฐ๋ ํ ์ด๋ธ์ ๋ํ ์ด๋ฒคํธ์ ๋ฐ์ํ์ฌ ์๋์ผ๋ก ์คํ๋๋ ์์ ์ ์๋ฏธํ๋ค.
| USER_PRIVILEGES : ๊ธ๋ก๋ฒ ๊ถํ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ๊ธ๋ก๋ฒ ๊ถํ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๊ถํ์ด ์ฃผ์ด์ง๋ ๊ถํ์ด๋ค.
| VIEWS : DB์ ์๋ ๋ทฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
์ ํ ์ด๋ธ์ ๋ํ ์ค๋ช ์ https://luckyyowu.tistory.com/22
์ด๋ถ ๋ธ๋ก๊ทธ๋ฅผ ๋ด์์จ ๊ฒ์ ๋๋ค. (์ถ์ฒ)
๋ด์ฉ ์ค๋ช ์ด ๋งค์ฐ ์ ๋์ด์์ผ๋ ๋ค์ด๊ฐ์ ์ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
** ์๋๋ SQL ์ธ์ ์ ๊ณผ ๊ด๋ จํ ๋ฉํ ๋ฐ์ดํ ๋ด์ฉ์ ๋๋ค. **
information_schema์ ํ ์ด๋ธ ์ค์์ schemata ๋ผ๋ ํ ์ด๋ธ์ ๊ตฌ์กฐ์ธ๋ฐ์, ์ด๊ณณ์์ DB์ด๋ฆ์ ์ ์๊ฐ ์๋ค์.
๋ณดํต sql ์ธ์ ์ ์์ ์ฌ์ฉํ๋ ๋ฐฉ์ ์ค, DataBase ์ด๋ฆ์ information_schema.tables์์ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋๋ฐ,
์ด๋ ๊ฒ ๋ค๋ฅธ ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช ์ ์๊ณ ์์ผ๋ฉด, ์ฐํํ์ฌ ์ ๋ณด๋ฅผ ํ์ทจํ ์ ์๊ฒ ์ฃ ?
ex) 0' union select all 1,schema_name,3,4,5,6,7 from information_schema.schemata #
๊ฒ์ฆํ์ง ์๋ ์ฌ์ดํธ์ธ ๊ฒฝ์ฐ sql์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅํด ์ ๋ณด๋ฅผ ํ์ทจ ํ ์ ์๋ค.
DB์ด๋ฆ์ ๋ฝ์๋ผ ๋ ์์๊ฐ์ด schema_name ์ด๋ผ๋ ์ปฌ๋ผ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ
schemata๋ผ๋ ํ ์ด๋ธ์์ ๊ฐ์ ธ์จ๋ค.
ex2) 0' union select all 1,table_schema,3,4,5,6,7 from information_schema.tables #
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก tables ๋ผ๋ ํ ์ด๋ธ์์ table_schema๋ฅผ ๊ฐ์ ธ์๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋ค.
์ฆ ํด์ปค์ ์ฅ์์ ๋ฉํ๋ฐ์ดํฐ์ ๋ํ ์ดํด๋๊ฐ ๋์ผ๋ฉด ์ฐํํ ๋ฐฉ๋ฒ์ด ๋ ๋ค์ํ ๊ฒ์ด๋ค.
๋ง์ผ ๋ด๊ฐ ํด์ปค๋ผ ๊ฐ์ ์ ํ์์ ๊ฒฝ์ฐ
(๋ฌผ๋ก ํ๋ฝ๋์ง ์์ ๋ชจ๋ ์ฌ์ดํธ์์ ์ค์ ๊ณต๊ฒฉ์ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค.
๋ชจ๋ ๋ฒ์ ์ฑ ์์ ์์ ์๊ฒ ์์์ ํญ์ ์ธ์งํ๊ณ ๋๋์ ์ผ๋ก ํ๋ํฉ์๋ค^_^)
SQL injection ์ทจ์ฝ์ ์ด ์๋ ์ฌ์ดํธ๋ฅผ ๋ฐ๊ฒฌํ์์๋, DB ์ด๋ฆ๊ณผ, ์ปฌ๋ผ ์ด๋ฆ, ํ ์ด๋ธ ์ด๋ฆ ๋ฑ์ ์์ง ๋ชปํ๋ค๋ฉด,
์ฌ์ค ์ ์ฃผ์ ์ ๋ณด๋ฅผ ํ์ทจํ๊ธฐ๋ ์ปค๋ .. ๋ณ๋ก ์๋ฏธ ์๋ ๊ณต๊ฒฉ์ด ๋ ์๋ ์๊ฒ ์ฃ .
ํ์ง๋ง ๋ด๊ฐ ๋ง์ผ ๋น ์ญํ๊ฒ ๋ฉํ๋ฐ์ดํ๋ฅผ ์๊ณ ์๋ค๋ฉด?
๊ทธ๋ ๋ค๋ฉด ์ฐพ์ ์ ์๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ์ค์ํ ์ ๋ณด์์ฐ์ ํ์ทจํ๊ฒ ์ฃ ?
์๋๋ information_schema์์ tables์ columns ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ ๊ฒ
๊ฒฐ๋ก ์, ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ฐ๋ ์ ์ฅ์์
์น๋ช ์ ์ธ ์ ๋ณด ์ ์ถ์ ๋ง๊ธฐ์ํด, ๋ ธ์ถ์ด ๋์ง ์๋๋ก ์กฐ์ฌํ์ฌ ๋ณด์์ ํด์ผ ํ๋ค๋ ๊ฒ์ด์ฃ ^_^
๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ์ฌ์ค ๊ณต๊ฒฉํ๋ ์ ์ฅ๋ ๋น ์ญํ ์๊ณ ์์ด์ผ ํ๋,
๋ ์ด์ฌํ ๊ณต๋ถํฉ์๋ค
'Game > Bee-box' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Bee-box] SQL ์ธ์ ์ - POST/Search (0) | 2020.07.24 |
---|---|
[Bee-box] SQL ์ธ์ ์ - GET/Search (0) | 2020.07.24 |
[Bee-box] ๊ธฐํ ์ธ์ ์ ๊ณต๊ฒฉ- SSI ์ธ์ ์ (1) | 2020.07.21 |
[Bee-box] ๊ธฐํ ์ธ์ ์ ๊ณต๊ฒฉ- php ์ฝ๋ ์ธ์ ์ (0) | 2020.06.08 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค