데이터베이스/DB 필수지식!

[데이터베이스] 권한과 역할의 차이, 초보 개발자를 위한 완벽 가이드

CodeCaine Explorer 2024. 12. 19. 14:28
728x90
반응형
SMALL

안녕하세요! 😊 오늘은 개발에서 역할(Role)권한(Privilege) 관리에 대해 이야기해볼게요. 이 개념은 특히 사용자 인증 및 권한 부여(Authorization) 시스템을 설계할 때 매우 중요하답니다. 조금 복잡할 수 있지만, 예시와 함께 설명할 테니 차근차근 따라와 주세요! 🚀


역할(Role)과 권한(Privilege)이란?

1️⃣ 역할(Role)

  • 역할은 사용자의 직무, 책임, 혹은 위치에 따라 정의된 "집합적인 권한"입니다.
  • 예를 들어, 회사의 시스템에서 "관리자(Admin)", "일반 사용자(User)", "슈퍼 관리자(Super Admin)" 등의 역할이 있겠죠.
  • 역할은 단순히 권한의 묶음으로 볼 수 있어요.

2️⃣ 권한(Privilege)

  • 권한은 특정 작업(행위)에 대한 접근 권한을 의미합니다.
  • 예를 들어, "데이터 읽기(Read)", "데이터 쓰기(Write)", "데이터 삭제(Delete)" 같은 권한이 있어요.
  • 사용자가 가진 역할에 따라 권한이 부여됩니다.

🔑 역할과 권한의 관계

역할은 권한을 포함하며, 사용자는 하나 이상의 역할을 가질 수 있습니다. 이 관계는 아래처럼 이해할 수 있어요.

  • 역할: "Admin"
    • 권한: "사용자 생성(Create User)", "데이터 삭제(Delete Data)", "로그 조회(View Logs)"
  • 역할: "User"
    • 권한: "데이터 조회(View Data)"

왜 역할과 권한을 나누어 관리해야 할까요?

  • 유지보수성:
    역할을 통해 권한을 묶으면, 개별 사용자에게 직접 권한을 부여할 필요가 없어 관리가 편리해요.
    예를 들어, 새 직원이 "일반 사용자"라면 "User" 역할만 부여하면 끝!
  • 보안성:
    사용자의 역할과 권한을 명확히 구분하면, 권한 오용이나 데이터 손실을 방지할 수 있어요.
  • 확장성:
    새로운 역할이나 권한이 필요할 때 기존 구조를 쉽게 확장할 수 있어요.

간단한 예시: 블로그 시스템

1️⃣ 역할 정의

  • Admin: 블로그 관리
  • Editor: 블로그 작성 및 편집
  • Viewer: 블로그 읽기만 가능

2️⃣ 권한 정의

  • Create Post: 새 블로그 작성
  • Edit Post: 블로그 편집
  • Delete Post: 블로그 삭제
  • View Post: 블로그 읽기

3️⃣ 역할-권한 매핑

Role 권한
Admin Create Post, Edit Post, Delete Post, View Post
Editor Create Post, Edit Post, View Post
Viewer View Post

코드로 표현하기

아래는 역할과 권한을 간단히 정의하고 매핑하는 Python 예시입니다.

# 권한 정의
privileges = {
    "create_post": "Create Post",
    "edit_post": "Edit Post",
    "delete_post": "Delete Post",
    "view_post": "View Post"
}

# 역할 정의
roles = {
    "Admin": [privileges["create_post"], privileges["edit_post"], privileges["delete_post"], privileges["view_post"]],
    "Editor": [privileges["create_post"], privileges["edit_post"], privileges["view_post"]],
    "Viewer": [privileges["view_post"]]
}

# 사용자에게 역할 부여
user_roles = {
    "Alice": ["Admin"],
    "Bob": ["Editor"],
    "Charlie": ["Viewer"]
}

# 사용자가 특정 권한을 가지는지 확인
def has_privilege(user, privilege):
    user_privileges = []
    for role in user_roles.get(user, []):
        user_privileges.extend(roles.get(role, []))
    return privilege in user_privileges

# 테스트
print(has_privilege("Alice", "Create Post"))  # True
print(has_privilege("Charlie", "Edit Post"))  # False

정리 🙋‍♀️

  1. 역할(Role): 권한의 묶음. 사용자의 직무나 책임을 반영.
  2. 권한(Privilege): 특정 작업에 대한 접근 권한.
  3. 장점: 유지보수 편리, 보안 강화, 확장성 높음.
728x90
반응형
SMALL