사내 코드를 공유할 수 있는 jupyter hub를 사용하고 있다. 실무자들은 직접 보지만, 관련자들은 PDF나 HTML로 보고있는데 이렇게 파일을 왔다갔다 하다가, 코드에 들어가 있는 DB 계정정보가 노출될 수 있다. 그렇기 때문에 DB 계정 정보를 숨겨두는 것이 반드시 필요하다.
[ DB 계정 정보를 저장하고 숨기기 ]
1.리눅스 환경에서 Terminal을 열어주기
우리 jupyter hub는 linux ubuntu 환경이기 때문에, 여기서 Terminal을 열어준다.
2. DB 계정 정보를 담은 .env 생성 하고 .conf에 숨겨주자
*env와 .env의 차이점
env는 노출되는 것이고 .env는 숨김 처리
1) env로 생성했을 시 ls 쳤을 시 바로 노출


2) .env로 생성했을 때 숨김 파일을 조회하는 ls -al을 쳐야만 숨겨진 .env가 등장한다.

1) 터미널에서 .env 에디터로 계정 정보 입력
vi .env
2) 에디터에서 계정 정보 입력
1️⃣ a 입력하여 insert 모드로 전환
2️⃣ 계정 정보 입력 후
DB_HOST="your host"
DB_USER="your user"
DB_PSWORD="your password"
DB_DATABASE="your database"
DB_PORT="your port"
3️⃣ esc -> :wq (저장하고 나가기)
*파일을 잘못 만들었어요! | ||||||
rm .env (해당 파일을 삭제) | ||||||
rm -i .env (삭제 시 정말 삭제할 지 확인하는 메시지를 표시) | ||||||
rm -f .env (삭제 시 확인하지 않고 바로 삭제 (f는 Force의 약자) |
*.env에 내가 뭐라 썼는지 확인하고 싶어요! | |||
cat .env |
3) .conf 생성
.env 를 만들어서 숨겼다지만, 그래도 home 에 노출되어있기 때문에 설정정보들을 저장할 .conf 디렉토리를 만들어 준다. (보안도 걸어줄 것이다)
mkdir .conf
*디렉토리를 잘못 만들었어요! | ||||
rm -r .conf (해당 디렉터리를 삭제) | ||||
rm -rf .conf (r옵션과 f 옵션을 합친 것으로, .conf 디렉토리와 그 아래에 있는 하위 디렉토리를 강제로 전부 삭제 (사용시 주의) | ||||
rm -f .env (삭제 시 확인하지 않고 바로 삭제 (f는 Force의 약자) |
*이전 디렉토리로 가고 싶어요 | |||
cd - |
4. .env를 .conf로 이동시켜주자
mv .env .conf
그럼 잘 옮겨졌는지 확인해보자
cd .conf
ls -al
잘옮겨짐을 확인했다!
*내가 지금 어느 경로에 있는지 헷갈려요 | |||
pwd (현재 경로 출력) |
3. .conf에 권한을 설정해주자
보안을 위해 이렇게 꽁꽁 숨겨서 만들었다. 하지만 어차피 ls -al을 통해 노출된다. 따라서 해당 디렉토리에 및 env 파일에 대한 권한을 설정해주어야 한다.
1) linux 파일 권한 이해
권한 | 2진수 | 8진수 | 설명 |
--- | 000 | 0 | 권한 없음 |
--x | 001 | 1 | 실행 전용 권한 |
-w- | 010 | 2 | 쓰기 전용 권한 |
-wx | 011 | 3 | 쓰기 및 실행 권한 |
r-- | 100 | 4 | 읽기 권한 |
r-x | 101 | 5 | 읽기 및 실행 권한 |
rw- | 110 | 6 | 읽기 및 쓰기 권한 |
rwx | 111 | 7 | 읽기,쓰기 및 실행 권한 |
리눅스 파일 권한은 이렇게 되어 있고 실제로 아래와 같이 나타나고 있다.
그런데, 위에는 9자린데 우리 화면엔 10자리가 나온다.
맨 앞의 문자 1자리는 파일 타입을 나타내는 것이고, 그 다음 9자리 부터 권한을 나타내는 부분인 것이다.
- : 일반 파일
d : 폴더 / 디렉토리
l : 심볼릭 링크
b : 블록 타입 특수 파일
c : 문자 타입 특수 파일
p : 파이프
s :소켓
따라서 위에 두 정보를 가지고 해당 사진을 해석해 보면
- drwxr-xr-x -> d (디렉토리 타입) / rwx (파일 소유자에 대해서 읽기, 쓰기, 실행 권한) / r-x (파일 소유자의 그룹에 대해 읽기, 실행 권한) / r-x (시스템에 대한 다른 사용자에 대해 읽기 및 실행 권한)
- -rw-r--r-- -> - (일반 타입) / rw- (파일 소유자에 대해서 읽기, 쓰기 권한) / r-- (파일 소유자의 그룹에 대해 읽기 권한) / r-- (시스템에 대한 다른 사용자에 대해 읽기 권한)
- -rw------- -> - (일반 타입) / rw- (파일 소유자에 대해서 읽기, 쓰기 권한) / --- (파일 소유자의 그룹에 대해 권한 없음) / r-- (시스템에 대한 다른 사용자에 대해 권한 없음)
2) 파일 권한을 바꿔보자
현재 나는 파일 '소유자의 그룹' 으로 지정되어 있다.
.conf 와 .env와 모두 파일 소유자에 대한 권한은 rwx로, 파일 소유자의 그룹에 대한 권한은 r-x로 , 이 외 다른 사용자는 권한이 없도록 설정해주겠다. chmod 명령어를 사용해주면 된다.
*chmod? | |||
1️⃣ chmod [옵션] [사용자] [설정기호] [권한] [파일 혹은 디렉토리] | |||
2️⃣ chmod [변경하고자 하는 권한 값] [파일 혹은 디렉토리] (권한 변경 명령어) |
1️⃣ 기호를 통해 권한 변경
ls -al
조회 결과, .conf의 현재 권한은 drwxr-xr-x로 나타난다.
d / rwx / r-x / r-x 이므로 다른 사용자에 대한 권한을 ---로 수정해주면 된다.
권한 관련 | 유저 관련 | ||||
+ | 권한 추가 | u | user, 소유자 | ||
- | 권한 제거 | g | group, 소유 그룹 | ||
= | 권한 부여 | o | other, 일반 사용자 | ||
a | all, 모든 사용자 (미 입력 시 default값) |
현재 : d/rwx/r-x/r-x -> 원하는 권한 d/rwx/r-x/---
그러므로 o에 대해 -r , -x를 해주면 된다.
chmod o-r,o-x .conf
2️⃣ 숫자를 통해 권한 변경
현재 : d/rwx/r-x/r-x -> 원하는 권한 d/rwx/r-x/---
그러므로 현재는 755 인 것을 750으로 변경해주면 된다.
chmod 750 .conf
#하위 디렉토리와 그 안의 파일 권한까지 모두 변경
chmod -R 750 .conf
-R 옵션을 붙혀주면, 하위 디렉토리와 파일까지의 권한을 모두 변경하기 때문에 위처럼 사용해주면, .env의 권한까지 바껴있음을 확인할 수 있다.
드디어 기초 셋팅이 끝났다!
3.python 에서 dotenv를 통해 mssql 데이터 불러오기
!pip install python-dotenv
설정한 환경변수 불러오기
import os
%load_ext dotenv
%dotenv #.env 파일에서 환경 변수를 읽어와 설정
#그렇지만 우리는 .conf 안에 .env를 숨겨놨으니 아래와 같이
%dotenv /home/경로/.conf/.env
#경로를 모를 땐, pwd로 찾아오자
pyodbc 라이브러리로 데이터 베이스 연결
import pyodbc
server = os.getenv("DB_HOST")
database = os.getenv("DB_DATABASE")
port = os.getenv("DB_PORT")
username = os.getenv("DB_USER")
password = os.getenv("DB_PSWORD")
conn_str = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={server},{port};DATABASE={database};UID={username};PWD={password};TrustServerCertificate=Yes'
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
import pandas as pd
try:
# 연결
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# 쿼리 실행
cursor.execute("SELECT 컬럼 FROM 테이블")
df_local = pd.DataFrame.from_records(cursor.fetchall(), columns=[desc[0] for desc in cursor.description])
cursor.close()
conn.close()
except pyodbc.Error as e:
print("Error: ", e)
print (df_local.head())
이렇게 pyodbc로 mssql 데이터 불러오기까지 끝!
'파이썬 Python' 카테고리의 다른 글
[Python] 파이썬으로 하는 시계열 데이터 분해 (Seasonal_decompose) (0) | 2024.04.24 |
---|---|
[Python] 파이썬 - 구글 스프레드 시트 연동하기 (2) | 2024.03.18 |
[Python] 파이썬에서 빅쿼리 불러오기 (0) | 2023.02.15 |
[Python] 파이썬 판다스 데이터 타입 (Data Type) (0) | 2022.09.16 |
[Python] 파이썬 판다스 사분위수 활용 데이터 이상치 제거 (0) | 2022.09.15 |
댓글