사용자 및 그룹으로 데이터베이스를 작성하기위한 기본 모델은 무엇입니까?


9

웹 사이트의 기본 보안 시스템에 가장 적합한 방법을 찾으려고합니다. 사용자와 그룹을 원한다는 것을 알고 있습니다.

나는 내가 가질 것이라고 생각했다.

user_table
user_id
user_name
...

group_type
group_id
group_name
parent_id
...

group_table
id
user_id
group_id

첫 번째는 사용자이고, 두 번째는 그룹이며, 세 번째는 둘을 연결하는 중개 테이블입니다. 한 명의 사용자가 여러 그룹을 가지고 있습니다.

괜찮습니까?


이름 외에 귀하의 GROUP_TYPE테이블 이름을 지정해야합니다 GROUP또는 비슷한, 당신은 GROUP_TABLE그게 연결하는 것 무엇으로, 사용자 및 그룹을 모두 참조해야합니다.
Adam Musch

@adam은 user_id 및 group_id로 group_table을 수행하지 않습니까?
johnny

4
@AdamMusch 예약어이므로 GROUP으로 이름을 지정해서는 안됩니다. 표와 열은 예약어 뒤에 이름을
붙여서

1
@ 필은 동의했다. 당신은뿐만 아니라 테이블의 이름을 수 SELECT와 필드를 FROM사용하면 같은 쿼리 할 수 있도록SELECT [FROM] FROM [SELECT]
JNK

2
'app_user'및 'app_role'과 같은 기본 엔티티를 호출하십시오.
ConcernedOfTunbridgeWells

답변:


17

이를 모델링하는 전통적인 방법은 Role-Based Security 라는 패턴을 사용하는 것입니다 .

아이디어는 사용자 그룹뿐만 아니라 권한 그룹도 갖는 것입니다. 패턴의 모양은 다음과 같습니다.

역할 기반 보안 ERD

테이블 이름에 예약어를 사용하지 않으려면 다이어그램에 표시된대로 테이블 이름을 정확하게 지정하지 마십시오.

작동 방식은 그룹 또는 역할에 할당 된 사용자 목록뿐만 아니라 할당 된 권한 목록도 가지고 있다는 것입니다. 이것은 당신이 나를 따라갈 수 있다면 누가 무엇을 할 수 있는지, 무엇을 할 수 있는지를 테이블 구동 할 수있게합니다.


그러나 내 사용자에게 관리자와 같은 역할이 있거나 어떤 이유로 든 동일한 사용자에게 하나의 특정 권한이 필요하다면 어떻게해야합니까?
levi December

@levi-그런 일이 발생하면 처리하는 한 가지 방법은 "Bob 's Special Permissions" 와 같은 특별한 역할을 하는 것입니다. 약간의 문제이지만, 예외가 너무 많지 않으면 문제를 해결합니다. 이. 개별 예외라고 생각하는 것이 실제로 고려하지 않은 미묘한 새로운 역할 일 수 있습니다. Bob이 종료되면 어떻게됩니까? Bob의 교체품에도 예외적 인 허가가 필요합니까? 그렇다면 실제로는 예외가 아닌 한 명의 회원과의 역할이 있습니다.
Joel Brown

@levi-또 다른 가능성은 개인과 역할 권한이 혼합되어 있어야한다는 것입니다. 이 경우 ROLE테이블을 개인그룹 유형 으로 하위 유형화 할 수 있습니다 . 여기서 그룹 유형에는 0-많은 멤버가 있고 개별 유형에는 정확히 하나의 멤버가 있습니다. 이러한 카디널리티 규칙을 적용하는 방법은 귀하에게 달려 있습니다. 데이터베이스 스키마에서 선언적으로 수행 할 수 있으며,이 경우 그림 스키마를 약간 변경해야합니다. 또는 응용 프로그램 논리를 사용할 수도 있습니다.이 경우 스키마는 여전히 위에서 설명한 것과 같습니다.
Joel Brown
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.