Summary
On personal Microsoft accounts (OneDrive Personal), any app registration whose delegated
consent was granted today receives 403 accessDenied / innerError serviceReadOnly /
message "Database Is Read Only" on every drive endpoint, including GET /me/drive.
At the same moment, on the same machine, with the same user, the same scopes and the same
code, an app registration that the user consented to months ago returns 200 and can read
and write normally.
This looks related to the reports in
rclone/rclone#9794 and
https://learn.microsoft.com/en-us/answers/questions/5982450/
but is more severe: in those reports only the plural GET /me/drives fails while the
singular GET /me/drive succeeds. In our case the singular endpoint fails too, and only for
recently consented app+user pairs.
Environment
- Account type: personal Microsoft account (OneDrive Personal,
driveType: personal)
- Delegated scopes:
Files.ReadWrite.AppFolder, offline_access
- Auth: MSAL.js v3.27.0, SPA redirect flow, authority
/common and /consumers (both reproduce)
- App registrations: SPA platform, both
AzureADandPersonalMicrosoftAccount and
PersonalMicrosoftAccount audiences reproduce
- Tenant the registrations live in:
c1fef054-68f1-48db-9097-61acbe59b8ac
- Date of all observations: 2026-08-23, 17:00-18:10 UTC
Reproduction
Two personal Microsoft accounts:
- Account A — long-established personal account, consented to app
18c496a6-5d86-4ff5-8dd0-67d565480a3e several months ago.
- Account B — personal account created 2026-08-23. Its OneDrive works normally in the
web UI (verified with a manual file upload/download round trip).
| # |
App registration |
Consent for this app+user pair granted |
GET /me/drive |
GET /me/drive/special/approot |
PUT .../approot:/x.txt:/content |
| 1 |
18c496a6-5d86-4ff5-8dd0-67d565480a3e + Account A |
months ago |
200 |
200 (childCount 69) |
200 |
| 2 |
ebf26c70-b7d7-4e1f-9cb9-4faf4846aa78 + Account A |
2026-08-23 18:02 UTC |
403 |
403 |
403 |
| 3 |
18c496a6-5d86-4ff5-8dd0-67d565480a3e + Account B |
2026-08-23 17:56 UTC |
403 |
403 |
403 |
| 4 |
17172a03-2635-4db0-829a-4cee2543fa81 + Account B |
2026-08-23 17:28 UTC |
403 |
403 |
403 |
| 5 |
ebf26c70-b7d7-4e1f-9cb9-4faf4846aa78 + Account B |
2026-08-23 17:14 UTC |
403 |
403 |
403 |
Rows 1 and 2 are six minutes apart, same user, same browser, same code path, same scopes.
Rows 1 and 3 are the same app registration with two different users.
Error body (identical for every 403):
{"error":{"code":"accessDenied","message":"Database Is Read Only",
"innerError":{"code":"serviceReadOnly","date":"2026-08-23T18:02:41",
"request-id":"671766ea-c0a4-40d9-8833-0eb144f75e73",
"client-request-id":"671766ea-c0a4-40d9-8833-0eb144f75e73"}}}
Earlier attempts on the same pair (17:14-17:15 UTC) returned a different error first, which
suggests a provisioning state machine that never completes:
{"error":{"code":"serviceNotAvailable","message":"User is pending provisioning",
"innerError":{"code":"itemDisabledDueToPendingProvisioning", ...}}}
and, on the very first call, 404 itemNotFound for the app folder.
What we ruled out
- Not the account. Account A gets 200 on one app registration and 403 on another, minutes apart.
- Not the app registration. Registration
18c496a6... returns 200 for Account A and 403 for Account B.
- Not the sign-in audience. Both
AzureADandPersonalMicrosoftAccount and PersonalMicrosoftAccount reproduce.
- Not the authority.
/common and /consumers both reproduce.
- Not the scope. Identical scopes on the working and failing calls.
GET /me/drive is
demonstrably within Files.ReadWrite.AppFolder here — the working pair returns 200 for it.
- Not the client code. The same page, same build, same MSAL version produces 200 and 403
depending only on which app registration is selected.
- Not a missing app folder. Pre-creating
Apps/<app display name> manually in the OneDrive
web UI does not help — the 403 happens on GET /me/drive too, upstream of any folder.
- Not quota or account state. The working pair reports
quota.state: normal, ~19% used.
- Not the OneDrive service overall. The web UI works normally for both accounts.
The only variable that tracks the outcome is how recently consent was granted for that
specific app + user pair.
Request IDs (all serviceReadOnly 403s)
| UTC |
pair |
request-id (= client-request-id) |
| 17:56:29 |
B × 18c496a6... |
2d0ce041-3eac-4ad0-8bf1-4d9eea50d667 |
| 17:58:51 |
B × ebf26c70... |
af8dec85-a987-41eb-980d-60e72140ebe7 |
| 17:58:54 |
B × ebf26c70... |
5d4a692c-f3fb-417d-a9d6-4c759f1570ab |
| 18:02:41 |
A × ebf26c70... |
671766ea-c0a4-40d9-8833-0eb144f75e73 |
| 18:02:44 |
A × ebf26c70... |
04b26020-3aeb-45a6-8e6d-8d7661530d3b |
| 18:10:02 |
B × 18c496a6... |
96d09d7e-7cd2-4438-afa2-a4d0072a7e54 |
| 18:10:06 |
B × 18c496a6... |
91c59c25-5611-48ac-bedd-ec044b04c61e |
itemDisabledDueToPendingProvisioning 503s, same day 17:14-17:15 UTC:
0b1dae7c-1bb6-4342-9350-b15b93796e44, b8002bb7-caab-4be4-86dd-9760fae7f637,
d94f7631-6482-4948-85f2-c7fbfb54fa6e.
Questions
- Is this the same service-side incident as rclone#9794 / Q&A 5982450, with a larger blast
radius, or a separate issue?
- Is the "pending provisioning" state for a new app+user pair expected to resolve on its own,
and if so within what time? (Four hours was not enough.)
- Is there anything an app can do to trigger or wait for that provisioning correctly, other
than retrying?
This currently makes OneDrive sync unusable for every new user of an app, while existing
users are unaffected — which is why it is hard to notice from the developer's own machine.
Summary
On personal Microsoft accounts (OneDrive Personal), any app registration whose delegated
consent was granted today receives
403 accessDenied/ innerErrorserviceReadOnly/message "Database Is Read Only" on every drive endpoint, including
GET /me/drive.At the same moment, on the same machine, with the same user, the same scopes and the same
code, an app registration that the user consented to months ago returns 200 and can read
and write normally.
This looks related to the reports in
rclone/rclone#9794 and
https://learn.microsoft.com/en-us/answers/questions/5982450/
but is more severe: in those reports only the plural
GET /me/drivesfails while thesingular
GET /me/drivesucceeds. In our case the singular endpoint fails too, and only forrecently consented app+user pairs.
Environment
driveType: personal)Files.ReadWrite.AppFolder,offline_access/commonand/consumers(both reproduce)AzureADandPersonalMicrosoftAccountandPersonalMicrosoftAccountaudiences reproducec1fef054-68f1-48db-9097-61acbe59b8acReproduction
Two personal Microsoft accounts:
18c496a6-5d86-4ff5-8dd0-67d565480a3eseveral months ago.web UI (verified with a manual file upload/download round trip).
GET /me/driveGET /me/drive/special/approotPUT .../approot:/x.txt:/content18c496a6-5d86-4ff5-8dd0-67d565480a3e+ Account Aebf26c70-b7d7-4e1f-9cb9-4faf4846aa78+ Account A18c496a6-5d86-4ff5-8dd0-67d565480a3e+ Account B17172a03-2635-4db0-829a-4cee2543fa81+ Account Bebf26c70-b7d7-4e1f-9cb9-4faf4846aa78+ Account BRows 1 and 2 are six minutes apart, same user, same browser, same code path, same scopes.
Rows 1 and 3 are the same app registration with two different users.
Error body (identical for every 403):
{"error":{"code":"accessDenied","message":"Database Is Read Only", "innerError":{"code":"serviceReadOnly","date":"2026-08-23T18:02:41", "request-id":"671766ea-c0a4-40d9-8833-0eb144f75e73", "client-request-id":"671766ea-c0a4-40d9-8833-0eb144f75e73"}}}Earlier attempts on the same pair (17:14-17:15 UTC) returned a different error first, which
suggests a provisioning state machine that never completes:
{"error":{"code":"serviceNotAvailable","message":"User is pending provisioning", "innerError":{"code":"itemDisabledDueToPendingProvisioning", ...}}}and, on the very first call,
404 itemNotFoundfor the app folder.What we ruled out
18c496a6...returns 200 for Account A and 403 for Account B.AzureADandPersonalMicrosoftAccountandPersonalMicrosoftAccountreproduce./commonand/consumersboth reproduce.GET /me/driveisdemonstrably within
Files.ReadWrite.AppFolderhere — the working pair returns 200 for it.depending only on which app registration is selected.
Apps/<app display name>manually in the OneDriveweb UI does not help — the 403 happens on
GET /me/drivetoo, upstream of any folder.quota.state: normal, ~19% used.The only variable that tracks the outcome is how recently consent was granted for that
specific app + user pair.
Request IDs (all
serviceReadOnly403s)18c496a6...2d0ce041-3eac-4ad0-8bf1-4d9eea50d667ebf26c70...af8dec85-a987-41eb-980d-60e72140ebe7ebf26c70...5d4a692c-f3fb-417d-a9d6-4c759f1570abebf26c70...671766ea-c0a4-40d9-8833-0eb144f75e73ebf26c70...04b26020-3aeb-45a6-8e6d-8d7661530d3b18c496a6...96d09d7e-7cd2-4438-afa2-a4d0072a7e5418c496a6...91c59c25-5611-48ac-bedd-ec044b04c61eitemDisabledDueToPendingProvisioning503s, same day 17:14-17:15 UTC:0b1dae7c-1bb6-4342-9350-b15b93796e44,b8002bb7-caab-4be4-86dd-9760fae7f637,d94f7631-6482-4948-85f2-c7fbfb54fa6e.Questions
radius, or a separate issue?
and if so within what time? (Four hours was not enough.)
than retrying?
This currently makes OneDrive sync unusable for every new user of an app, while existing
users are unaffected — which is why it is hard to notice from the developer's own machine.