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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值