背景

DBA 经常会遇到的一个场景就是数据库的迁移,把数据库从A服务器迁移到B服务器。在数据库完成迁移后,我们还需要把相关的其他一些服务器级别的对象迁移过去,比如作业,登录账户,链接服务器等。今天主要分享导出登录账户的脚本

正文

---SQL 2005以上版本适用--找到了解决办法.
--1.在A服务器上执行
USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULLDROP 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)
BEGINDECLARE @tempint intDECLARE @firstint intDECLARE @secondint intSELECT @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
ENDSELECT @hexvalue = @charvalue
GOIF OBJECT_ID ('sp_help_revlogin') IS NOT NULLDROP 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 sysnameIF (@login_name IS NULL)DECLARE login_curs CURSOR FORSELECT 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 lON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSEDECLARE login_curs CURSOR FORSELECT 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 lON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_cursFETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGINPRINT 'No login(s) found.'CLOSE login_cursDEALLOCATE login_cursRETURN -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)
BEGINIF (@@fetch_status <> -2)BEGINPRINT ''SET @tmpstr = '-- Login: ' + @namePRINT @tmpstrIF (@type IN ( 'G', 'U'))BEGIN -- NT authenticated account/groupSET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'ENDELSE BEGIN -- SQL Server authentication-- obtain password and sidSET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUTEXEC sp_hexadecimal @SID_varbinary,@SID_string OUT-- obtain password policy stateSELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @nameSELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @nameSET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'IF ( @is_policy_checked IS NOT NULL )BEGINSET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checkedENDIF ( @is_expiration_checked IS NOT NULL )BEGINSET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checkedENDENDIF (@denylogin = 1)BEGIN -- login is denied accessSET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )ENDELSE IF (@hasaccess = 0)BEGIN -- login exists but does not have accessSET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )ENDIF (@is_disabled = 1)BEGIN -- login is disabledSET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'ENDPRINT @tmpstrENDFETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denyloginEND
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO

--生成创建登录账号脚本

exec master..sp_help_revlogin

把脚本COPY到新的服务器上执行

总结

使用这个办法有2个好处。1。可以批量同步所有需要的登录账号

2.由于产生的SID是相同的,不会有孤立账号的问题。在ALWAY ON环境下,我们就需要采用这种方式。不然没有ALWAYS ON 切换后都需要手动处理 孤立账号的问题

数据库迁移必备--迁移登录账户相关推荐

  1. mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?

    原标题:亿级账户数据迁移,不用数据库工具还能怎么搞? 背景 在阿里巴巴内部"大中台,小前台"的组织和业务体制,使前线业务更加敏捷,赋能业务积极迎接未来挑战和机遇,在阿里大中台能力建 ...

  2. oracle怎么将一列挪到另一列,详细讲解Oracle数据库的数据迁移方法

    <详细讲解Oracle数据库的数据迁移方法>由会员分享,可在线阅读,更多相关<详细讲解Oracle数据库的数据迁移方法(4页珍藏版)>请在人人文库网上搜索. 1.详细讲解 Or ...

  3. ORACLE使用copy方式存储迁移,详细讲解Oracle数据库的数据迁移方法

    添加所需的表空间和用户到目标数据库中:安装所需的SQL*Net2或者Net8软件,并配置用于连接数据库的别名. 在DOS命令提示符下设置oracle_sid=Oracle7_sid. 以Interna ...

  4. python库迁移到没有网的电脑_python实现数据库跨服务器迁移

    数据库从一个服务器转移到另外一个服务器,怎么转?你可以用一分钟遇见一个人,用一小时了解一个人,用一天爱上一个人,但是你却要用一辈子忘记一个人. 分离,附加?还是备份.还原?具体过程是什么?有什么要注意 ...

  5. 活动目录数据库重定向或迁移

    活动目录数据库重定向或迁移到其他目录 进入安全模式的 目录服务还原模式,以本机管理员账号登录 主要采用以下命令: Ntdsutil Ntdsutil:files ----进入活动目录NTDS数据库模式 ...

  6. mysql 5.5.38_数据库的硬迁移和mysql 5.5.38源码安装

    场景: 一台服务器出现了故障,需要把数据库迁移到另一台服务器上,由于数据效大,直接压缩数库 的数据目录(在数据库DOWN的情况下) 数据库版本mysql 5.5.38 安装方式:源码安装 思路:在另一 ...

  7. MySQL数据库从windows迁移到linux

    前几天搭建了lamp环境,想把之前写的小东西迁到linux上运行,涉及到把mysql数据库的文件迁移到linux上,直接用fileZilla传过去应该不行,我试了下,反正没成功.下面是我采用的方法: ...

  8. sql创建计算机用户,2015年计算机四级数据库复习要点:SQL Server 登录账户

    2015年计算机四级数据库复习要点:SQL Server 登录账户 系统内置的登录账户 1. BUILTIN\Administrators:是一个Windows组账户,表示所有的Windows Adm ...

  9. 数据库的硬迁移和mysql 5.5.38源码安装

    场景: 一台服务器出现了故障,需要把数据库迁移到另一台服务器上,由于数据效大,直接压缩数库 的数据目录(在数据库DOWN的情况下) 数据库版本mysql 5.5.38 安装方式:源码安装 思路:在另一 ...

最新文章

  1. 中信国健临床通讯2011年7月期目录
  2. F5 任命 Ben Gibson 担任首席营销官
  3. Winform中使用异或算法对数字进行加密解密
  4. C++学习之路: 单例模板
  5. Qt Quick的国际化和本地化
  6. 部署承载于 Internet 信息服务中的 WCF 服务
  7. 如何在Hybris Commerce的backoffice里创建扩展字段
  8. LeetCode 428. 序列化和反序列化 N 叉树(DFS)
  9. CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警
  10. 【C++ STL学习之六】STL算法之for_each
  11. 异常处理汇总-服务器系列
  12. 苹果WWDC2021终极剧透!新款Macbook Pro外观大改 iOS 15将发布
  13. sqlserver2000内存突破4g_友商都上16G,华为手机为何一直用8G内存?网友:效仿iOS...
  14. Android之Surface/Window/View/SurfaceView区别
  15. 什么叫弹性计算云服务器,弹性云服务器
  16. 剑桥2021计算机专业,2021剑桥大学计算机专业录取条件出炉 你有信心过线吗
  17. 六面体单元的体积计算方法
  18. [科幻]Java版三体中黑暗森林法则的猜想
  19. 利用ST MCU内部基准参考电压监测电源电压及其它
  20. LYNC 中文版安装详解-第一部分

热门文章

  1. java之三元运算符_Java三元运算符
  2. 【sv】复制/拼接操作符
  3. 【Unity NGUI】学习笔记(二)之英雄攻击和装备武器
  4. @webservlet注解报红
  5. 【Java】配置环境找不到jdk安装路径怎么办?
  6. win11 修改host文件
  7. ffmpeg图片转视频以及报Could find no file with path ‘F:\test/%05d.png‘ and index in the range 0-4这样的错误解决方法
  8. 页面加载过程(url->页面)
  9. 【时间序列】Prophet使用
  10. 微信小程序-设置倍数播放按钮