If the Organization-Wide Settings (OWD) in your Salesforce Org is set to anything other than “Public Read/Write” for any of the standard or custom objects then it is more than likely that you will need to setup some sharing rules to share these records with other users. So what are the different ways to share records? Here is a checklist of all the different ways (22 that I could think of) in which you can share records in Salesforce. You can use this as a quick reference guide to help you determine which of these options will be most appropriate to meet your business requirements.

And the following presentation gives you a little more information about each of these sharing options.
References:
- How Salesforce Determines Record Access for a User
- Record Level Access: Under the Hood
- Designing Record Access for Enterprise Scale
Have I missed anything? Please comment below and I will add that to this list.
Change Log:
- 06-Jun-2020 – Added ‘External Account Hierarchy’ sharing option
- 24-May-2020 – Added ‘Account Relationship Data Sharing Rule’, and update slides related to Sharing Set, Sharing Group & Queues
- 22-Sep-2017 – Added ‘Manager Group’ sharing option
- 08-May-2016 – First Published
September 12, 2020 @ 5:58 AM
Great post! I’d like to know if it is possible to do a “mass sharing” as I have 2 users with the same role and profile that need access to the records either one of them create, but that’s not happening and there are over 1000+ records to be shared, which would make manual share a pain.
September 12, 2020 @ 11:40 AM
Hi Miza, sure you can do this by creating an ownership-based sharing rule. Share the records owned by the role with the users of the same role.
August 30, 2020 @ 3:05 PM
Hey Ashish,
Really Awesome Post!!!
As per my understanding #6 will only work for Custom Objects if Grant Access Using Hierarchies is checked. If my understanding is correct Could you please add to the slide 17 as well ?
September 16, 2020 @ 5:56 AM
Hi Sanjog. Yes, that is correct. For custom objects, we need to check ‘Grant Access Using Hierarchies’. I have updated the presentation. Thanks very much for your feedback.
June 21, 2020 @ 3:22 PM
Hey,
is it possible to create sharing for several user (the users are dynamic and will change in each record)
July 2, 2020 @ 6:01 AM
Hi Elion, yes it is possible using Apex Sharing. You may want to refer to URL https://automationchampion.com/tag/sharing-a-record-using-flow-and-process-builder/ for more information on this. Thanks, Ashish
March 15, 2020 @ 1:56 AM
Good post Ashish , on emore way Account Relationship Data Sharing – https://www.youtube.com/watch?v=pKaMGNs0DSc
March 16, 2020 @ 6:28 AM
Thanks Jitendra, I need to add this to the list 🙂
May 18, 2020 @ 6:57 PM
On the 8th slide,you mentioned queue does not act as the owner of task object but currently salesforce enabled this feature to assign queue for task object.
May 22, 2020 @ 5:19 AM
Thanks for highlighting that Swaminathan. The slide will be updated by 24th May 2020
June 3, 2019 @ 12:21 PM
Ashish,
Using #1, #2 and #3 we are controlling Object and field level permissions.
Not the record level permissions. Please correct me if I am wrong.
June 7, 2019 @ 5:05 AM
Hi Raghavendra, yes that’s correct. #1, #2 & #3 are object and system level permissions and not record level permissions. But these permissions do impact the record visibility.
November 29, 2019 @ 6:10 PM
Hi Ashish,
I have a query , how to share the Account records to any user those are previously shared with any user. for Ex User A in moving so I want to Share all Account records to User B whichever were shared to A. How can I achieve it. I tried it using Batch to update AccountID and UserOrGroup field of AccountShare object but cant achieve this as both the fields are non writable.
please help me on this.
Thanks in Advanced.
RD
December 5, 2019 @ 5:34 AM
Hi RD,
If User A was the Account owner, than you can just use the ‘Mass Transfer Records’ feature in Setup to transfer those Accounts to User B. If you can’t do that then you need to make sure that user B is in same Group & Role as User A, is added to all account teams as User A and so own. You can’t update records in AccountShare object directly if the RowCause is not ‘Manual’. Hope this gives you some idea.
Regards,
Ashish
February 21, 2018 @ 6:29 PM
Your powerpoint finally helped me understand sharing and security settings in SF. Thanks so much!
December 22, 2016 @ 9:11 PM
How can I implement in Salesforce? TIA 🙂
Julie Elangwey
July 12, 2016 @ 11:37 PM
I would like help in how to become salesforce admin certified