`
sakakokiya
  • 浏览: 490344 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何在 SQL Server 2005 实例之间传输登录和密码

阅读更多
服务器 A 和服务器 B 是不同的服务器。 此外, 服务器 A 和 B 服务器都运行 SQL Server 2005。
将数据库从服务器 A 上的 SQLServer 实例移到 B, 服务器上的 SQLServer 实例后用户可能不能够登录到数据库 B 另外服务器上, 用户可能收到以下错误信息:
对于用户 MyUser ‘ ‘ 登录失败。 (MicrosoftSQLServer、 错误 18456:)
发生此问题是因为没有您做从服务器 A 上的 SQLServer 实例传输和密码登录到服务器 B 上的 SQLServer 实例
要从服务器 A 上的 SQLServer 实例传输到服务器 B, 上的 SQLServer 实例登录和密码请按照下列步骤操作:
1. 在服务器 A, 启动 SQLServerManagementStudio, 并然后连接到 SQLServer 从中移动数据库的实例。
2. 打开新查询编辑器窗口, 然后运行以下脚本。
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
此脚本 注意 在 master 数据库中创建两个存储过程。 两个存储过程命名为 sp_hexadecimal 存储过程和 sp _ help _ revlogin < 存储过程。
3.运行下列语句。
EXEC sp_help_revlogin
由 sp _ help _ revlogin < 存储过程生成输出脚本是登录脚本。 此登录脚本创建具有原始安全标识符 (SID) 和原始密码登录。
4. 在服务器 B, 启动 SQLServerManagementStudio, 并再连接到的数据库移动到 SQLServer 实例。
要点 之前请您转到步骤 5, 查阅 ” 备注 ” 部分中信息。
5. 打开新查询编辑器窗口, 并运行步骤 3 中生成输出脚本。
在 SQL Server 2005, 用于登录 SID 用于作为基础实现数据库级访问。 登录服务器上两个不同数据库中可能有两个不同的 SID。此例, 登录只能访问数据库具有 SID 匹配 SID sys.server_principals 视图中。如果是从两个不同服务器合并两个数据库可能会发生此问题。 要解决此问题, 通过 DropUSER 语句具有 SID 匹配数据库中手动删除登录。再次通过 Create USER 语句然后, 添加登录。
分享到:
评论

相关推荐

    在SQL Server实例之间传输登录和密码

    文中介绍了如何在运行SQL Server 7.0的服务器之间传输登录和密码、如何从SQL Server 7.0向SQL Server 2000或者在运行SQL Server 2000的服务器之间传输登录和密码、在不同版本的SQL Server 之间传输登录和密码的完整...

    SQL Server 2005密码安全追踪与存储

    KeePass 通常通过使用一个主密码或者密码段来解锁...你可以导出密码列表,从CSV文件中导入密码,在程序的两个实例中传输,或者是根据需要生成。(如果你需要为企业的新的安装用机制生成一整个密码列表,这是一种方式。)

    用.NET精简版2.0和SQL Server 2005打造强力智能客户端

    连接和数据传输 SQL Server 2005 同步 SQL Mobile 的演进 桌面支持: SQL Mobile 桌面支持 通过SQL Server 2005 管理界面创建 通过SQL Server 2005 管理界面管理 XML 序列化: 库类支持序列化/反序列化 ...

    单文件绿色版SQLServer 1.29,体积小,功能强,适合各种给力部署

    原版本选自星五大大的绿色版SQL Server 1.29 为了浓缩程序体积及修复一些相关问题,花了很多时间去弄这个,非常有必要 单文件版工具特点: ★继承原软件可方便移植数据库的特点 ★配置与系统隔离,不影响其它已安装...

    SQLServer2008查询性能优化 2/2

    书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...

    SQLServer2008查询性能优化 1/2

    书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...

    SQLServer系统数据库恢复.pdf

    SQLServer系统数据库恢复 系统数据库恢复 标签:SQL SERVER/MSSQL SERVER/数据库/DBA/故障恢复/master 概述 概述 SQL Server 维护⼀组系统级数据库(称为"系统数据库"),这些数据库对于服务器实例的运⾏⾄关重要。...

    WMS接口程序.rar

    Oracle数据库TO SQLserver数据库,以及SQLserver数据库TO SQLserver数据库之间数据传输接口,简单实用,内附实例

    BCP详细参数.txt

    在 bcp 实用工具和 SQL Server 实例的连接中执行 SET QUOTED_IDENTIFIERS ON 语句。使用该选项指定包含空格或引号的数据库、所有者、表或视图的名称。将由三部分组成的整个表名或视图名引在双引号 (" ") 中。 -C ...

    ADO.NET 3.5经典实例

    连接数据、处理断开连接数据对象、查询、搜索、分析、添加、修改和传输数据、维护数据库的完整性、通过代码处理.NET Windows和WEB窗体用户界面中的数据、处理XML数据、优化数据访问、枚举和维护数据库对象、SQL ...

    DBConvert for MSSQL and DB2 2.1.1 中文免费版.zip

    MS SQL Server(Express)2000/2005/2008/2008 R2 / 2012/2014,SQL Azure支持 能够选择TCP / IP,PIPE,IPX / SPX通信协议 Amazon RDS SQL Server数据库实例支持 DB2 v。 9.7及更高版本的 MS SQL方案支持 界面...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例029 验证登录信息的合法性 39 实例030 为新员工分配部门 40 实例031 用Switch语句根据消费金额计算折扣 41 实例032 判断用户输入月份的季节 42 2.4 循环控制 43 实例033 使用while与自增运算符循环遍历 数组 43 ...

    Java源码包100个设计实例.zip

    Java+sqlserver2000做的员工管理系统.rar Java+SQL信用卡管理系统源代码.rar Java+XML写的RSS阅读器.rar Java+XML日程提醒系统.rar Java24点游戏逼真图形版代码.rar JavaScript万年历.rar Java二进制IO类与文件复制...

    JAVA上百实例源码以及开源项目源代码

    FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上...

Global site tag (gtag.js) - Google Analytics