We have a database user A to access database B. But it can't work.
When we try to connect B using A, but it failed and reported error 18456.
Then we checked, A has a public permission on users mapping. Normally it should be OK.
Then we checked the database role: public. In servers roles, the public missed TSQL Default TCP.
Then we added it and now its OK.