티스토리 뷰
필자의 sql injection 독립성을 위해 작성하며, 글의 구성이 불완전하거나 내용이 사실과 다를 수 도 있다.
1. 버전
Mysql | Mssql | oracle |
@@version | @@version | v$version |
version() | X | X |
Mysql
- select version()
- select @@version
Mssql
- select @@version
Oracle
- select * from v$version
2. 스키마 객체
Mysql
- information_schema // Mysql서버가 운영하는 모든 데이터가 저장되어있다.
- current_user() // 현재 mysql서버에 접속한 유저 목록을 출력해준다.
- table_name // information_schema.tables 내부의 table을 출력한다.
- column_name // information_schema.columns 내부의 column을 출력한다.
ex) select column_name from infromation_schema.columns where table_name='테이블이름' // 칼럼명 조회
ex) select table_name from information_schema.tables where table_type='base table'// 테이블 조회
Mssql
- information_schema //
- sys.objects // 동일한 용도로 sysobjects가 있으나 2008 버전부터는 하위 호환성을 위해서 유지하고 있다.
- sys.columns // 동일한 용도로 syscolumns가 있으나 2008 버전부터는 하위 호환성을 위해서 유지하고 있다.
- sysobjects //
- syscolumns //
ex) select name from sys.objects where type='u' // 테이블을 조회하며 u는 user-defined table을 의미한다.
mysql에서의 base table과 의미가 동일하다.
ex) select name,object_id from sys.objects where type ='u' // 시스템 카탈로그 뷰를 통한 칼럼 조회는 객체 식별을 위한 객체 번호(object_id)가 필요하다.
ex) select name from sys.columns where object_id=0000000000 // object_id가 테이블 이름이라 생각하면 편하다.
Oracle
- all_tables // 현재 사용자가 접근할 수 있는 모든 테이블에 관한 정보
- user_tables // 현재 사용자 소유의 관계형 테이블에 관한 정보
- dba_tables // 모든 데이터베이스 내의 관계형 테이블에 관한 정보
- all_tab_columns // 현재 사용자가 접근할 수 있는 모든 테이블에 대한 칼럼 정보
- user_tab_columns // 현재 사용자 소유의 모든 테이블에 대한 칼럼 정보
- dba_tab_columns // 모든 테이블에 대한 칼럼 정보
- tabs // user_tables의 동의어이다.
- cols // user_tab_columns의 동의어이다.
- tab // 구 버전에서 사용했던 객체이며 칼럼으로 tname을 사용한다.
- col // 구 버전에서 사용했던 객체이며 칼럼으로 cname을 사용한다.
ex) select table_name from tabs // 테이블 이름을 출력해준다.
ex) select column_name from cols where table_name='테이블 이름' // 테이블 이름의 칼럼을 출력해준다.
3. 주석
Mysql | Oracle, mssql |
/**/ | /**/ |
--+- | --+- |
# |
4. 문자열 연결
Mysql | Mssql | Oracle |
공백, 탭, 개행 | + | || |
'a' 'b' | 'a'+'b' | 'a'||'b' |
5. limit
Mysql
- limit a,b // a번째부터 b개수만큼 출력한다.
ex) order by 1 limit 0,3 // 첫 번째부터 3개를 출력한다.
Mssql
- offset n rows // order by 절이 나와야 사용 가능 하머 n개를 건너뛴 다음행부터 출력한다. 2012 버전 이후에 생김
ex) order by 1 offset 3 rows fetch next 1 rows only // 3개를 건너뛰고 다음 1개의 행만 불러온다.
Oracle
- offset n rows // order by 절이 나와야 사용 가능하머 n개를 건너뛴 다음행부터 출력한다. 2012 버전 이후에 생김
ex) order by 1 offset 3 rows fetch next 1 rows only // 3개를 건너뛰고 다음 1개의 행만 불러온다.
mssql과 완전히 동일하다.
6. 칼럼명 하나로 합치기
Mysql
- concat(a,b) // a 문자열과 b 문자열을 합친다.
- concat_ws('n',a,b) //n은 구분자이고 a와 b는 문자열이다.
- group_concat(a) //a는 칼럼명이며 하나의 문자열로 합쳐서 보여준다.
ex) concat(a,b) // 'ab'
ex) concat_ws('::',a,b) // 'a::b'
ex) group_concat(name, separator '::') // 'name1::name2::name3...'
Mssql
- string_agg(a, 'b') // a는 칼럼명이고 b는 구분자이다.
- concat(a,b) // a와 b를 합친다
ex) string_agg(name, '::') // 'name::name2::name3 ...'
ex) concat(a,b) // 'ab'
Oracle
- concat(a,b) // a와 b를 합친다.
- listagg(a,'b') //a는 칼럼명 b는 구분자이다.
- wm_concat(name) // name을 , 로 구분 지어 나타내어준다.
ex) concat(a,b) // 'ab'이다. 하지만 oracle은 concat에서 인자를 2개만 받기에 중첩 concat을 사용해야 한다.
ex) listagg(name, '::') // 'name1::name2...' 뒤에 반드시 within group(order by 1) 이 와야 사용 가능하다.
'SQL injection > injection 문법' 카테고리의 다른 글
database 함수 정리 (0) | 2022.02.22 |
---|
- Total
- Today
- Yesterday
- lord of sql
- 백준 피보나치
- 자바
- samron
- java
- 코딩테스트 준비
- 상속
- 김영한 실전 자바 중급
- 김영한 실전 자바 기초
- 백준 피보나치 수열
- 상품을 구매한 회원 비율 구하기 파이썬
- 백준
- spring
- 기술스택
- Los
- samron3
- webhacking.kr
- static
- ys.k
- 프로그래머스 상품을 구매한 회원 비율 구하기
- los 15단계
- 코딩테스트
- 프로그래머스 상품을 구매한 회원 비율 구하기 파이썬
- 김영한
- extends
- 김영한 실전 자바 기본
- 프로그래머스
- 스프링
- los 15
- zixem
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |