sql server drop login failed

 

https://stackoverflow.com/questions/37275/sql-query-for-logins

https://www.mssqltips.com/sqlservertip/4299/sql-server-errors-with-drop-login-and-drop-user/

获取所有的用户

SELECT sid
FROM   master..syslogins

 

筛选出db owner不是sa的数据库

SELECT ROW_NUMBER() OVER ( ORDER BY name ) AS RowNumber ,
       name AS DatabaseName ,
       SUSER_SNAME(owner_sid) AS DBOwner ,
       is_read_only ,
       state_desc
FROM   sys.databases
WHERE  SUSER_SNAME(owner_sid) <> 'sa';

 

 

 

通过下面的sql,批量将数据库owner不是sa的设置为sa。 排除了offline和readonly的,并且排除掉master,model,tempdb,distribution四个系统数据库

复制代码
DECLARE @MyTable TABLE
    (
        RowNumber INT NOT NULL ,
        DatabaseName NVARCHAR(500) NOT NULL ,
        DBOwner NVARCHAR(500) NOT NULL
    );
INSERT INTO @MyTable ( RowNumber ,
                       DatabaseName ,
                       DBOwner )
            SELECT ROW_NUMBER() OVER ( ORDER BY name ) AS RowNumber ,
                   name AS DatabaseName ,
                   SUSER_SNAME(owner_sid) AS DBOwner
            FROM   sys.databases
            WHERE  state_desc <> 'OFFLINE'
                   AND is_read_only = 0
                   AND name NOT IN ( 'master', 'tempdb', 'model' ,
                                     'distribution' );

DECLARE @CurrentRowNumber INT = 1;
DECLARE @MaxRowNumber INT;
SELECT @MaxRowNumber = MAX(RowNumber)
FROM   @MyTable;

DECLARE @SQLString NVARCHAR(500);
DECLARE @TempDatabaseName NVARCHAR(500);
WHILE ( @CurrentRowNumber <= @MaxRowNumber )
    BEGIN
        SELECT @TempDatabaseName = DatabaseName
        FROM   @MyTable
        WHERE  RowNumber = @CurrentRowNumber;
        SET @SQLString = 'Use ' + @TempDatabaseName
                         + '; EXECUTE sp_changedbowner ''sa''';
        PRINT @SQLString;
        EXECUTE sp_executesql @SQLString;
        SET @CurrentRowNumber = @CurrentRowNumber + 1;
    END;
复制代码

 

作者:Chuck Lu    GitHub    
posted @   ChuckLu  阅读(645)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示