본문 바로가기

Python

[PYTHON] DB SSL 연결 (feat. sql alchemy / mariadb)

반응형

DB 설정 및 ssl 인증서 설정

https://24hours-beginner.tistory.com/389#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8_SSL_%EC%97%B0%EA%B2%B0_(Python_-_SQL_Alchemy) 

 

[MariaDB] 외부접속시 TLS/SSL 활성화 (feat. OpenSSL)

재직하고 있는 회사에서 한 서버에 api 서버와 db 서버가 같이 있어 보안에 별로 신경을 안 썼다. 하지만 회사가 조금 커지고 서버도 더 사주셔서 웹서버와 db 서버가 실질적으로 분리되었고, 보안

24hours-beginner.tistory.com

 

Python db ssl 접속 (feat. sql alchemy)

ssl 경로 적어주기 

다양한 요인에 의하여 문법 등이 달라질 수 있다.

connect_args={'ssl':{    "sslca": "/etc/mysql/ca-cert.pem"  }},

인터넷에 찾아보면 아래 문법이 가장 많이 나오는데 나는 되지 않았다.

connect_args={'ssl_context': ssl_context},

예시 전체 문법

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import ssl

ssl_context = ssl.SSLContext()

SQLALCHEY_DATABASE_URL = 'mysql+pymysql://test:test123@127.0.0.1/test_db?charset=utf8mb4'

engine = create_engine(
  SQLALCHEY_DATABASE_URL,
  connect_args={'ssl':{
    "sslca": "/etc/mysql/ca-cert.pem"
  }},
  # connect_args={'ssl_context': ssl_context},
  echo=True,
  pool_recycle=900,
  pool_pre_ping=True
)

SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)

def get_db():
  db = SessionLocal()
  try:
    yield db
  finally:
    db.close()

Base = declarative_base()

 

 

확인하기

통신을 확인해보면 알 수 있는데 식자는 할 줄 모른다.

 

그래서 쉽게 할 수 있는 그냥 함수 실행을 하였다.

SHOW SESSION STATUS LIKE 'Ssl_cipher'

예시 함수

async def text(db: Session = Depends(get_db)):
  """
  `test`
  """
  ssl = db.execute(text("SHOW SESSION STATUS LIKE 'Ssl_cipher'")).fetchall()
  return ssl

 

반응형