Apex-보안
Apex 보안은 보안 설정을 적용하고 실행중인 코드에 공유 규칙을 적용하는 프로세스를 의미합니다. Apex 클래스에는 두 개의 키워드를 통해 제어 할 수있는 보안 설정이 있습니다.
데이터 보안 및 공유 규칙
Apex는 일반적으로 시스템 컨텍스트, 즉 현재 사용자의 권한에서 실행됩니다. 필드 수준 보안 및 공유 규칙은 코드 실행 중에 고려되지 않습니다. 익명 블록 코드 만 코드를 실행하는 사용자의 권한으로 실행됩니다.
Apex 코드는 보안 및 공유 설정을 통해 숨겨진 민감한 데이터를 사용자에게 노출해서는 안됩니다. 따라서 Apex 보안 및 공유 규칙 적용이 가장 중요합니다.
키워드 공유
이 키워드를 사용하면 Apex 코드가 현재 사용자의 공유 설정을 Apex 코드에 적용합니다. 이것은 프로필 권한을 적용하지 않고 데이터 수준 공유 설정 만 적용합니다.
사용자가 5 개의 레코드에 액세스 할 수 있지만 총 레코드 수가 10 개인 예를 고려해 보겠습니다. 따라서 Apex 클래스가 "With Sharing"키워드로 선언되면 사용자가 해당하는 5 개의 레코드 만 반환됩니다. 에 액세스 할 수 있습니다.
Example
먼저 고객 개체에 'ABC 고객'으로 5 개 레코드의 '이름'을 사용하고 나머지 5 개 레코드를 'XYZ 고객'으로 10 개 이상의 레코드를 만들 었는지 확인합니다. 그런 다음 모든 사용자와 'ABC 고객'을 공유 할 공유 규칙을 만듭니다. 또한 고객 개체의 OWD를 비공개로 설정했는지 확인해야합니다.
아래 코드를 개발자 콘솔의 익명 블록에 붙여 넣습니다.
// Class With Sharing
public with sharing class MyClassWithSharing {
// Query To fetch 10 records
List<apex_customer__c> CustomerList = [SELECT id, Name FROM APEX_Customer__c LIMIT 10];
public Integer executeQuery () {
System.debug('List will have only 5 records and the actual records are'
+ CustomerList.size()+' as user has access to'+CustomerList);
Integer ListSize = CustomerList.size();
return ListSize;
}
}
// Save the above class and then execute as below
// Execute class using the object of class
MyClassWithSharing obj = new MyClassWithSharing();
Integer ListSize = obj.executeQuery();
키워드 공유없이
이름에서 알 수 있듯이이 키워드로 선언 된 클래스는 시스템 모드에서 실행됩니다. 즉, 레코드에 대한 사용자 액세스에 관계없이 쿼리는 모든 레코드를 가져옵니다.
// Class Without Sharing
public without sharing class MyClassWithoutSharing {
List<apex_customer__c> CustomerList = [SELECT id, Name FROM APEX_Customer__c LIMIT 10];
// Query To fetch 10 records, this will return all the records
public Integer executeQuery () {
System.debug('List will have only 5 records and the actula records are'
+ CustomerList.size()+' as user has access to'+CustomerList);
Integer ListSize = CustomerList.size();
return ListSize;
}
}
// Output will be 10 records.
Apex 클래스에 대한 보안 설정
특정 프로필에 대해 Apex 클래스를 활성화하거나 비활성화 할 수 있습니다. 동일한 단계가 아래에 나와 있습니다. 어떤 프로필이 어떤 클래스에 액세스해야하는지 결정할 수 있습니다.
클래스 목록 페이지에서 Apex 클래스 보안 설정
Step 1 − 설정에서 개발 → Apex 클래스를 클릭합니다.
Step 2− 제한하려는 클래스 이름을 클릭합니다. CustomerOperationClass를 클릭했습니다.
Step 3 − 보안을 클릭합니다.
Step 4 − 사용 가능한 프로파일 목록에서 활성화 할 프로파일을 선택하고 추가를 클릭하거나 활성화 된 프로파일 목록에서 비활성화 할 프로파일을 선택하고 제거를 클릭합니다.
Step 5 − 저장을 클릭합니다.
권한 집합에서 Apex 보안 설정
Step 1 − 설정에서 사용자 관리 → 권한 집합을 클릭합니다.
Step 2 − 권한 집합을 선택합니다.
Step 3 − Apex 클래스 액세스를 클릭합니다.
Step 4 − 편집을 클릭합니다.
Step 5 − 사용 가능한 Apex 클래스 목록에서 활성화 할 Apex 클래스를 선택하고 추가를 클릭하거나 활성화 된 Apex 클래스 목록에서 비활성화 할 Apex 클래스를 선택하고 제거를 클릭합니다.
Step 6 − 저장 버튼을 클릭합니다.