저는 장고 앱에서 프로그래밍 방식으로 MySQL 사용자를 생성해야하는 프로젝트에서 작업하고 있습니다. 사용자를 잘 만들 수 있습니다.MySQL-Python이 데이터베이스 이름 매개 변수 주위에 따옴표를 삽입하지 못하도록 방지합니다.
from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("CREATE USER %[email protected]'%'", 'username')
cursor.execute("SET PASSWORD FOR %[email protected]'%' = PASSWORD(%s)", ('username', 'pass'))
완벽하게 작동합니다. 문제는 사용 권한을 부여하려고 할 때입니다. 데이터베이스 이름은 프로그래밍 방식으로 결정됩니다
는 문자열 대체를하면, 그것은 구문 적으로 잘못된 데이터베이스 이름, 주위에 작은 따옴표를 배치하기 때문에 이것은 MySQL의 오류가 발생cursor.execute("GRANT SELECT ON %s.* TO %[email protected]'%'", ('dbname', 'username'))
:
DatabaseError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''dbname'.* to 'username'@'%'' at line 1")
데이터베이스 이름에 대해 %s
주위에 작은 따옴표를 추가하지 않으려면 어떻게해야합니까? 파이썬에서 단순히 문자열 대체를 수행하고이를 수정할 수는 있지만 SQL 주입 취약점이 발생할 수 있음을 알고 있습니다.
가능하지 않을 수도 있습니다. mysql-python docs : _Parameter 자리 표시 자에 따르면 열 값을 삽입하는 데만 사용할 수 있습니다. 테이블 이름, 문장 등과 같은 SQL의 다른 부분에는 사용할 수 없습니다. – dgel