programing

MySQL/Maria에서만 명령을 프로시저로 제한DB

copyandpastes 2023. 6. 15. 22:55
반응형

MySQL/Maria에서만 명령을 프로시저로 제한DB

저는 많은 공용 코드를 사용하여 FiveM 서버를 구축했고 사용자가 기본 데이터베이스를 손상시키거나 삭제할 수 있는 치트 시스템이 있다는 것을 발견했습니다.그 이유는 그들이 DROP, DELETE INSERT 및 UPDATE를 포함할 수 있는 Lua 스크립트를 주입할 수 있고 스키마가 잠재적으로 원하는 모든 것을 할 수 있다는 것을 알고 있다면 가능하기 때문입니다.

제 의도는 SELECT를 제외한 모든 명령에 대한 액세스를 거부하고 다른 모든 로직을 저장 프로시저로 이동하는 것입니다.문제는 프로시저를 실행하는 사용자가 게임 사용자 계정이 될 것이라는 것입니다. 잠기면 서버 측도 차단됩니까?호출 중인 응용 프로그램의 액세스를 거부할 수 있지만 저장 프로시저 내에서 액세스를 허용하거나 일반 SELECT 문이 아닌 다른 계정으로 프로시저를 실행할 수 있습니까?다른 고려사항이나 디자인이 있습니까?주입을 방지하기 위해 모든 호출에 매개 변수를 사용할 예정이지만 MySQL은 처음이라 사람들이 이러한 시나리오에 대해 어떤 다른 조치를 취하는지 궁금합니다.

예, MySQL 사용자에게 프로시저 호출 권한만 부여할 수 있습니다.그런 다음 절차를 정의한 사용자의 권한으로 절차가 실행됩니다.

https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html 에 대한 부분을 읽어 보십시오.SQL SECURITY선택의 여지가 있는 것.DEFINER또는INVOKER기본값은DEFINER그게 당신이 원하는 것입니다.

그러나 앱 사용자에 대한 SELECT 권한도 거부해야 합니다.악의적인 사용자는 SELECT 권한만 가지고도 문제를 일으킬 수 있습니다.데이터를 변경할 수는 없지만 데이터베이스 서버에 과부하가 걸릴 수 있습니다.

따라서 읽기 및 쓰기 모두에 대한 모든 데이터베이스 쿼리를 저장 프로시저 모음에서 구현해야 합니다.

대안으로 제시할 수 있는 제안입니다.앱이 사용자 이름을 사용하여 연결하고 SQL 쿼리를 직접 수행하는 현재와 같이 작동하도록 허용합니다.

그러나 사용자가 Lua 스크립트를 호출하려는 경우 제한된 권한을 가진 다른 MySQL 사용자를 사용하여 별도의 데이터베이스 연결에서만 Lua 스크립트를 호출할 수 있습니다.기본적으로 오직.EXECUTE특정 스키마에 대한 권한입니다.Lua 스크립트가 실행할 수 있는 저장 프로시저 집합을 구현하여 해당 스키마에 넣을 수 있습니다.그러면 Lua 스크립트는 앱이 수행하는 다른 작업을 수행할 수 없고, Lua 스크립트는 실행할 수 있도록 허용할 유한 프로시저 집합만 실행할 수 있습니다.

언급URL : https://stackoverflow.com/questions/66163968/restricting-commands-to-procedure-only-in-mysql-mariadb

반응형