I know this is old, but is there STILL no way to do this?
You could try looking at row level security (RLS) on sys.databases but I suspect this will fail as the system databases are in the Resource db so are read only. (ie I suspect you could not create a security policy for sys.databases.)
If you can live with the restrictions of a partially contained database then the user will only be able to see the db they have access to. I quickly did the following on Docker Desktop server:2022-latest (CU2):
CREATE DATABASE db1;
CREATE DATABASE db2;
CREATE DATABASE db3;
EXEC sp_configure 'contained database authentication', 1;
CREATE DATABASE dbP CONTAINMENT = PARTIAL;
CREATE USER UserP WITH PASSWORD = 'AStrongP4ssword!';
I was then able to select the dbP database in SSMS and login as UserP. The only database I could see was dbP.
I think partially contained dbs have been available since SQL2012.