Banco de dados logins e usuários do banco de dados são diferentes . Basicamente, um login é concedido permissões do servidor, um usuário recebe permissões para o banco de dados. Logins são mapeados para bancos de dados.
Meu palpite é que você tem usuários em um banco de dados que não são mapeados para logins é que você restaurou um banco de dados de outro SQL Server e não copiou os logins. Existem basicamente duas maneiras de consertar usuários órfãos . Você pode usar sp_change_users_login
ou pode copiar os logons entre os servidores para que a correspondência do sid.
Se você quiser usar um método de logon único, poderá fazer isso integrando-se ao Active Directory criando um login do Windows ao invés de usar um login sql.
Sim, você pode mapear um login para mais de um banco de dados. Você pode GRANT
acessar diferentes objetos para cada banco de dados para o usuário ou adicionar o usuário a uma função de banco de dados. Há também funções de todo o servidor que dão acesso a um banco de dados, um bom exemplo disso é a função sysadmin.
Definir um banco de dados padrão para o login não dá a esse login nenhuma permissão no banco de dados. Você verá que, por padrão, um login está no grupo público e isso proporciona acesso de nível muito baixo ao master & tempdb.
Você precisa conceder explicitamente acesso para um login no banco de dados. Você faz isso com sp_adduser . Se você criar os usuários no Enterprise Manager, então sim, o nome de login corresponderá ao nome do usuário, mas não é necessário, o sproc permite que você defina um nome de usuário diferente.
Este exemplo de código demonstra a diferença:
SELECT USER --database user
SELECT SYSTEM_USER --login
Eu não sei sobre o DB2, mas a Oracle não tem o conceito de login e usuário.