TenantGrade Microsoft 365 health check
Riverside Food Bank · October 17, 2026
F
Microsoft 365 health check · October 17, 2026

Riverside Food Bank

3 critical2 high9 medium2 low
About $100/month in licenses you may not need$1,200 a year at estimated list prices

This is a sample report

Riverside Food Bank is a made-up organization. Everything below is exactly what a real $79 report looks like: every affected account by name, the monthly cost of each finding, and the steps to fix it.

Scan my tenant →

Security basics

Nothing in the tenant enforces MFA

Security defaults are off and no Conditional Access policy requires MFA for all users.


Critical

Without enforced MFA, one phished password is enough to take over a mailbox. Policy "Require MFA (pilot)" would require MFA but is still in report-only mode. If you rely on legacy per-user MFA, it still works but Microsoft is retiring it; move to one of the options below.

How to fix
  1. No Entra ID P1 (Business Basic/Standard): Entra admin center > Identity > Overview > Properties > Manage security defaults > Enabled.
  2. With Entra ID P1 (Business Premium, E3, E5): create a Conditional Access policy for All users + All resources that grants access only with MFA. Exclude one break-glass admin account.
  3. Give users a heads-up first: they will be asked to set up Microsoft Authenticator at their next sign-in.

Admins without MFA registered

7 active users (64%) have no MFA method, including 3 admins.


Critical

These accounts have no second factor registered. Admin accounts without MFA are the single most common way small tenants get compromised.

it-admin@riversidefb.org
Admin role
tom@riversidefb.org
Admin role
volunteers@riversidefb.org
Admin role
intern2025@riversidefb.org
User
scanner@riversidefb.org
User
newhire@riversidefb.org
User
oldshared@riversidefb.org
User
How to fix
  1. Start with the admins on this list: sign in as each one and register Microsoft Authenticator, or have them do it at https://aka.ms/mfasetup.
  2. For everyone else, enforce MFA (see the MFA enforcement finding) so they are forced to register at next sign-in.
  3. Accounts nobody signs into any more should be disabled instead of registered (see Stale accounts).

Global admin count needs attention

1 guest account has Global Administrator, and 6 accounts hold the role in total (Microsoft recommends fewer than five).


High

Guest accounts are controlled by another organization. If the person leaves or their home tenant is breached, they still hold full control of yours. On top of that, every extra Global Admin is one more account an attacker can target for full control.

dana@riversidefb.org
Global Administrator
it-admin@riversidefb.org
Global Administrator
marcus@riversidefb.org
Global Administrator
priya@riversidefb.org
Global Administrator
volunteers@riversidefb.org
Global Administrator
msp_tech_itco.com#EXT#@riversidefb.onmicrosoft.com
Guest • Global Administrator
How to fix
  1. Replace guest admins with member accounts in your own tenant, or use GDAP for an IT partner.
  2. Remove Global Administrator from anyone who only needs part of it: User Administrator for password resets, Exchange Administrator for mailboxes, Billing Administrator for invoices.
  3. Keep two named admins plus one break-glass account with a long random password stored offline.
  4. Admins should use a separate admin account, not the one they read email with every day.

Legacy authentication is not blocked

No tenant-wide policy blocks legacy (non-MFA) sign-in protocols.


Medium

Microsoft has switched off Basic auth for most Exchange Online protocols, but nothing at the identity layer blocks the rest (SMTP AUTH, older clients). Password-spray attacks target exactly these protocols because they cannot do MFA.

How to fix
  1. No Entra ID P1: turning on security defaults blocks legacy authentication automatically.
  2. With Entra ID P1: create a Conditional Access policy for All users, client apps "Exchange ActiveSync clients" and "Other clients", grant = Block.
  3. If a printer or scanner sends email with SMTP AUTH, move it to an SMTP relay connector or a dedicated send service before blocking.

Microsoft Secure Score: 39%

32 of 81 points.


Medium

Secure Score is Microsoft’s own measure of how many recommended controls are on. Most of the findings in this report raise it directly.

How to fix
  1. Fix the critical and high findings in this report first, then review the remaining actions at https://security.microsoft.com/securescore.

License waste

Paying for licenses nobody is assigned

7 unassigned seats across 2 subscriptions, about $68/month.

$68/mo
Medium

These seats are paid for but not assigned to anyone. They are usually left over from departed staff or a bulk purchase.

Microsoft 365 Business Standard
4 of 15 paid seats unassigned
$56/mo
Exchange Online (Plan 1)
3 of 5 paid seats unassigned
$12/mo
How to fix
  1. Microsoft 365 admin center > Billing > Your products > select the product > Buy/Remove licenses, and lower the quantity.
  2. Annual-commitment subscriptions can only be reduced at renewal (or within 7 days of purchase); set a reminder before the renewal date shown on the same page.
  3. Bought through a partner/CSP? Ask them to reduce the seat count; they can see the same numbers.

Blocked accounts still holding licenses

1 blocked account still uses paid licenses, about $14/month.

$14/mo
Medium

Sign-in is blocked on these accounts, usually because someone left, but their licenses were never removed. A shared mailbox under 50 GB with no archive does not need a license at all.

former.employee@riversidefb.org
Microsoft 365 Business Standard
$14/mo
How to fix
  1. For each account: Microsoft 365 admin center > Users > Active users > select the user > Licenses and apps > uncheck the licenses > Save.
  2. If the mailbox must be kept, convert it to a shared mailbox first (Exchange admin center > Mailboxes > Convert to shared), then remove the license.
  3. After removing the licenses, lower the seat count so the freed seats stop billing (see Unassigned licenses).

Licensed users inactive for 90+ days

2 licensed users with no activity in 90+ days, about $18/month.

$18/mo
Medium

Based on sign-in logs. These accounts are enabled and licensed but nobody has used them in 90 days. They are usually former staff, interns, or service accounts that never needed a full license.

intern2025@riversidefb.org
Microsoft 365 Business Standard • last active 200 days ago
$14/mo
scanner@riversidefb.org
Exchange Online (Plan 1) • no recorded activity
$4/mo
How to fix
  1. Confirm with each manager that the person has left or no longer needs the account.
  2. Block sign-in, convert the mailbox to shared if the mail is needed, then remove the licenses.
  3. For service accounts (scanners, apps), check whether an unlicensed account or shared mailbox would work instead.

Stale accounts

Enabled accounts unused for 90+ days

3 enabled accounts not used in 90+ days (1 never used).


Medium

Based on sign-in logs. Unused accounts that can still sign in are what attackers look for: nobody notices when they are taken over.

intern2025@riversidefb.org
Licensed • last active 200 days ago
scanner@riversidefb.org
Licensed • no recorded activity
oldshared@riversidefb.org
Unlicensed • last active 400 days ago
How to fix
  1. Block sign-in on accounts that belong to people who have left (Microsoft 365 admin center > Users > Active users > Block sign-in).
  2. Delete them after 30 days once you are sure nothing depends on them; deleted users can be restored for 30 days.
  3. Add an offboarding checklist so leavers are blocked on their last day.

Guests inactive for 90+ days

1 of 3 guests haven’t signed in for 90+ days.


Low

Guests keep access to every Team, site and file they were ever shared, long after the project ends.

Grant Consultant
last active 300 days ago
How to fix
  1. Review the list and remove guests you no longer work with (Microsoft 365 admin center > Users > Guest users > Delete).
  2. Set an expiration on guest access: SharePoint admin center > Policies > Sharing > "Guest access to a site or OneDrive will expire automatically".

Sharing & email

Inbox rules forward mail outside the organization

1 inbox rule sends mail to outside addresses (10 mailboxes).


Critical

Setting up a forwarding rule is the first thing attackers do after taking over a mailbox, so they keep reading mail after the password is changed. Some of these may be legitimate (someone forwarding to a personal address), which is its own data-leak problem.

marcus@riversidefb.org
Rule “fwd” → marcus.personal@gmail.com
How to fix
  1. Ask each mailbox owner whether they created the rule. If not, treat the account as compromised: reset the password, revoke sessions (Entra admin center > Users > Revoke sessions), and check the sign-in logs.
  2. Delete unwanted rules in Outlook on the web (Settings > Mail > Rules) or with Remove-InboxRule in Exchange Online PowerShell.
  3. Make sure the outbound spam policy keeps automatic external forwarding blocked: Defender portal > Policies > Anti-spam > Outbound policy > Automatic forwarding rules = Off.

“Anyone” links are allowed

Files can be shared with links that work for anyone, no sign-in required.


High

An “Anyone” link works for whoever has it, including people it was forwarded to. These links end up in email threads and search results, and there is no record of who opened the file.

How to fix
  1. SharePoint admin center > Policies > Sharing: move the slider to “New and existing guests” so external people must sign in.
  2. If you need Anyone links for marketing files, keep them but set them to expire in 30 days and default links to “People in your organization”.

Inbox rules that hide or delete mail

1 rule deletes mail or moves it while marking it read.


Medium

Most of these are harmless clutter filters. But hiding replies is a classic step in invoice fraud: the attacker hides the real vendor’s replies so the victim never sees the warning. Worth a quick look.

tom@riversidefb.org
Rule “.” • moves and marks as read
How to fix
  1. Check each rule with its owner. Any rule nobody recognizes should be deleted and the account checked as in the forwarding finding.

DMARC is missing or not enforced

2 domains with problems out of 2.


Medium

SPF, DKIM and DMARC together decide whether receivers trust mail from your domain, and whether someone else can send mail pretending to be you.

riversidefb.org
DMARC is p=none (monitoring only, spoofed mail still delivered)
riversidefb.com
No DMARC record
How to fix
  1. Start with a TXT record at _dmarc.yourdomain: v=DMARC1; p=none; rua=mailto:dmarc@yourdomain to collect reports.
  2. After two to four weeks of clean reports (SPF and DKIM passing for your real senders), change p=none to p=quarantine, then p=reject.
  3. Gmail, Yahoo and Microsoft now reject or junk bulk mail from domains without DMARC, so this also affects whether your own mail lands.

DKIM signing isn’t set up

1 domain with problems out of 1.


Medium

SPF, DKIM and DMARC together decide whether receivers trust mail from your domain, and whether someone else can send mail pretending to be you.

riversidefb.org
No Microsoft 365 DKIM selectors published
How to fix
  1. Defender portal > Email & collaboration > Policies > Email authentication settings > DKIM > select the domain.
  2. Publish the two CNAME records it shows (selector1._domainkey and selector2._domainkey) at your DNS host.
  3. Come back and switch “Sign messages for this domain with DKIM signatures” to Enabled.

SPF records need fixing

1 domain with problems out of 2.


Low

SPF, DKIM and DMARC together decide whether receivers trust mail from your domain, and whether someone else can send mail pretending to be you.

riversidefb.com
No SPF record (domain doesn’t receive mail; publish “v=spf1 -all”)
How to fix
  1. Each sending domain needs exactly one TXT record starting with v=spf1. For Microsoft 365 only: v=spf1 include:spf.protection.outlook.com -all
  2. Add an include for every other service that sends as your domain (newsletter, CRM, billing system) in that same single record.
  3. Domains that never send mail should publish v=spf1 -all so nobody can spoof them.

Notes

License costs use estimated US list prices (annual commitment, July 2026). Nonprofit, partner and enterprise agreements are usually lower, so use them to rank what to fix first rather than as an invoice.

When you’re done, you can remove this app’s access: Entra admin center → Enterprise applications → TenantGrade → Properties → Delete. Leaving it lets you re-scan after fixing things.

See this for your own tenant, free

The grade and every finding are free. Names, costs and fixes are $79.

Scan my tenant →
TenantGrade · Read-only Microsoft 365 health check · hello@tenantgrade.app · Not affiliated with or endorsed by Microsoft.