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 / 12817
Accepted
Daniel James Bryars
Daniel James Bryars
Asked: 2012-02-14 07:31:35 +0800 CST2012-02-14 07:31:35 +0800 CST 2012-02-14 07:31:35 +0800 CST

Existe uma maneira abreviada de 'Auto_Fix' todos os usuários órfãos em um banco de dados SQL Server 2008 R2?

  • 772

É bastante simples corrigir um único usuário SQL órfão para um login usando:

EXEC sp_change_users_login 'Auto_Fix', 'usuário'

Eu poderia fazer um script disso, mas existe um procedimento armazenado existente que tenta automaticamente corrigir todos os usuários órfãos em um determinado banco de dados?

sql-server-2008-r2
  • 6 6 respostas
  • 64558 Views

6 respostas

  • Voted
  1. Best Answer
    Aaron Bertrand
    2012-02-15T07:49:52+08:002012-02-15T07:49:52+08:00

    Ted Krueger ( @onpnt no twitter) escreveu um ótimo script que faz isso. Ele adiciona logins para qualquer usuário sem login e executa o auto_fix. Ele até escreveu um que inclui a correção de logins do Windows:

    http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/fixing-orphaned-database-users

    Claro que se você quiser testá-lo primeiro (ou simplesmente realizar uma auditoria) você pode comentar as linhas de ação ( EXEC) e apenas imprimir os resultados.

    • 16
  2. Phú Nguyễn Dương
    2018-06-20T19:10:43+08:002018-06-20T19:10:43+08:00

    com base no script acima, podemos corrigir todos os usuários em uma instância usando sp_MSForeachdb assim

    declare @name varchar(150)
    declare @query nvarchar (500)
    
    DECLARE cur CURSOR FOR
        select name from master..syslogins
    
    Open cur
    
    FETCH NEXT FROM cur into @name
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
    
    set @query='USE [?]
    IF ''?'' <> ''master'' AND ''?'' <> ''model'' AND ''?'' <> ''msdb'' AND ''?'' <> ''tempdb''
    BEGIN   
    exec sp_change_users_login ''Auto_Fix'', '''+ @name +'''
    END'
    
    EXEC master..sp_MSForeachdb @query
    
        FETCH NEXT FROM cur into @name
    
    END
    
    CLOSE cur
    DEALLOCATE cur
    

    espero que ajude

    • 6
  3. Devshish
    2018-03-15T05:06:25+08:002018-03-15T05:06:25+08:00

    Abaixo está o script simples que faz o trabalho perfeitamente -

    USE DBNAME     ----- change db name for which you waant to fix orphan users issue
    
    GO
    
    
    declare @name varchar(150)
    
    DECLARE cur CURSOR FOR
        select name from master..syslogins
    
    Open cur
    
    FETCH NEXT FROM cur into @name
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
    
        EXEC sp_change_users_login 'AUTO_FIX', @name
    
        FETCH NEXT FROM cur into @name
    
    END
    
    CLOSE cur
    DEALLOCATE cur
    
    • 2
  4. SQLDBAWithABeard
    2019-09-24T00:53:21+08:002019-09-24T00:53:21+08:00

    Este seria um ótimo caso de uso para usar o comando dbatools Repair-DbaDbOrphanUser

    Primeiro você pode identificar os usuários órfãos

    Get-DbaDbOrphanUser -SqlInstance $sqlinstance
    
    ComputerName : SQL01
    InstanceName : MSSQLSERVER
    SqlInstance  : SQL01
    DatabaseName : SockFactoryApp
    User         : SockFactoryApp_User
    

    e, em seguida, resolvê-los com

    Repair-DbaDbOrphanUser -SqlInstance $sqlinstance
    
    ComputerName : SQL01
    InstanceName : MSSQLSERVER
    SqlInstance  : SQL01
    DatabaseName : SockFactoryApp
    User         : SockFactoryApp_User
    Status       : Success
    
    • 1
  5. shohel ahmed
    2022-03-16T17:51:28+08:002022-03-16T17:51:28+08:00

    Para corrigir usuários órfãos de um único banco de dados para todos os usuários

    BEGIN 
    
    DECLARE @username varchar(25) 
    
    DECLARE fixusers CURSOR 
    FOR 
    
    SELECT UserName = name FROM sysusers 
    WHERE issqluser = 1 and (sid is not null and sid <> 0x0) 
    and suser_sname(sid) is null 
    ORDER BY name 
    
    OPEN fixusers 
    
    FETCH NEXT FROM fixusers 
    INTO @username 
    
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
    EXEC sp_change_users_login 'update_one', @username, @username 
    FETCH NEXT FROM fixusers 
    INTO @username 
    END 
    
    
    CLOSE fixusers 
    
    DEALLOCATE fixusers 
    
    END 
    
    go
    
    • 0
  6. Gregory Liénard
    2022-04-11T23:22:03+08:002022-04-11T23:22:03+08:00
    EXEC sp_MSforeachdb 'USE ? exec sp_change_users_login ''Auto_Fix'', ''Username'';'
    
    • -2

relate perguntas

  • Propriedades de redução automática, criptografia e modelo de recuperação no SQL Server 2008 R2

  • A instalação autônoma do cluster do SQL Server 2008 R2 falha com o erro - "Caracteres ilegais no caminho".

  • Migração de banco de dados grande

  • plano de manutenção executado pelo agente

  • Randomizando o conteúdo da tabela e armazenando-o de volta na tabela

Sidebar

Stats

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

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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