Quero criar uma coleção de bancos de dados e usuários para que cada usuário tenha acesso a apenas um banco de dados.
A pergunta do SO Diferença entre um usuário e um login no SQL Server discute logins e usuários.
Entendo que, geralmente, um login é para o servidor e um usuário é para o banco de dados. No entanto, não consigo ver como isso funciona, pois a senha é definida para o login, não para o usuário.
Isso significa que preciso de um login diferente para cada banco de dados ou existe uma maneira de fazer isso com um único login com vários usuários, cada um com sua própria senha?
Quero fazer isso em SQL, não na interface gráfica, pois preciso criar um script para isso.
Isso parece um caso para bancos de dados contidos .
Defina o suporte de contenção no nível do servidor:
Defina a contenção parcial no nível do banco de dados (observe que isso requer um bloqueio exclusivo, portanto pode precisar de um único usuário e não funcionará muito bem se um banco de dados estiver em um AG):
Crie um usuário com senha somente naquele banco de dados e dê a ele as permissões apropriadas, por exemplo:
Esteja ciente das limitações mencionadas na página e dos impactos em outros recursos .
Se você estiver usando Logins SQL, então cada indivíduo precisará do seu próprio
LOGIN
, sim, que então precisará serUSER
criado no(s) respectivo(s) banco(s) de dados aos quais a pessoa precisa ter acesso. Como um exemplo simplificado demais:Se você estiver usando bancos de dados contidos, então você pode "pular" a
LOGIN
criação, e em vez disso criar umUSER
com uma senha. A pessoa que está autenticando no SQL Server, no entanto, precisaria garantir que especificasse o banco de dados ao qual deseja se conectar quando autenticar, pois não fazer isso resultaria em um erro de conexão. Note, no entanto, que bancos de dados contidos funcionam um pouco diferente dos não contidos; a maior coisa que as pessoas parecem "esquecer", é que consultas entre bancos de dados não são permitidas em tais bancos de dados.Usando o exemplo simplificado anterior: