사용자 그룹이 DBD::mysql
을 사용하여 Perl의 DBI를 통해 mysql에 제출할 수 있도록 허용하는 경우 사용자가 데이터베이스를 변경하거나 중요하지 않은 정보를 유출하거나 중요한 문제를 일으킬 수있는 것이 무엇이든 $ 할 수 있습니다. 데이터베이스로드? 그렇다면 어떻게?mysql에서 "설명 ..."항상 안전합니까?
나는 "explain $whatever"
하나의 테이블/컬럼이 존재 알아낼 수 있습니다 통해 (는하지만, 이름을 추측에 당신이) 알고와 테이블에 얼마나 많은 기록이다 대략 또는 얼마나 많은 레코드는 인덱스 필드에 대한 특정 값이 . 인덱스되지 않은 필드의 내용에 대한 정보를 얻을 수있을 것으로 기대하지 않습니다.
DBD::mysql
은 여러 개의 명령문을 허용해서는 안되므로 모든 쿼리를 실행할 수 있다고 기대하지 않습니다. 하위 쿼리조차도 실행하면 안됩니다.
하지만 저는 MySQL 전문가가 아니며 분명히 인식하지 못하는 MySQL 기능도 있습니다.
쿼리 계획을 세우려고 할 때 인덱스 된 필드를 비교할 값을 찾기 위해 옵티마이 저가 실제로 식을 실행할 수 있습니까?
explain select * from atable where class = somefunction(...)
atable.class
색인 및 고유하지와 class='unused'
더 기록을 찾을 수 없을 것입니다하지만 class='common'
백만 기록을 찾을 것입니다된다.을 평가할 수 있습니까? 그리고 나서 somefunction(...)
이 데이터를 수정하도록 작성 될 수 있습니까?
아마도 안전하지만 어쨌든 그렇게하지는 않을 것입니다.)'explain '로 속일 이유가있는 사람은 DB 및 mysql CLI 테스트 사본을 받아야합니다. 테스트 DB를 필요로하지 않는 사람은 쿼리 작성으로 저장해야하므로'explain'이 필요하지 않습니다.) – hobbs