AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 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

在 SQL Server 2008 R2 数据库中是否有“Auto_Fix”所有孤立用户的速记方法?

  • 772

使用以下方法将单个孤立的 SQL 用户修复为登录相当简单:

EXEC sp_change_users_login 'Auto_Fix', 'user'

我可以编写脚本,但是是否有一个现有的存储过程会自动尝试修复给定数据库中的每个孤立用户?

sql-server-2008-r2
  • 6 6 个回答
  • 64558 Views

6 个回答

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

    Ted Krueger(推特上的@onpnt)写了一个很棒的脚本来做到这一点。它为没有登录名的任何用户添加登录名并运行 auto_fix。他甚至写了一篇文章,其中包括修复 Windows 登录:

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

    当然,如果您想先对其进行测试(或仅执行审计),您可以注释掉操作行 ( EXEC),然后打印出结果。

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

    基于上述脚本,我们可以像这样使用 sp_MSForeachdb 修复实例中的所有用户

    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
    

    希望它会有所帮助

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

    下面是完美完成这项工作的简单脚本——

    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

    这将是使用 dbatools 命令Repair-DbaDbOrphanUser的一个很好的用例

    首先,您可以识别孤立用户

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

    然后解决它们

    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

    为所有用户修复单个数据库的孤立用户

    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

相关问题

  • SQL Server 2008 R2 中的自动收缩、加密和恢复模型属性

  • SQL Server 2008 R2 群集的无人参与安装失败并出现错误 - “路径中有非法字符”。

  • 迁移大型数据库

  • 代理执行的维护计划

  • 随机化表内容并将它们存储回表中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve