惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
H
Help Net Security
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
A
About on SuperTechFans
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
aimingoo的专栏
aimingoo的专栏
F
Fortinet All Blogs
博客园 - 【当耐特】
Microsoft Security Blog
Microsoft Security Blog
Martin Fowler
Martin Fowler
I
InfoQ
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
U
Unit 42
The Cloudflare Blog
Y
Y Combinator Blog

博客园 - robinli

SEO:谷歌浏览器提示:您要访问的网站包含恶意软件(解决方案) 关闭防病毒antimalware Service Executa SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 已解决:无法连接到WMI提供程序。你没有权限或者该服务器无访问··· window系统下升级node和npm SQLSERVER:误删Windows登录用户而sa禁用,导致无法使用Windows身份验证解决方案 更新依赖mvn dependency:resolve 服务器出现大批量登录审核失败/NtLmSsp攻击 如何将多个大型站点从 IIS 7 迁移到 IIS 8.5? 记一次 IIS 站点配置文件备份和还原,物理路径文件批量备份 SQL Server2019数据库备份与还原脚本,数据库可批量备份 FCKeditor编辑器IE11不显示的解决方法 vscode Vue格式化HTML标签换行问题 WIN10的IE错误代码inet_e_resource_not_found解决办法 远程桌面,身份验证错误:要求的函数不正确等解决办法 IIS 请求 超时设置 Redis设置密码重启后失效的解决方案 连接redis错误:ERR Client sent AUTH, but no password is set 关于阿里云专有网络搭建FTP服务器的深坑 电脑异常断电,IDEA崩溃 Winform 出现“Win已停止工作”解决方法 C# WinForm控件、自定义控件整理(大全) 出现“基础链接已关闭,无法链接到远程服务器"错误的解决办法
sqlserver2008数据库登陆名备份迁移方法
robinli · 2023-11-04 · via 博客园 - robinli

2023-11-04 23:24  robinli  阅读(285)  评论()    收藏  举报

建立存储过程
–启动SQL Server Management Studio
–新建查询:
–执行命令:

select * from sys.sql_logins

–显示系统用户如上
–在生产服务器上创建两个存储过程导出以上全部用户

USE master
GO
IF OBJECT_ID('sp_hexadecimal')IS NOT NULL
    DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
        @binvalue varbinary(256),
        @hexvalue varchar(514)OUTPUT
AS
DECLARE @charvalue varchar(514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue ='0x'
SELECT @i =1
SELECT @length =DATALENGTH(@binvalue)
SELECT @hexstring ='0123456789ABCDEF'
WHILE(@i <=@length)
BEGIN
    DECLARE @tempint int
    DECLARE @firstint int
    DECLARE @secondint int
    SELECT @tempint =CONVERT(int,SUBSTRING(@binvalue,@i,1))
    SELECT @firstint =FLOOR(@tempint/16)
    SELECT @secondint =@tempint -(@firstint*16)
    SELECT @charvalue =@charvalue +
        SUBSTRING(@hexstring,@firstint+1,1)+
        SUBSTRING(@hexstring,@secondint+1,1)
    SELECT @i =@i +1
END
SELECT @hexvalue =@charvalue
GO       
IF OBJECT_ID('sp_help_revlogin')IS NOT NULL
    DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname=NULL AS
DECLARE @name sysname
DECLARE @type varchar(1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary    varbinary(256)
DECLARE @PWD_string    varchar(514)
DECLARE @SID_varbinary varbinary(85)
DECLARE @SID_string varchar(514)
DECLARE @tmpstr    varchar(1024)
DECLARE @is_policy_checked varchar(3)
DECLARE @is_expiration_checked varchar(3)
DECLARE @defaultdb sysname       
IF(@login_name IS NULL)
    DECLARE login_curs CURSOR FOR
            SELECT p.sid,p.name,p.type,p.is_disabled,p.default_database_name,l.hasaccess,l.denylogin FROM   
sys.server_principals p LEFT JOIN sys.syslogins l
            ON(l.name=p.name)WHERE p.type IN('S','G','U')AND p.name<>'sa'
ELSE
    DECLARE login_curs CURSOR FOR
            SELECT p.sid,p.name,p.type,p.is_disabled,p.default_database_name,l.hasaccess,l.denylogin FROM   
sys.server_principals p LEFT JOIN sys.syslogins l
            ON(l.name=p.name)WHERE p.type IN('S','G','U') AND p.name=@login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @SID_varbinary,@name,@type,@is_disabled,@defaultdb,@hasaccess,@denylogin
IF(@@fetch_status=-1)
BEGIN
    PRINT'No login(s) found.'
    CLOSE login_curs
    DEALLOCATE login_curs
    RETURN-1
END
SET @tmpstr ='/* sp_help_revlogin script. '
PRINT @tmpstr
SET @tmpstr ='** Generated '+CONVERT(varchar,GETDATE())+' on '+@@SERVERNAME+' */'
PRINT @tmpstr
PRINT''
WHILE(@@fetch_status<>-1)
BEGIN
    IF(@@fetch_status<>-2)
    BEGIN
        PRINT''
        SET @tmpstr ='-- Login: '+@name
        PRINT @tmpstr
        IF(@type IN('G','U'))
        BEGIN-- NT authenticated account/group
            SET @tmpstr ='CREATE LOGIN '+QUOTENAME(@name )+' FROM WINDOWS WITH DEFAULT_DATABASE = ['+
@defaultdb +']'
        END
        ELSE BEGIN-- SQL Server authentication
                -- obtain password and sid
                        SET @PWD_varbinary =CAST(LOGINPROPERTY(@name,'PasswordHash')AS varbinary(256))
                EXEC sp_hexadecimal @PWD_varbinary,@PWD_string OUT
                EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT       
                -- obtain password policy state
                SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN'ON'WHEN 0 THEN'OFF'ELSE NULL END
FROM sys.sql_logins WHERE name=@name
                SELECT @is_expiration_checked =CASE is_expiration_checked WHEN 1 THEN'ON'WHEN 0 THEN'OFF'ELSE
NULL END FROM sys.sql_logins WHERE name=@name       
                        SET @tmpstr ='CREATE LOGIN '+QUOTENAME(@name )+' WITH PASSWORD = '+@PWD_string +' HASHED, SID = '+@SID_string +', DEFAULT_DATABASE = ['+@defaultdb +']'
                IF(@is_policy_checked IS NOT NULL)
                BEGIN
                    SET @tmpstr =@tmpstr +', CHECK_POLICY = '+@is_policy_checked
                END
                IF(@is_expiration_checked IS NOT NULL)
                BEGIN
                    SET @tmpstr =@tmpstr +', CHECK_EXPIRATION = '+@is_expiration_checked
                END
        END
        IF(@denylogin =1)
        BEGIN-- login is denied access
            SET @tmpstr =@tmpstr +'; DENY CONNECT SQL TO '+QUOTENAME(@name )
        END
        ELSE IF(@hasaccess =0)
        BEGIN-- login exists but does not have access
            SET @tmpstr =@tmpstr +'; REVOKE CONNECT SQL TO '+QUOTENAME(@name )
        END
        IF(@is_disabled =1)
        BEGIN-- login is disabled
            SET @tmpstr =@tmpstr +'; ALTER LOGIN '+QUOTENAME(@name )+' DISABLE'
        END
        PRINT @tmpstr
    END
    FETCH NEXT FROM login_curs INTO @SID_varbinary,@name,@type,@is_disabled,@defaultdb,@hasaccess,@denylogin
     END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO

–命令已成功完成
–系统存储过程中多了两个分别是
sp_help_revlogin
sp_hexadecimal
2. 导出用户名
执行存储过程

3. 在导出的用户名中挑出系统用户
如system等系统用户,

4. 在目标机器上建立与源机器相同名称的数据库
只建立即可,此步骤不还原数据库。

5. 在目标机器的数据库上新建查询,执行在第二步骤中导出的用户名命令

6. 备份源机器上的数据库
完整备份

7. 在目标机器上还原源机器备份的数据库
覆盖还原