You are here:
Sharing Inheritance Limits and Considerations
Here are some things to consider when working with sharing inheritance.
Sharing Inheritance Limits
- Sharing inheritance can be applied from a supported object if all object records have
fewer than 400 sharing descriptors each. Supported objects for sharing inheritance are:
- Account
- Case
- Contact
- Lead
- Opportunity
- Sharing inheritance covers a user if they have “View All
Data” permission or their record access is granted by fewer than 3,000 sharing
descriptors. The backup security predicate takes effect for users with more than
this number of sharing descriptors without the “View All Data” permission. A sharing
descriptor is record access granted through several
methods, including:
- Owning the record
- Role hierarchy
- Sharing Rules
- Manual sharing
- Apex managed sharing
- Sharing inheritance only works for Salesforce users. It isn’t available for Experience Cloud Sites users and logins. To provide security in Experience Cloud Sites, you must use security predicates.
- Recipe datasets generated by append or upsert output nodes don't support sharing inheritance.
General Considerations
- It's best practice to have a defined security predicate for datasets using inherited sharing. Without a security predicate, users not covered by sharing inheritance see no data in the dataset because they have no dataset row-level access.
- Sharing isn’t automatically applied to datasets. You can apply sharing to each dataset manually.
- Sharing inheritance can affect the performance of queries, dataflows, and Data Prep recipes. If your requirements include the best-possible performance, use security predicates instead of sharing inheritance. If not, enjoy the convenience of sharing inheritance.
- Changes to the rowLevelSharingSource or rowLevelSecurityFilter security settings in a dataflow only affect datasets created after you save the change. Similarly, changes to a Data Prep recipe output node’s Sharing Source and Security Predicate fields only affect datasets created after you save the change. Update those settings for existing datasets on the edit dataset page.
- For an object to appear in the security-sharing source list, the primary key of the custom object must be a field in the dataset. A foreign key doesn’t satisfy this requirement. For example, if you have Opportunity.AccountId in your dataset but not Account.Id, you can’t inherit sharing from the Account object.
- Sharing inheritance uses your Salesforce org sharing settings. If you don’t want to apply incomplete Salesforce org sharing settings to CRM Analytics, don't use sharing inheritance.
- Sharing inheritance isn't available for Data Prep Classic recipes.
Information Leak Considerations
When using sharing inheritance, consider these points to avoid data leaks to users who shouldn’t have access.
- A dataset can inherit sharing settings from only one object, regardless of how many source objects are used to create the dataset. Because many objects comprise the dataset, each object can use a different security model.
- The computeRelative and delta dataflow transformations can merge information from records with different security.
- Calculated fields are treated as normal fields. Row-level security applied during the calculation in Salesforce is ignored.
- Security predicates referencing $User information require a new user session before a new value is recognized.
- Security Metadata Drift
The data you use in CRM Analytics can come from Salesforce objects and fields. A dataflow job runs, and then you can analyze the resulting dataset. In an ideal world, each object in your dataset would stay in perfect sync with its source object. In the real world, the correctness of an object is only as good as the last update. The longer the time between updates, the greater the likelihood of drift. The security metadata (predicates and descriptors) of a Salesforce object is subject to the same risk of drift.

