Listando logins membros da role sysadmin
Olá pessoal tudo certo?
Depois de um período de férias recarregando as baterias estamos de volta.
E no post de hoje vou compartilhar um script que ajuda a identificar todos os logins que tem acesso a role sysadmin. Para os que não sabem os membros da role sysadmin podem executar qualquer ação na instância, como por exemplo executar um drop database.
“É uma boa pratica sempre trabalhar com o menor acesso possível.”
O script abaixo lista todos os usuários membros da role sysadmin, neste script vamos utilizar as seguintes views de catálogo sys.server_principals e sys.syslogins.
A view sys.server_principals retorna as informações sobre os logins da instância existem 6 tipos de principals os SQL_LOGIN, WINDOWS_LOGIN, WINDOWS_GROUP, SERVER_ROLE, CERTIFICATE_MAPPED_LOGIN e ASYMMETRIC_KEY_MAPPED_LOGIN.
Enquanto a view sys.syslogins retorna informações sobre o login do tipo, quando o login foi criado, alterado e as server roles que ele é membro.
SELECT a.name AS LoginName, a.type_desc AS LoginType, a.default_database_name AS DefaultDBName, CASE WHEN b.sysadmin = 1 THEN 'True' ELSE 'False' END [SysAdmin], CASE WHEN b.sysadmin = 1 THEN 'ALTER SERVER ROLE [sysadmin] DROP MEMBER ' + '[' + a.name + ']' ELSE 'ALTER SERVER ROLE [sysadmin] ADD MEMBER ' + '[' + a.name + ']' END Command, CASE WHEN a.is_disabled = 1 THEN 'Login desabilitado' ELSE 'Login habilitado' END Status FROM sys.server_principals a JOIN master..syslogins b ON a.sid = b.sid WHERE a.type <> 'R' AND b.sysadmin = 1 AND a.name NOT LIKE '##%' ORDER BY b.sysadmin;
Agora já sabemos quais logins ativos, fazem parte da role sysadmin, agora é fazer uma análise se o login realmente necessita fazer parte da role.
Bom pessoal por enquanto é isso, uma boa semana a todos.