동료가 방금 아주 이상한 MySQL 동작을 알게했습니다.실패한 삽입시 MySQL 자동 증가가 증가하는 이유는 무엇입니까?
auto_increment 필드가있는 테이블과 고유 (예 : 사용자 이름 필드)로 설정된 다른 필드가 있다고 가정합니다. 이미 테이블에있는 사용자 이름과 함께 행을 삽입하려고하면 삽입이 실패합니다. 그러나 auto_increment 값은 몇 번의 실패한 시도 후에 유효한 새 항목을 삽입 할 때 볼 수 있듯이 증가합니다.
예를 들어, 우리의 마지막 항목은 다음과 같습니다 때 ...
ID: 10
Username: myname
... 그리고 우리는 우리가 같은 새 행을 만든 것입니다 우리의 다음 삽입에 동일한 사용자 이름 값을 다섯 개 개의 새로운 항목을보십시오 그래서 :
ID: 16
Username: mynewname
이 실패한 삽입 요청으로 범람하여 테이블을 죽일 매우 어리석은 공격 벡터 것 같아 그 자체로 큰 문제는 MySQL을 참조 설명서 상태로, 아니지만 :
"[-] 값이 지정된 정수 유형에 저장할 수있는 최대 정수보다 커지면 자동 증가 메커니즘의 동작이 정의되지 않습니다."
이 예상되는 동작입니까?
공격 벡터가 아닌 문제를 보인다 제대로 작동 않습니다. 실패한 삽입 요청으로 플러딩 할 수 있다면 실패하지 않은 요청으로 균등하게 플러드를 적용 할 수 없습니까? –
수동으로 설명하는 대신 ** 코드 **를 재현 할 수 있습니까? –
@martin smith : 그렇다고해서 새로운 사용자가 급격히 증가한 것은 auto_increment가 자동 증가하는 것보다 더 분명 할 것이라고 생각합니다. 확인하지 않으면 길가에 잘 빠질 수 있습니다. – Sorcy