간혹 가다가, postgresql에서 sql file에 있는 명령들을 실행시켜야 할 때가 있습니다. 예를 들어, custom 함수를 정의할 때라던지, 데이터들을 모두 import 할 때 등이 이에 해당되겠네요. 어떻게 하는지 알아보겠습니다. 먼저, app3 데이터베이스에 있는 테이블은 reply와 user입니다. user는 id가 4인 유저만 존재합니다. reply를 모두 얻어보겠습니다. 아무것도 없습니다. reply.sql은 Users의 chokw 밑에 있습니다. 이 문장은 그냥 reply 테이블에 id가 4인 유저가 "cd"라는 내용의 포스트와, 'ef"라는 포스트를 썼다는 정보를 추가합니다. psql 명령어는, -d 옵션을 주면 데이터베이스에 바로 접근이 가능합니다. 저는 postgres라는 유저로..
코딩 검색 결과
pickle을 loads할 때 신뢰할 수 없는 데이터는 절대로 언피클하지 말라고 되어 있습니다. 왜 그럴까요? 문서의 이 부분에서도 잠깐 언급되는 부분이지만, os.system과 같은 함수들을 수행되게 할 수 있기 때문입니다. 문서에 나온 코드를 조금 응용해서 실습해 보겠습니다. 먼저, b"cos\nsystem\n(S'rm -r *.txt'\ntR."이 pickle.loads의 인자로 들어왔습니다. 해당 python 파일을 실행시켜 보겠습니다. 실행 전과 후를 비교해 보면, txt 파일이 죄다 사라졌음을 볼 수 있습니다. 이것만 봐도 그냥 깡으로 필터링 없이 처리하면 얼마나 위험한지 알 수 있습니다. pickletools의 dis를 이용하면, 해당 byte가 어떻게 해석되는지를 보여줍니다. 요렇게 해석이..
dbeaver에서 foreign key를 생성하는 방법을 알아보겠습니다. postgresql에 접속한 것이니 참고 부탁드립니다. 테이블 2개가 있습니다. user하고 reply입니다. user는 id와 username을 가지고 있어요. 다음에, reply는 id와 content를 가지고 있어요. 그런데 뭔가 빠진 듯한 느낌이 납니다. 댓글을 작성한 주체가 없단 말입니다. 댓글을 작성하는 주체는 user가 될 텐데요. 이 유저를 참조하는 foreign key를 만들어 보겠습니다. 먼저, 새로운 column을 추가해야 됩니다. user에서 id를 참조하기 위해, user_id라는 것을 새로 만들었습니다. Data type은 int4로 두었습니다. 여기서 중요한 정보 하나는, 유저의 id 값을 serial4로..
postgresql에서 특정 컬럼을 못 보게 하는 role은 어떻게 설정해야 할까요? 요약하면 view를 생성해서 권한을 주는 것입니다. 먼저, 특정 테이블을 볼 수 있는 유저 viewer를 하나 생성하겠습니다. 뭔가 상당히 복잡해 보이는데요. 사실 어려운 것은 없습니다. viewer가 LOGIN이 가능하고, public.app_user에 대해 select 권한이 있다는 것을 의미합니다. dbeaver에서는 viewer의 권한을 app_user 테이블을 선택한 다음에 Permission을 SELECT만 선택하고 적용을 누르시면 됩니다. 권한 설정을 다 하면, app_user에 있는 데이터들을 모두 볼 수 있습니다. 그런데, auth_group에 대해서는 접근할 수 없습니다. 왜냐하면, 제가 'viewer..
민감한 변수가 있을 때에는 어떻게 해야 할까요? 예를 들어, AWS_SECRET_KEY 같은 것들입니다. 이들을 프로그램의 환경 변수로 불러와서 코드 내에서 노출을 숨기는 방법이 있는데요. python-dotenv를 사용하는 방법을 소개해 드리겠습니다. django라던지 flask는 비슷한 기능을 하는 패키지가 있으니 찾아보시는 것도 도움이 되실 듯 합니다. 먼저, python-dotenv를 설치하겠습니다. dotenv 내부에는 여러 함수들이 있는데요. 이 중, load_dotenv를 보겠습니다. 설명을 보면, Parse a .env file이라고 되어 있어요. .env 파일을 찾은 다음에, 해당 파일 안에 있는 변수들을 environment 변수에 넣습니다. 즉, dotenv.load_dotenv()를..
최근댓글