MySQL 데이터베이스에 안전하게 연결하는 방법
라즈베리 파이에 MySQL 데이터베이스가 있습니다.다음과 같이 설정합니다.
sudo mariadb -u root -p
CREATE DATABASE Login;
CREATE USER RaspberryPi@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON Login.* TO RaspberryPi@'%';
SELECT Login;
CREATE TABLE Users;
파이톤 코드는 다음과 같습니다.
import mysql.connector
mydb = mysql.connector.connect(host="addr_of_pi", user="RaspberryPi", passwd="password", database="Login")
mycursor = mydb.cursor()
mycursor.execute("SELECT * FROM Users")
print(mycursor)
문제는 이 스크립트를 .exe 파일로 사용자에게 주고 싶지만 내 데이터베이스에 계정 자격 증명을 주고 싶지 않다는 것입니다.나는 그것을 사용해봤어요.PyProtect
.exe 스크립트는 아직 읽을 수 있습니다.저도 한번 써봤어요.os.gentenv(...)
이 경우 읽을 수 있는 자격 정보를 사용하여 .env 파일을 생성해야 합니다.그럼 다른 방법은 없나요?
나는 이것을 하는 데 쉽게 안전한 방법이 없다고 생각한다.자격 증명이 코드에 저장되어 있는 한, 또는 자격 증명을 취득하는 방법(예: 웹 페이지에 대한 요청)에 관계없이, 사람들은 자격 증명을 추출할 수 있습니다.자신의 서버를 실행하고 API를 작성하는 방법을 알아보세요.
PHP 또는 Django/python을 사용하여 데이터베이스 자격 증명을 웹 서버 뒤에 숨깁니다.실제 데이터베이스로의 접속은 거기에서 이루어지며, .exe 어플리케이션은 데이터베이스로부터의 데이터 취득을 처리하는 서버상의 API에 접속해야 합니다.당신의 친구가 얼마나 경험이 많은지, 혹은 다른 사람들이 앱을 사용할지는 모르겠지만, 서버 셋업과 API를 배우는데 시간을 투자할 것을 강력히 추천합니다.
당신의 경우에, 여러분의 라즈베리 파이에 대한 장고 서버를 실행하고를 바라보세요.그 Python응용 프로그램이 데이터베이스 기능 상황에 요청의 API에 일종이 될 것이다.
이후의 API와 당신의 데이터베이스에 아무돈 완전한 접근을 주지 않을 것 행동에 대한 특정 집합을 허용할 것이다 이런 식으로, 당신의 데이터베이스 자격과 자료, 안전하다.
면책사항:그것은 서버에 들어가려고 등은 아직 시계를 API, SQL주사에 대한 보호, 가는 게 좋겠다그것은 필요로 한다 노력은 데이터베이스 보호한다.
긴 설화가 발표하는 것"잠재적으로" 깨지기 쉬운 짧은.
가운데auth 서버 추가가 핵심 이슈를 해결할 것이다.그는 당신의 서버에, 당신의 서버에 연결되어 있...신경쓰지 말아요.
슬픈 일이지만, 기본적으로 너는 사용자를 보낸다고 말하는 것은 그냥 균열이 없어야 할 것이라고 추측한다.당신은 더 어렵blah 있으며, 그러나 그날 사용자 측 보안( 의한 지금 설치를 클릭의 db creds는 것)의 말에 본질적으로 쓸모 없게 될 수 있다.당신은 말 그대로 앱에서도 그런 식으로 노출시키는가 자격 증명 -never-해야 한다.
저장 프로시저를 사용해 보십시오.
exe 파일은 쉽게 디컴파일 할 수 있습니다.대부분의 경우 텍스트 편집기에서 파일을 열고 문자열을 볼 수 있기 때문에 접근 방식이 안전하지 않습니다.
대신 다음 작업을 수행해야 합니다.
- 다음 작업을 수행하는 저장 프로시저를 만듭니다.
CREATE DEFINER=root@'%' PROCEDURE SelectUsers()
READS SQL DATA
BEGIN
SELECT
*
FROM Users;
END
- 사용자에게 프로시저를 실행할 수 있는 권한만 부여합니다. 순서는 '하다'로 되어 있기
DEFINER=root@'%'
RasberryPi 사용자는 루트 사용자를 대신하여 데이터를 취득하므로 테이블 자체에 대한 접근권을 부여할 필요가 없습니다.
GRANT EXECUTE ON PROCEDURE Login.SelectUsers TO 'RaspberryPi'@'%';
- 다음과 같이 스크립트를 전달합니다.
import mysql.connector
mydb = mysql.connector.connect(host="addr_of_pi", user="RaspberryPi", passwd="password", database="Login")
mycursor = mydb.cursor()
mycursor.execute("CALL SelectUsers()")
print(mycursor)
이 방법에서는 LasberryPi 사용자는 데이터베이스 내의 어떤 테이블에도 액세스할 수 없으며, 사용자가 실행 권한을 부여한 저장 프로시저를 호출하기만 하면 됩니다.따라서 Python 스크립트를 "exe"할 필요가 없습니다.
인수로서 유저명과 패스워드를 지정하는 것을 검토해 주세요.
user = input()
password = input()
보다 안전한 방법으로 getpass 모듈을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/70551689/how-to-securely-connect-to-mysql-database
'source' 카테고리의 다른 글
Maven 빌드 컴파일 오류 : goal org.apache.maven을 실행하지 못했습니다.플러그인: maven-compiler-plugin: 3.1: 프로젝트 Maven의 컴파일(기본 컴파일) (0) | 2022.09.05 |
---|---|
javascript 자체 실행 기능의 목적은 무엇입니까? (0) | 2022.09.05 |
MySQL/MariaDB - 쿼리의 HAVING 부분 내에서 SELECT 쿼리의 필드 값을 덮어씁니다. (0) | 2022.09.05 |
Java Lombok:@AllArgsConstructor에서 필드 하나를 생략하시겠습니까? (0) | 2022.09.04 |
python/numpy를 사용하여 백분위수를 계산하는 방법은 무엇입니까? (0) | 2022.09.04 |