PostgreSQL - 권한: 초보자 가이드

안녕하세요, 데이터베이스 열정가 되고자 하는 여러분! 오늘 우리는 PostgreSQL 권한의 세계로 뛰어들어 보겠습니다. 초보자라면 걱정하지 마세요 - 이 여정에서 여러분의 친절한 안내자가 되겠습니다. 이 튜토리얼의 끝을 맞아서, 여러분은 데이터베이스 권한을 프로처럼 관리할 수 있을 것입니다!

PostgreSQL - Privileges

권한이란 무엇인가요?

정밀한 내용으로 들어가기 전에, 권한이 무엇인지 이해해 보겠습니다. 데이터베이스 세계에서 권한은 마치 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