Certa vez me deparei com uma demanda que possivelmente geraria certo esforço/tempo. Precisava do mapeamento de usuário e login de todas as bases de dados (100+ bases) de uma instância de um dos servidores que eu tomava conta. Não preciso nem mencionar que realizar o mesmo por SSMS seria um tanto quanto cansativo.
Enquanto pensava na possibilidade de criação de vários shorts scripts para a resolução da demanda, me deparei com uma solução da própria Microsoft. Estamos falando da procedure sp_MSloginmappings, infelizmente esta é uma procedure não documentada. Mas podemos verificar seus possíveis parâmetros de input.
exec sp_help @objname = 'sp_MSloginmappings'
Parameter_name | Type | Length | Prec | Scale | Param_order |
---|---|---|---|---|---|
@loginname | nvarchar | 516 | 258 | NULL | 1 |
@flags | int | 4 | 10 | 0 | 2 |
O parâmetro @loginname é autoexplicativo, mas o que seria o @flags? Dando uma olhada no T-SQL da procedure podemos verificar no comentário contido no código.
exec sp_helptext @objname = 'sp_MSloginmappings'
/* * @flags bits: * 0x01 - current db only */
O parâmetro @flags indica se o resultado deve filtrar apenas a base atual. Exemplo de execução da procedure.
exec sp_MSloginmappings @loginname = 'meu_login'
A partir dessa procedure podemos montar short scripts para realização de algumas tarefas. Segue um exemplo.
declare @loginmappings table ( LoginName nvarchar(128) NULL, DBName nvarchar(128) NULL, UserName nvarchar(128) NULL, AliasName nvarchar(128) NULL ); insert into @loginmappings exec sp_MSloginmappings; select * from @loginmappings -- where ????
Até o próximo post. 🙂