PrincipalObjectAccess table – The stuff that nightmares are made of 🙂
Ok So first of all if you don’t know what PrincipalObjectAccess is (POA from now on), Go ahead and write it down in your favorite search engine, do some reading in the endless blog posts and articles available out there – and then get back here, as I’m going to assume that you already know what it is and how it works.
Think of the following scenario – You have 10 users in your Organization but want to use only 1 mailbox, and you want all the users to use the same email address and see the same emails in the system. Yes you should definitely use a Queue for this, but maybe you don’t feel like using a queue or just don’t know exactly how it works and how to set it up – and hey, the system does not prevent you from setting the same email address for multiple users, right…?
So can you do it this way? Probably yes
Will it actually work? Likely it will
Is it a good idea? Nope
Here’s what will happen
** Obviously this is for demonstration only – DO NOT DO THIS IN YOUR ENVIRONMENT **
Step 1: Assign 10 users the same email address. (I used a yahoo.com email for testing – feel free to spam my email address :))
Step 2: Create your server-side-sync profile and assign to the users, then activate, approve, test & enable all the mailboxes – Basically do all the steps you need to do for a mailbox to start working.
Step 3: Change all the user’s settings to automatically track all emails in the mailbox (the scenario would also work for emails in reply to CRM emails).
Step 4: Send an email to the newly crated mailbox and wait a few minutes.
Step 5: Check your POA table by running a query on your DB:
SELECT TOP 100 * FROM PrincipalObjectAccess
ORDER BY ChangedOn DESC
The email that entered the system receives a POA share record for every user that owns the email address. Not so great!
This is a small example of what will happen. I found it at a customer with more then 400 users that were assigned the same mailbox and something in between a few hundreds to thousand email threads – every day!
Needless to say that in this scenario their POA table grew at a rate of about 500,000 records per day.
This could definitely be causing additional side effects but I didn’t bother to check any further 🙂
The fact that the system allows you to do things in a certain way does not always mean it’s a good practice, and if there is a mechanism built in the system to address a specific scenario – you should probably use it as there is a reason behind it.
If this post prevents from even one person setting up a system in this way – I’ve done my job 🙂