Сопоставление пользователей SSMS медленно загружается или не отвечает

У меня возникла проблема в SSMS версий 14, 18 и 19, из-за которой загрузка сопоставления пользователей для любого заданного имени входа занимает много времени, иногда до часа, или просто никогда не загружается вообще и не отвечает.

Кто-нибудь сталкивался с этим раньше и/или мог дать какие-либо рекомендации по решению этой проблемы?

Я пробовал следующее:

  • Подтверждено, что не имеет значения, является ли это входом в AD или входом в SQL.
  • Обновление версии SQL Server с 2016 по 2022 год.
  • Обновление версии SSMS с 14 до 18 и до 19.
  • Проверено на наличие блоков SQL (их нет)
  • Пробовал несколько разных логинов (кажется, все они испытывают это)
  • В этом экземпляре SQL имеется 25 баз данных и всего около 50 имен входа.

К сожалению, эта проблема невероятно затрудняет управление безопасностью пользователей и сопоставлением баз данных без написания SQL-запроса.

Любая поддержка или руководство будут оценены по достоинству!

РЕДАКТИРОВАТЬ. Я запустил трассировку SQL и определил следующий запрос как нарушителя:

USE [database_name]
SELECT
u.name AS [Name],
CAST(CASE dp.state WHEN N'G' THEN 1 WHEN 'W' THEN 1 ELSE 0 END AS bit) AS [HasDBAccess],
ISNULL(u.default_schema_name,N'') AS [DefaultSchema]
FROM
sys.database_principals AS u
LEFT OUTER JOIN sys.database_permissions AS dp ON dp.grantee_principal_id = u.principal_id 
and dp.type = @_msparam_0
WHERE
(u.type in ('U', 'S', 'G', 'C', 'K' ,'E', 'X'))
and
(ISNULL(suser_sname(u.sid),N'')=@_msparam_1)

Он запускается после выбора БД для запуска и является четвертым запросом для запуска.

РЕДАКТИРОВАТЬ 2. Именно эта часть вызывает проблему, и я понятия не имею, почему:

    and
(ISNULL(suser_sname(u.sid),N'''')=@_msparam_1)

РЕДАКТИРОВАТЬ 3. Я почти уверен, что это функция «suser_sname», протестировав ее на разных БД и разных логинах. Он просто зависает и никогда не завершается, вынуждая меня закрыть SQL.

Любые дальнейшие рекомендации будут оценены по достоинству, спасибо.

РЕДАКТИРОВАТЬ 4. Дальнейший контекст, извините за первоначальное исключение этой информации.

Эта проблема возникает в отдельном домене — нашей среде разработки. Именно здесь восстанавливаются наши производственные базы данных, и в рамках этого восстановления соответствующие учетные записи SQL обновляются для работы в домене DEV, где это необходимо.

Я задавался вопросом, возможно, некоторые потерянные учетные записи SQL вызывали эту проблему из-за некоторого несоответствия SID в sys.database_principals. Да, были некоторые потерянные учетные записи, но после их исправления с помощью sp_change_users_login эта проблема все еще возникает.

Можете ли вы отследить, какие запросы выполняет SSMS при загрузке сопоставлений пользователей?

siggemannen 22.02.2024 08:50

Вопросы @siggemannen были дополнены оскорбительными запросами. Я сейчас разбираю его и пытаюсь определить, в чем именно проблема.

L.Newell 26.02.2024 05:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
225
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TL;DR. Убедитесь, что у вас есть надежная очистка пользователя/логина при восстановлении базы данных из одного домена Windows в другой!!

Полный ответ: Как уже упоминалось в моем вопросе, проблема связана с нашей средой DEV, где базы данных восстанавливаются из нашей среды PROD.

Когда мы это делаем, мы запускаем сценарий обновления, который обновляет пользователей и входы в конкретную среду Windows. Например. PROD\L.Moy становится DEV\L.Moy при обновлении с домена Prod на домен Dev.

Этот сценарий обновления НЕ учитывает и не удаляет ненужных пользователей и логины. Необязательный пользователь и логин по-прежнему содержали свой домен PROD как часть имени пользователя Windows. Например. в нашем DEV SQL-сервере вы все равно можете найти пользователя PROD\foobar в качестве пользователя в БД, хотя он и не нужен.

Для меня это означало, что у меня было около 40 пользователей PROD Windows SQL против 25 БД, которые НЕ требовались для нашей среды разработки.

Итак, учитывая вышеизложенное, когда вы нажимаете «Сопоставление пользователей» напротив имени входа, запускается системная функция под названием «SUSER_SNAME». Когда я запускал эту функцию специально для SID для пользователей PROD и логинов в нашей среде DEV, на каждый из них ушло чуть больше минуты. Если вы запустите «SUSER_SNAME» с SID для входа, который должен находиться в DEV, он завершится немедленно.

Таким образом, решение здесь заключалось в том, чтобы фактически очистить все имена входа и пользователей, которые на самом деле не были нужны, из всех БД в среде DEV.

Затем при выборе «Сопоставление пользователей» для входа в систему он завершается немедленно, без каких-либо проблем с производительностью.

Спасибо @Stephen Morris - Mo64 за советы и предложения.

Другие вопросы по теме