PostgreSQL - 권한: 초보자 가이드
안녕하세요, 데이터베이스 열정가 되고자 하는 여러분! 오늘 우리는 PostgreSQL 권한의 세계로 뛰어들어 보겠습니다. 초보자라면 걱정하지 마세요 - 이 여정에서 여러분의 친절한 안내자가 되겠습니다. 이 튜토리얼의 끝을 맞아서, 여러분은 데이터베이스 권한을 프로처럼 관리할 수 있을 것입니다!
권한이란 무엇인가요?
정밀한 내용으로 들어가기 전에, 권한이 무엇인지 이해해 보겠습니다. 데이터베이스 세계에서 권한은 마치 VIP 패스처럼입니다. 누가 무엇을 할 수 있는지 결정합니다. 마치 독점 클럽에서 바텀을 하고, 누가 들어오고 들어와서 무엇을 할 수 있는지 결정하는 것과 같습니다.
권한의 중요성 이해하기
상상해 보세요, 여러분이 도서관(우리의 데이터베이스)을 운영하고 있습니다. 모든 사람이 책을 추가하거나 제거할 수 있는 능력을 가지고 싶지 않을 것입니다,-right? 이곳에 권한이 등장합니다. 누가 책을 읽을 수 있는지, 누가 새로운 책을 추가할 수 있는지, 누가 기존 컬렉션에 변경을 가할 수 있는지 통제하는 데 도움을 줍니다.
이제 PostgreSQL에서 이러한 권한을 어떻게 관리할 수 있는지 탐구해 보겠습니다.
GRANT 문법
GRANT 명령어는 우리가 VIP 패스를 나누는 방법입니다. 데이터베이스의 사용자나 역할에 권한을 부여하는 방법입니다.
기본 문법
GRANT privilege_type ON object_name TO user_or_role;
이를 쪼개 보겠습니다:
-
privilege_type
: 무엇을 허용할 것인가? -
object_name
: 무엇에 대해 허용할 것인가? -
user_or_role
: 누구에게 이 권한을 줄 것인가?
권한의 종류
다음은 PostgreSQL에서 흔히 사용되는 권한 종류의 표입니다:
권한 | 설명 |
---|---|
SELECT | 테이블에서 데이터를 읽을 수 있음 |
INSERT | 테이블에 새로운 데이터를 추가할 수 있음 |
UPDATE | 테이블에 기존 데이터를 수정할 수 있음 |
DELETE | 테이블에서 데이터를 제거할 수 있음 |
TRUNCATE | 테이블을 비울 수 있음 |
REFERENCES | 외래 키 제약 조건을 생성할 수 있음 |
TRIGGER | 테이블에 트리거를 생성할 수 있음 |
CREATE | 새로운 객체(예: 테이블)를 생성할 수 있음 |
CONNECT | 데이터베이스에 연결할 수 있음 |
EXECUTE | 함수나 프로시저를 실행할 수 있음 |
USAGE | 스키마나 시퀀스를 사용할 수 있음 |
GRANT 예제
가정해 봅시다, 'alice'라는 사용자가 있고, 우리는 그녀가 'books' 테이블에서 데이터를 읽고 추가할 수 있게 하고 싶습니다.
GRANT SELECT, INSERT ON books TO alice;
이제 alice는 도서관의 책을 보고 새로운 책을 추가할 수 있지만, 기존 책을 수정하거나 제거할 수는 없습니다.
'bob'을 슈퍼 도서관장으로 만들어, 'books' 테이블을 다룰 수 있는 모든 권한을 주고 싶다면 어떻게 할까요?
GRANT ALL PRIVILEGES ON books TO bob;
bob은 이제 'books' 테이블에 대한 전체 제어권을 가지게 됩니다. 강력한 권한은 큰 책임을 동반합니다, bob!
REVOKE 문법
occasionally, we need to take back those VIP passes. That's where REVOKE comes in. It's the opposite of GRANT.
기본 문법
REVOKE privilege_type ON object_name FROM user_or_role;
GRANT과 매우 비슷하지 않나요? 이는 의도한 설계입니다!
REVOKE 예제
alice가 책을 추가하는 데 너무 열정적이어서 INSERT 권한을 회수하고 싶다면 어떻게 할까요?
REVOKE INSERT ON books FROM alice;
이제 alice는 책을 볼 수 있지만 새로운 책을 추가할 수 없습니다.
bob이 슈퍼 도서관장으로 은퇴하는 경우, 모든 권한을 회수하고 싶다면 어떻게 할까요?
REVOKE ALL PRIVILEGES ON books FROM bob;
빈약한 bob, 다시 평범한 도서관 방문자로 돌아갑니다!
실제 세계 예제
이제 모든 것을 하나로 모아보겠습니다. 상상해 보세요, 우리가 도서관 시스템의 데이터베이스를 설정하고 있습니다.
-- 먼저, 우리의 books 테이블을 만들어 보겠습니다
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100),
isbn VARCHAR(13)
);
-- 이제 몇 가지 사용자를 만들어 보겠습니다
CREATE USER alice;
CREATE USER bob;
CREATE USER charlie;
-- alice에게 책을 보고 추가할 수 있는 권한을 주겠습니다
GRANT SELECT, INSERT ON books TO alice;
-- bob은 우리의 슈퍼 도서관장이므로 모든 권한을 줍니다
GRANT ALL PRIVILEGES ON books TO bob;
-- charlie는 방문자이므로 SELECT 권한만 줍니다
GRANT SELECT ON books TO charlie;
-- oops! alice는 직접 책을 추가할 수 없어야 한다는 걸 깨달았습니다
REVOKE INSERT ON books FROM alice;
-- charlie는 테이블 구조를 볼 수 있도록 허용하겠습니다
GRANT USAGE ON SCHEMA public TO charlie;
GRANT USAGE ON SEQUENCE books_id_seq TO charlie;
이 예제에서 우리는 'books' 테이블을 만들고 세 가지 사용자를 설정하여 다양한 접근 수준을 부여하고 필요에 따라 권한을 회수했습니다.
결론
이제 여러분은 PostgreSQL 권한의 세계로 첫 걸음을 내딛었습니다. 권한 관리는 접근과 보안 간의 균형을 맞추는 것입니다. 좋은 도서관장이 되기 위해서는 모든 사람이 책을 즐길 수 있도록 해야 하지만, 동시에 책을 안전하고 정리된 상태로 유지해야 합니다.
실습이 완벽을 이루는 길입니다. 자신의 데이터베이스를 설정하고 이 명령어를 자유롭게 연습해 보세요. 얼마 지나지 않아 프로처럼 권한을 부여하고 회수할 수 있을 것입니다!
계속 배우고, 호기심을 유지하며, 행복하게 코딩하세요!
Credits: Image by storyset