This is the error I hit in SQL Server Management Studio when trying to expand the Databases node:
Failed to retrieve data for this request.
(Microsoft.SqlServer.Management.Sdk.Sfc)
An exception occurred while executing a Transact-SQL statement or batch.
(Microsoft.SqlServer.ConnectionInfo)
The server principal "UserName" is not able to access the database "DatabaseName"
under the current security context. (Microsoft SQL Server, Error: 916)
The frustrating part is that the error names one database you cannot access, and then refuses to show you any of them.
The cause is Object Explorer Details. If you connect to a server where you are not in full control of every database, or where some databases are offline or set to auto-close, SSMS tries to populate the columns it shows by default. For a database that is offline or auto-closed, Collation comes back NULL. SSMS treats that NULL as a permissions failure, and rather than hiding the one database that caused it, it gives up on the whole list.
The fix is to stop it asking for that column. Open Object Explorer Details, right-click the column header, and uncheck Collation. Refresh the Databases node and the full list comes back, including the databases you cannot access.
This bites hardest when you connect to databases hosted by a third party provider, since many of them leave as many databases in auto-close mode as they can.
I found the explanation on Aaron Bertrand's SQL blog, which saved me a lot of digging.