AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 336126
Accepted
L.Moy
L.Moy
Asked: 2024-02-22 11:13:05 +0800 CST2024-02-22 11:13:05 +0800 CST 2024-02-22 11:13:05 +0800 CST

Mapeamento de usuário SSMS lento para carregar ou não responde

  • 772

Tenho enfrentado um problema nas versões 14, 18 e 19 do SSMS, em que o carregamento do mapeamento de usuário de qualquer login demora muito para carregar, às vezes até uma hora, ou simplesmente nunca carrega e não responde.

Alguém já passou por isso antes e/ou pode dar alguma orientação sobre como resolver isso?

Eu tentei o seguinte:

  • Confirmado que não importa se é um login AD ou login SQL
  • Atualizando a versão do SQL Server de 2016 para 2022
  • Atualizando a versão do SSMS de 14 para 18 e para 19
  • Verificado se há algum bloco SQL (não há nenhum)
  • Tentei vários logins diferentes (todos parecem passar por isso)

Existem 25 bancos de dados nesta instância SQL e aproximadamente 50 logins no total.

Infelizmente, esse problema está tornando incrivelmente difícil gerenciar a segurança do usuário e os mapeamentos para bancos de dados sem escrever alguma consulta SQL.

Qualquer apoio ou orientação seria muito apreciado!

Saúde,

EDIT - executei um rastreamento SQL e identifiquei a seguinte consulta como o infrator:

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)

Ele é executado após a seleção de um banco de dados para execução e é a quarta consulta a ser executada.

EDIT 2 - É especificamente esta parte que está causando o problema e não tenho ideia do porquê:

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

EDIT 3 - Tenho certeza de que é a função "suser_sname", tendo-a testado em diferentes bancos de dados e logins diferentes. Ele simplesmente trava e nunca é concluído, forçando-me a fechar o SQL.

Qualquer orientação adicional seria apreciada, obrigado.

EDIT 4 - Contexto adicional, desculpas pela omissão original desta informação.

Esse problema está ocorrendo em um domínio separado , nosso ambiente DEV. É onde nossos bancos de dados de produção são restaurados e, como parte dessa restauração, os logins SQL associados são atualizados para funcionar no domínio DEV quando necessário.

Gostaria de saber se talvez alguns logins SQL órfãos estivessem causando esse problema com alguma incompatibilidade do SID em sys.database_principals. Sim, houve alguns logins órfãos, mas após corrigi-los com sp_change_users_login, esse problema ainda ocorre.

sql-server
  • 1 1 respostas
  • 123 Views

1 respostas

  • Voted
  1. Best Answer
    L.Moy
    2024-02-28T14:13:47+08:002024-02-28T14:13:47+08:00

    DR - Certifique-se de ter uma limpeza robusta de usuário/login ao restaurar um banco de dados de um domínio do Windows para outro!!

    Resposta completa: Conforme mencionado na minha pergunta, o problema reside em nosso ambiente DEV, onde os bancos de dados são restaurados de nosso ambiente PROD.

    Ao fazer isso, executamos um script de atualização que atualiza usuários e logins em seu ambiente Windows específico. Por exemplo, PROD\L.Moy torna-se DEV\L.Moy, ao atualizar do domínio Prod para o domínio Dev.

    O que este script de atualização NÃO faz é levar em consideração e remover usuários e logins não obrigatórios. Um usuário e login não obrigatórios ainda continham seu domínio PROD como parte do nome de usuário do Windows. Por exemplo, em nosso DEV SQL Server, você ainda pode encontrar o usuário PROD\foobar como um usuário no banco de dados, apesar de não ser necessário.

    O que isso significou para mim foi que eu tinha cerca de 40 usuários PROD Windows SQL combinados contra 25 bancos de dados que NÃO eram necessários para nosso ambiente DEV.

    Portanto, tendo em mente o que foi dito acima, quando você clica em "Mapeamento de Usuário" em um Login, ele executa uma função do sistema chamada "SUSER_SNAME". Quando executei essa função especificamente em SIDs para usuários PROD e logins em nosso ambiente DEV, demorou pouco mais de um minuto para cada um. Se você executar "SUSER_SNAME" com um SID para um login que deveria estar em DEV, ele será concluído imediatamente.

    Portanto, a solução aqui foi limpar todos os logins e usuários que não eram realmente necessários, de todos os bancos de dados no ambiente DEV.

    Então, ao selecionar "Mapeamento de usuários" em um login, ele é concluído imediatamente, sem nenhum problema de desempenho.

    Obrigado a @Stephen Morris - Mo64 por suas orientações e sugestões.

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve