Ao examinar as propriedades de um logon específico, é possível ver uma lista de usuários mapeados para esse logon:
Criei um perfil do SSMS (SQL Server Management Studio) e vejo que o SSMS se conecta a cada banco de dados, um de cada vez, e recupera informações de sys.database_permissions
É possível escrever uma única consulta que recupere as informações de mapeamento do usuário mostradas acima ou sou forçado a usar um cursor ou sp_MSforeachdb ou algo parecido?
sql-server
sql-server-2008
permissions
security
logins
Michael J Swart
fonte
fonte
Respostas:
Aqui está uma maneira de usar o SQL dinâmico. Não há realmente nenhuma maneira de fazer isso sem iterar, mas essa abordagem é muito mais segura do que as opções não documentadas, sem suporte e com erros
sp_MSforeachdb
.Isso obterá uma lista de todos os bancos de dados online, o usuário mapeado (se existir), juntamente com o nome do esquema padrão e uma lista separada por vírgula das funções às quais eles pertencem.
fonte
Este script é ligeiramente modificado a partir de um script mencionado em fará o que você está procurando. Substitua 'ThursdayClass' pelo login para o qual você precisa de informações. https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
fonte
Tente sp_dbpermissions . Provavelmente lhe dará mais informações do que você precisa, mas fará o que quiser.
Uma vez instalado, execute isso.
Aviso justo no momento em que ele faz uma correspondência "like"; portanto, se outros logins forem semelhantes e coincidirem, você também os verá. Por exemplo,
MyLogin
eMyLoginForThis
ambos corresponderãoMyLogin
. Se isso for um problema, eu tenho uma versão que ainda não foi lançada e você pode desativá-la. Avise-me e posso enviá-lo por e-mail.fonte
Aqui está uma solução do PowerShell:
fonte
Infelizmente, você terá que percorrer todos os bancos de dados para obter as informações. Você vai querer se juntar
sys.database_principals
asys.server_principals
para cada correspondência de banco de dados no SID.Não use
sp_msforeachdb
como é conhecido por perder bancos de dados às vezes.fonte
Eu estava procurando uma resposta semelhante e encontrei o seguinte: https://www.pythian.com/blog/httpconsultingblogs-emc-comjamiethomsonarchive20070209sql-server-2005_3a00_-view-all-permissions-_2800_2_2900_-aspx/ . E sim, ele usa o temido sp_MSforeachDB, mas acho que esse cara faz um rap ruim às vezes ... ;-)
Vou postar o SQL aqui para facilitar a cópia-pasta ( NÃO estou recebendo crédito por isso, apenas tornando-o facilmente acessível!):
fonte
A Consulta abaixo deve retornar os mapeamentos para o DbName solicitado
Consulta aprimorada abaixo
fonte
Que tal
EXEC master..sp_msloginmappings
?fonte
sp_msloginmappings
checou se está sem documentos e sem suporte antes da postagem?