При просмотре свойств определенного имени входа можно увидеть список пользователей, сопоставленных с этим именем входа:
Я профилировал SQL Server Management Studio (SSMS) и вижу, что SSMS подключается к каждой базе данных по одному и получает информацию из sys.database_permissions
Можно ли написать один запрос, который извлекает информацию о отображении пользователя, показанную выше, или я вынужден использовать курсор или sp_MSforeachdb или что-то в этом роде?
sql-server
sql-server-2008
permissions
security
logins
Майкл Дж Сварт
источник
источник
Ответы:
Вот один из способов использования динамического SQL. На самом деле нет никакого способа сделать это без итерации, но этот подход намного безопаснее, чем недокументированные, неподдерживаемые и ошибочные варианты, такие как
sp_MSforeachdb
.Это позволит получить список всех онлайн-баз данных, сопоставленного пользователя (если он существует), а также имя схемы по умолчанию и разделенный запятыми список ролей, которым он принадлежит.
источник
Этот скрипт немного изменен по сравнению со скриптом, упомянутым по желанию, и сделает то, что вы ищете. Замените 'MondayClass' на логин, для которого вам нужна информация. https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
источник
Попробуйте sp_dbpermissions . Это, вероятно, даст вам больше информации, чем вам нужно, но будет делать то, что вы хотите.
После установки запустите это.
Честное предупреждение, в данный момент он выполняет "лайк", поэтому, если другие логины похожи и совпадают, вы их тоже увидите. Например
MyLogin
иMyLoginForThis
оба совпадут поMyLogin
. Если это проблема, у меня есть версия, которую я еще не выпустил, где вы можете отключить ее. Дайте мне знать, и я могу отправить это вам по электронной почте.источник
Вот решение PowerShell:
источник
К сожалению, вам придется перебирать все базы данных, чтобы получить информацию. Вы захотите присоединиться
sys.database_principals
кsys.server_principals
каждой базе данных, совпадающей по SID.Не используйте,
sp_msforeachdb
как известно, время от времени пропускают базы данных.источник
Я искал похожий ответ и нашел это: https://www.pythian.com/blog/httpconsultingblogs-emc-comjamiethomsonarchive20070209sql-server-2005_3a00_-view-all-permissions-_2800_2_2900_-aspx/ . И да, он использует страшный sp_MSforeachDB, но я думаю, что этот парень иногда получает плохой рэп ... ;-)
Я опубликую SQL здесь для простого копирования-пасты (я не беру на себя ответственность за это, просто делаю его легко доступным!):
источник
Ниже Query должен вернуть сопоставления для запрошенного DbName
Улучшенный запрос ниже
источник
Как насчет
EXEC master..sp_msloginmappings
?источник
sp_msloginmappings
недокументированные и неподдерживаемые перед публикацией?