Skip to content

Auditing Non-Owner Mailbox Access in Exchange Online with PowerShell

Auditing Non-Owner Mailbox Access in Exchange Online with PowerShell

Section titled “Auditing Non-Owner Mailbox Access in Exchange Online with PowerShell”

Maintaining strict control over mailbox permissions is crucial for safeguarding sensitive information within an organization. Non-owner access to mailboxes can pose security risks if not properly monitored. This article presents a PowerShell script that audits non-owner access permissions across all mailboxes in Exchange Online.

The script helps administrators identify instances where non-owners have access to mailboxes, allowing for a thorough review of permissions and ensuring that access rights are aligned with organizational policies.


FeatureCapabilityBusiness Value
Comprehensive Permission AuditScans all user mailboxes for non-owner access rightsIdentifies potential security risks and unauthorized access
Access Right ClassificationFilters out standard self-access permissionsFocuses on genuine security concerns rather than normal operations
Detailed Permission ReportingCaptures user, rights, deny status, and inheritanceProvides complete visibility into mailbox permission structure
Export CapabilityGenerates CSV reports for compliance documentationSupports audit trails and security reviews

Terminal window
# Connect to Exchange Online
Connect-ExchangeOnline
# Function to check non-owner access permissions
function Check-NonOwnerAccess {
# Get all mailboxes
$mailboxes = Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited
# Prepare an array to hold the non-owner access information
$nonOwnerAccessInfo = @()
foreach ($mailbox in $mailboxes) {
$mailboxPermissions = Get-MailboxPermission -Identity $mailbox.Identity
foreach ($permission in $mailboxPermissions) {
if ($permission.User -ne $mailbox.Identity -and $permission.User -ne "NT AUTHORITY\SELF" -and $permission.AccessRights -ne "FullAccess") {
$nonOwnerAccessInfo += [PSCustomObject]@{
Mailbox = $mailbox.PrimarySmtpAddress
NonOwner = $permission.User
AccessRights = $permission.AccessRights
Deny = $permission.Deny
InheritanceType = $permission.InheritanceType
}
}
}
}
return $nonOwnerAccessInfo
}
# Check the non-owner access permissions
$nonOwnerAccessResults = Check-NonOwnerAccess
# Display the non-owner access information
$nonOwnerAccessResults | Format-Table -AutoSize
# Optionally export to CSV
$nonOwnerAccessResults | Export-Csv -Path "NonOwnerAccessResults.csv" -NoTypeInformation
Write-Output "Non-owner access results exported to NonOwnerAccessResults.csv"
# Disconnect from Exchange Online
Disconnect-ExchangeOnline -Confirm:$false

Critical Finding: Regular non-owner access audits help prevent data breaches and ensure compliance with data protection regulations.


  • ReadAccess: Ability to read email content
  • WriteAccess: Ability to modify email content
  • DeleteAccess: Ability to remove emails
  1. Verify Legitimate Access: Confirm business justification for each permission
  2. Document Exceptions: Maintain records of approved non-owner access
  3. Remove Unnecessary Permissions: Revoke access that is no longer required
  4. Implement Monitoring: Set up alerts for future permission changes