[Salseforce] Data Security in Salesforce : OWD, Role Hierarchy, Sharing Rules, Manual Sharing

IamMilo·2024년 5월 8일

Record Level Access


레코드 수준 공유를 제어하는 4가지 메커니즘은 다음과 같습니다.

  • 조직 전체 기본값(Organization-Wide Defaults, OWD): 이 설정은 Salesforce 내에서 모든 레코드에 대한 기본적인 접근 수준을 결정합니다. 예를 들어, 어떤 객체가 '비공개(Private)'로 설정되면, 해당 객체의 레코드는 기본적으로 레코드 소유자와 소유자가 속한 소수의 사용자만 접근할 수 있습니다.

  • 역할 계층(Role Hierarchy): 역할 계층을 사용하면 상위 역할에 있는 사용자가 하위 역할에 있는 사용자의 레코드에 접근할 수 있습니다. 이는 관리 및 보고 목적으로 자주 사용됩니다. 역할 계층은 조직의 관리 구조를 반영할 수 있으며, 사용자가 속한 역할에 따라 레코드 접근 권한이 결정됩니다.

  • 공유 규칙(Sharing Rules): 공유 규칙을 통해 특정 사용자 또는 사용자 그룹에게 추가적인 레코드 접근 권한을 부여할 수 있습니다. 이는 조직 전체 기본값이 비공개로 설정되어 있을 때 유용하며, 특정 기준에 따라 레코드를 자동으로 공유할 수 있습니다.

  • 수동 공유 및 팀 공유(Manual Sharing and Team Sharing): 수동 공유를 통해 레코드 소유자 또는 사용자에게 데이터에 대한 접근 권한을 직접 부여할 수 있습니다. 팀 공유는 특정 레코드와 관련된 작업을 수행해야 하는 사용자 그룹에게 접근 권한을 부여하기 위해 사용됩니다.


이전에 프로필을 통해 기본적인 접근권한을 설정하고 Permission Set을 통해 추가적인 권한을 제공하여 유연하게 Object와 Field Level의 권한을 관리했듯이, 레코드 레벨에서는 위 이미지와 같은 구조로 계층을 구분하여 유연하게 관리가 가능합니다.

Organization-Wide Defaults


OWD는 가장 제한적인 사용자가 가질 수 있는 기본 수준의 접근을 제공합니다. 필요한 사용자에게 데이터에 대한 접근을 열어줄 수 있는 다른 레코드 수준의 보안 및 공유 도구(역할 계층, 공유 규칙, 수동 공유)와 함께 사용됩니다.

OWD 설정은 표준 객체(Standard Objects)와 사용자 정의 객체(Custom Objects) 각각에 대해 별도로 설정할 수 있습니다.

객체레벨의 권한은 사용자가 자신이 소유한 레코드에서 수행할 수 있는 작업(생성, 읽기, 편집, 삭제)을 제어합니다. 반면, OWD는 사용자가 소유하지 않은 레코드에 대한 기본 접근 수준을 설정합니다. 이후 역할 계층, 공유 규칙, 수동 공유와 같은 다른 메커니즘을 통해 필요한 경우 추가적인 접근 권한을 부여할 수 있습니다.

OWD Access Levels


조직 수준의 설정 옵션은 5가지가 있습니다.

  • Public Read/Write:모든 사용자가 모든 레코드를 조회, 편집, 보고서 생성할 수 있습니다. 이 설정은 팀이나 프로젝트 그룹 간의 협업이 중요한 경우에 유용합니다.

  • Public Read Only: 모든 사용자는 레코드를 조회하고 보고서를 생성할 수 있지만, 편집할 수는 없습니다. 레코드의 소유자와 그 소유자의 역할 계층에 있는 상위 사용자만이 레코드를 편집할 수 있습니다. 이 설정은 정보를 공유하면서 특정 데이터의 수정을 제한하고자 할 때 적합합니다.

  • Private: 레코드 소유자와 그 소유자의 역할 계층에 있는 상위 사용자만이 레코드를 조회, 편집, 보고서 생성할 수 있습니다. 이 설정은 데이터 보호가 최우선시되는 경우에 적합합니다.

  • Controlled by Parent: 이 설정은 주로 연결된 레코드에 기반하여 사용자가 특정 액션(조회, 편집, 삭제 등)을 수행할 수 있는지를 결정합니다. 예를 들어, 연락처가 계정에 연결되어 있다면, 사용자가 계정에 대해 수행할 수 있는 액션을 연락처에도 수행할 수 있습니다.

  • Public Read/Write Transfer: 이 설정은 모든 사용자가 모든 레코드를 조회, 편집, 이전, 보고서 생성할 수 있게 합니다. 이 옵션은 사례(Cases)나 리드(Leads)에 대해서만 사용 가능합니다.

Point To Remember

  • 권한을 더 관용적으로 설정을 변경하는 것은(예를 들어, Public Read Only -> Public Read/Write) 즉시 적용됩니다.
  • 권한을 더 제한적으로 설정을 변경하는 것은 조직이 갖고있는 데이터의 크기에 따라 반영에 시간이 소요될 수 있습니다.
  • Custom Object가 Standard Object와 Master-Detail 관계에서 Detail side에 있는 경우, OWD 세팅은 Controlled by Parent로 강제됩니다.

OWD 세팅 변경

현재 조직의 사용자는 총 3명이 있습니다. WOOHuengMIn Son,Jisung Park이 있고 WOO는 System Admin입니다. Candidate Object의 OWD 세팅을 변경해보면서 OWD 세팅을 적용해보겠습니다.

현재 레코드는 각각의 사용자별로 레코드를 소유하고 있습니다. 위 이미지에서 Park으로 로그인한 상태인데, 본인의 소유가 아닌 레코드도 조회할 수 있는 걸 볼 수 있습니다.

Quick Find에서 Sharing Settings에 접근한 뒤 Edit을 눌러서 Object별로 OWD를 수정할 수 있습니다.

Candidate의 설정을 Public Read/Write->Private으로 변경하고 저장했습니다. 권한을 더 제한적으로 변경했으므로 데이터가 많다면 반영에 시간이 소요될 수 있습니다.

완료되면 메일로 알려줍니다. 지금은 데이터가 적으므로 바로 완료되었습니다.

다시 Park으로 로그인해서 레코드를 조회하면 아까와 달리 본인이 소유한 레코드만 조회가능하고 다른 사람이 소유한 레코드는 볼 수 없는 걸 확인할 수 있습니다.

Role-Hierarchy


역할 계층(Role Hierarchy)은 조직 내 다양한 역할과 그 역할 간의 관계를 정의합니다. 역할 계층은 기록에 대한 수직적인 접근 권한을 제공하며, 이는 상위 레벨에 있는 사용자가 하위 레벨의 역할을 가진 사용자가 소유한 기록에 접근할 수 있게 합니다.

역할 계층의 주요 특징은 다음과 같습니다:

  • 다양한 역할 간의 관계 설정: 조직 내에서 각 사용자의 역할과 다른 역할 간의 관계를 정의합니다.

  • 수직적 데이터 접근: 역할 계층은 상위 레벨에 있는 사용자가 하위 레벨의 사용자가 소유하거나 공유한 모든 데이터를 조회, 편집, 보고서 생성할 수 있게 합니다. 단, 조직의 데이터 공유 모델이 특정 객체에 대해 다르게 지정하지 않는 한입니다.

  • 데이터 보안과 협업 증진: 조직 전체 기본 설정(Organization Wide Defaults, OWD)으로 객체의 기본 접근 권한을 설정할 수 있으며, 역할 계층을 통해 추가적인 접근 권한을 부여할 수 있습니다. 예를 들어, OWD가 'Private'로 설정된 경우, 기록의 소유자만 해당 기록에 접근할 수 있습니다. 그러나 역할 계층을 통해 하위 레벨의 사용자가 소유한 기록에 대한 접근 권한을 상위 레벨의 사용자에게 부여할 수 있습니다.

역할 계층을 적용하면, 엄격한 계층 구조와 조직 문화를 반영하여 데이터 보안을 유지하면서도 효율적인 협업과 데이터 공유를 가능하게 합니다. 조직의 특정 요구사항과 문화에 맞게 역할 계층을 세심하게 설계하고 구현함으로써, 데이터 관리와 직원 간의 협업을 최적화할 수 있습니다.

Setting up a Role Hierarchy

이전에 OWD 설정을 Private으로 변경해서 다른 사용자가 소유한 레코드는 조회하지 못하게 되었습니다. Role Hierarchy 설정을 통해 상위 역할을 가진 유저는 하위 유저 소유의 레코드가 조회가능하도록 적용해보겠습니다.

Quick Find에서 Roles를 검색해서 접근하면 위와 같은 사전에 정의된 샘플 역할 계층을 선택할 수 있습니다. Product-Based Sample을 선택하고 Set Up Roles를 눌러 샘플기반으로 역할을 설정해보겠습니다.

CEO 하위의 여러 역할들이 사전에 정의된 것을 볼 수 있습니다. 원하는 수준의 역할을 생성하기 위해 특정 역할 하위의 Add Role버튼을 눌러서 역할을 추가 할 수 있습니다.

위와 같이 CEO 하위의 VP of Sales역할을 생성하고 그 하위의 Director of Sales 그 하위의 Senior Manger 역할을 생성해서 역할 계층을 형성했습니다.

이제 ParkSon이 소유한 레코드를 조회할 수 있도록 Son에게 Senior Manager역할을 할당하고 Park에게 그 상위의 Director of Sales 역할을 할당하겠습니다. 각 역할 옆의 Assign버튼을 통해 위 이미지와 같은 화면에 접근해서 원하는 사용자를 해당 역할로 할당할 수 있습니다.

유저 목록에 Park에게 상위의 역할이 부여되었고 Son에게 하위의 역할이 부여된 것을 조회할 수 있습니다.

이제 Park으로 로그인해서 레코드를 조회해보면 본인이 소유한 레코드외에도 Son이 소유한 레코드도 조회가능한 것을 볼 수 있습니다. OWD 설정에서 연장하여 역할 계층의 설정이 우선 적용된 것을 알 수 있습니다.

반대로 하위의 역할을 갖고있는 Son은 여전히 자신이 소유한 레코드만 조회 가능합니다.

Grant Access using Hierarchies


역할 계층을 통해 접근 권한을 부여하는 것은 옵션으로서 Object별로 선택적으로 적용할 수 있습니다. 세일즈포스는 해당 옵션을 디폴트로 적용하기 때문에 역할 계층을 생성하고 역할을 부여하는 것 만으로 상위 역할을 가진 사용자가 하위 역할의 사용자가 소유한 레코드를 조회할 수 있었던 것 입니다.

해당 옵션은 Sharing Settings에서 OWD 설정을 통해 Object 단위로 변경할 수 있습니다. 위와 같이 해당 옵션은 Custom Object에 대해서만 변경가능하고 Standard Object들에 대해서는 디폴트로 설정되어있고 변경이 불가한 것을 볼 수 있습니다.

Sharing Rules


공유 규칙(Sharing Rules)은 조직 전체 공유 설정(Organization-Wide Defaults, OWD)에 자동적으로 예외를 적용하여 특정 사용자 집단에 대한 접근 권한을 조정할 수 있게 해주는 기능입니다.

User, Role 또는 Territory단위로 레코드를 공유할 수 있으며, 이를 통해 역할 계층에서 상하관계가 아닌 수평관계에 있는 사용자에게 레코드를 공유할 수 있습니다.

상하 관계에 있던 ParkSon을 수평 관계의 역할로 변경하고 Sharing Rules를 통해 레코드 공유를 적용해보겠습니다.

Applying Sharing Rules(Record Owner Based Sharing Rules)


우선 Park이 갖고있는 Director of Sales와 동일한 계층의 또 다른 역할인 Director of Marketing을 생성하고 Son에게 해당 역할을 부여했습니다.

Park으로 로그인해서 레코드를 조회해보면 더 이상 Son과 상위 역할에 있지 않기 때문에 Son이 소유한 레코드를 조회할 수 없습니다.

Quick Find에서 Sharing Settings를 검색하고 {원하는 Object명} + Sharing Rules를 검색한뒤 New를 눌러 새로운 공유 규칙을 생성할 수 있습니다.

  • Step.1에서 Label과 Rule Name을 구분해서 입력해주었습니다.

  • Step.2에서 공유할 데이터의 기준을 레코드 소유자 기준으로 정할지 원하는 특정 기준에 따라 정할지 선택할 수 있습니다. 지금은 레코드 소유자 기준으로 선택했습니다.

  • Step.3에서 Son이 소유한 레코드를 공유할 것이기 때문에 Son의 Role인 Director of Marketing을 선택했습니다. Roles and Internal Subordinates를 선택함으로써 해당 역할의 하위 역할이 소유한 레코드까지 조회 가능하도록 설정할 수 있습니다.

  • Step.4에서 Read Only또는 Read/Write로 권한을 선택할 수 있습니다.

Rule을 저장하고 다시 Park으로 로그인해서 레코드를 조회해보면 다시 Son이 소유한 레코드를 조회하고 수정할 수 있게 된 것을 볼 수 있습니다.

Types of Sharing Rules

Sharing Rule을 생성할때 아래의 2가지 타입 중 하나를 선택할 수 있었습니다.

  • 기록 소유자 기반 공유 규칙(Record Owner Based Sharing Rules):

    • 이 규칙은 레코드의 소유자가 속한 특정 역할이나 공개 그룹을 기반으로 레코드를 공유합니다. 예를 들어, 특정 부서나 팀의 멤버들이 소유한 레코드를 다른 부서나 팀의 멤버들과 공유할 수 있습니다.
  • 기준 기반 공유 규칙(Criteria Based Sharing Rules)

    • 이 규칙은 특정 필드의 값에 기반한 기준 또는 조건(예: 지역, 프로젝트 코드 등)을 만족하는 레코드를 특정 사용자, 역할, 공개 그룹과 공유합니다. 이를 통해 조직은 레코드의 속성에 따라 더 세밀하게 데이터 접근 권한을 조정할 수 있습니다. 예를 들어, 특정 프로젝트에 관련된 레코드만 특정 팀 또는 개인과 공유할 수 있습니다.

⚠️주의사항
오브젝트당 Sharing Rules는 최대 300개를 정의할 수 있다고 합니다. 그 중 Criteria Based Sharing Rule는 최대 50개까지 정의 가능하다고 합니다.

Criteria Based Sharing Rules는 대다수의 Standard Objects와 Custom Objects에 대해 생성이 가능하고 아래의 필드 데이터 타입들의 값을 기반으로 생성이 가능하지만, Currency 필드에 기반해서는 생성할 수 없는 등 일부 제한 사항이 있을 수 있습니다.

Criteria Based Sharing Rules 생성가능한 필드 타입

Applying Sharing Rules(Criteria Based Sharing Rules)

이번엔 Criteria Based Sharing Rules를 적용해서 System Admin이 소유한 레코드의 City 필드의 값이 Field값이 Dallas, TX인 레코드들을 Son이 조회할 수 있도록 설정해보겠습니다.

현재 System Admin인 WOO가 소유한 레코드중 City 필드의 값이 Dallas, TX인 레코드는 총 3개가 있습니다.

Candidate Object에 대한 새로운 Sharing Rules를 위와 같이 설정하고 저장했습니다.

Son으로 로그인해서 레코드를 조회해보면 본인이 소유한 레코드 외에 City 필드의 값에 기반한 레코드들도 조회가 가능한 것을 볼 수 있습니다.

Obejct 권한에 따른 Sharing Rule 권한의 적용

Sharing Rule을 통해 공유하는 레코드의 권한은 공유받은 사용자가 해당 Object에 대해 갖고있는 권한보다 읽기 권한에서는 우선적용 되지만, 쓰기 권한에 대해서는 우선적용되지 않습니다.

즉, 공유받은 사용자가 해당 오브젝트의 쓰기 권한이 있더라도 Sharing Rule 권한이 Read Only라면 쓰기 작업을 할 수 없고, 공유받은 사용자가 쓰기 권한이 없는데 Sharing Rule 권한을 Read/Write 으로 주더라도 쓰기 작업을 할 수 없다는 의미입니다. 표로 정리 하면 아래와 같습니다.

Object 권한Sharing Rule 권한공유받은 레코드에 대한 최종 권한
읽기읽기읽기
읽기쓰기읽기
쓰기읽기읽기
쓰기쓰기쓰기

Public Group


Public Group은 개별 사용자, 다른 그룹, 개별 또는 그 하위의 롤(role) 또는 테리토리(territory)를 포함하는 집합입니다.

Public Group은 Salesforce 내에서 데이터 또는 레코드에 대한 접근 권한을 공유할 때 사용됩니다. 예를 들어, 특정 프로젝트 팀의 모든 구성원이 특정 데이터에 접근할 필요가 있을 때 Public Group을 사용할 수 있습니다. Public Group을 사용하면 개별 사용자에게 권한을 부여하는 것보다 그룹 수준에서 데이터 접근 권한을 더 쉽게 관리할 수 있습니다.

Public Group에는 다음과 같은 구성 요소를 포함할 수 있습니다:

  • 개별 사용자: 특정 사용자를 직접 Public Group에 추가할 수 있습니다.
  • 다른 그룹: 이미 생성된 Public Group을 포함시킬 수 있어 그룹 관리의 유연성을 제공합니다.
  • 개별 (또는 그 하위의) 롤(role) 또는 테리토리(territory): 조직 내 특정 롤이나 테리토리(또는 그 하위의)를 가진 사용자를 그룹에 포함시킬 수 있습니다.

이러한 구성 요소들을 통해 Public Group은 Salesforce 내에서 복잡한 권한 관리를 더 효율적이고 쉽게 할 수 있도록 도와줍니다.

Creating a Public Group

Son과 새로운 유저인 Minjae Kim을 생성해서 하나의 그룹으로 묶어보겠습니다.

Quick Find에서 Public Groups를 검색해서 접근가능합니다. New 버튼을 눌러 새로운 그룹을 생성하려면 위와 같은 이미지를 볼 수 있습니다.

Search에서 특정 역할(또는 그 하위)이나 유저, 또는 이미 존재하는 그룹 단위로 그룹에 포함할 항목들을 조회할 수 있습니다. Son의 역할인 Director of Marketing과 유저 단위의 Kim을 포함시키고 그룹을 생성해 줬습니다.


이후 위와 같이 이전과 동일한 Candidate 오브젝트의 City필드가 Dallas라는 값을 포함하는 조건을 줘서 방금 생성한 Public Group과 공유하도록 Sharing Rule을 생성했습니다.


그룹에 속한 Kim으로 레코드를 조회해보면 Kim은 현재 Role Hierarchy에 속하지 않았음에도 Public Group에 속해있고, 해당 그룹에게 공유하도록 하는 Sharing Rule을 생성했으므로 본인이 소유하지 않은 레코드를 조회할 수 있습니다.

Points to Remember

  • Sharing Rule로는 OWD보다 더 넓은 범위의 권한을 허용할 수 있습니다. OWD로 설정된 권한을 제한하는 것은 불가합니다.

  • Sharing Rule을 생성하기 위해서는 OWD가 Public Read Only거나 Private이여야 합니다. Public Read/Write라면 추가적으로 더 제공할 권한이 없기 때문입니다.

  • Sharing Rule을 통해 접근 가능한 레코드와 연관된 레코드도 자동으로 접근 가능합니다.

  • Sharing Rule은 활성 사용자와 비활성 사용자 모두에게 적용됩니다.

  • 여러 개의 Sharing Rule이 주어지면 가장 관용적인 접근 권한이 우선 적용됩니다.

  • Sharing Rule을 생성하고나면 Share With 필드 설정은 수정할 수 없습니다.

  • Sharing Rule은 기존에 존재하는 레코드와 새로운 레코드 모두에게 적용됩니다.

  • Sharing Rule을 삭제하면 접근권한도 자동으로 삭제됩니다.

  • 특정 레코드를 이관(transfer)하면 이관받은 유저에 따라 권한을 재조정합니다.

Manual Sharing


수동 공유(Manual Sharing)를 통해 사용자는 Sharing 버튼을 사용하여 다른 사용자와 기록을 수동으로 공유할 수 있습니다. 수동 공유를 통해 특정 다른 사용자에게 계정(Accounts), 연락처(Contacts), 리드(Leads), 사용자(Users) 및 사용자 정의 객체(Custom Objects)와 같은 특정 유형의 기록에 대한 접근 권한을 부여할 수 있습니다.

수동 공유는 조직 전체 기본 설정(Organization-Wide Defaults)과 공유 규칙(Sharing Rules)을 넘어서 추가적인 접근 권한을 제공합니다.

수동 공유는 다음의 경우에 사용가능합니다.

  • 레코드의 소유자인 경우
  • 소유자보다 상위 역할계층인 경우
  • full access를 갖고있거나 시스템 관리자인 경우

Sharing 버튼은 해당 오브젝트의 OWD가 Private이거나 Public Read Only일 경우에만 표시됩니다.

View All / Modify All

"View All"과 "Modify All" 권한은 특정 객체에 대한 권한입니다. 이 권한들은 사용자 또는 프로필에 직접 할당될 수 있으며, 특정 객체 내의 모든 레코드에 대한 접근을 제어합니다.

  • View All: 사용자가 특정 객체(예: 계정, 연락처 등) 내의 모든 레코드를 볼 수 있도록 합니다. 그러나 이 권한은 레코드를 수정할 수 있는 권한을 제공하지 않습니다.

  • Modify All: "View All"의 모든 기능을 포함하며, 추가로 사용자가 특정 객체 내의 모든 레코드를 수정, 삭제 및 관리할 수 있도록 합니다.

⚠️"View All"과 "Modify All" 권한은 OWD와 Sharing Rules의 설정을 무시하고 적용됩니다.

View All Data / Modify All Data

"View All Data"와 "Modify All Data"는 시스템 전반에 걸친 권한입니다. 이 권한들은 주로 시스템 관리자에게 부여되며, Salesforce 내의 모든 객체와 레코드에 대한 접근을 제어합니다. 이 권한은 Salesforce 라이센스 하위의 프로필에서만 설정이 가능합니다.

  • View All Data: 사용자가 Salesforce 내의 모든 객체와 레코드를 볼 수 있도록 합니다. 이는 조직 전체의 데이터에 대한 읽기 전용 접근을 제공합니다.

  • Modify All Data: "View All Data"의 모든 기능을 포함하며, 추가로 사용자가 Salesforce 내의 모든 객체와 레코드를 수정, 삭제 및 관리할 수 있도록 합니다. 이 권한은 조직 내의 데이터에 대한 전체적인 제어를 가능하게 합니다.

⚠️"View All Data"와 "Modify All Data" 권한도 OWD와 Sharing Rules의 설정을 무시하고 적용됩니다.

profile
100번 고민보다 1번 실행

0개의 댓글