sqlserver  登录名迁移

1.在master库中执行生成以下两个sp。

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(256) OUTPUT

AS

DECLARE @charvalue varchar(256)

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

USE [master]

GO

/****** Object:  StoredProcedure [dbo].[sp_help_revlogin]

Script Date: 07/13/2011 19:07:32 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

--创建存储过程:

alter PROCEDURE [dbo].[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

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

2. 执行sp_help_revlogin

exec  sp_help_revlogin null 所有登录用户

exec sp_help_revlogin loginname 指定登录用户

孤立用户的解决方案:

EXEC sp_change_users_login 'Update_One', 'UserAccount', 'LoginAccount';

个人理解:

用户的权限是在数据库级别控制的 ,数据库用户和登录名直接是通过sid关联的。

参考链接:

http://database.51cto.com/art/201107/275918.htm

http://support.microsoft.com/kb/246133/zh-cn

转载于:https://blog.51cto.com/dwchaoyue/1382086

sqlserver 登录名迁移相关推荐

  1. 数据库迁移登录名_如何将数据库的登录名迁移到其他服务器

    数据库迁移登录名 Sometimes, it is necessary to move the database from one server to another. The problem is ...

  2. sqlserver 登录名与数据库用户

    2.2 登录名 2.2.1 登录名 登录名是服务器级别的一个实体,用于登录到 SQL Server 实例.登录名的元数据保存在 master 数据库的 syslogins 表. 登录名包括以下2类: ...

  3. SQL service 安全管理(1)登录名(创建与删除)

    确保安全性 这里只讨论与数据库有关的用户身份验证和用户权限管理等技术. SQLServer的自主存取控制模式中,用户访问数据库数据都要经过三个安全认证过程 第一个过程确认用户是否是数据库服务器的合法账 ...

  4. sqlserver 微信昵称_sql server用户名和登录名的区别和联系

    在SQLSERVER数据库中,guest帐户是特殊的用户帐户.如果用户使用USE database语句访问的数据库中没有与此用户关联的帐户,此用户就与guest用户相关联. 另外SQLSERVER采取 ...

  5. sqlserver 创建登录名报错:‘User, group, or role ‘arms‘ already exists in the current database‘

    sqlserver 创建登录名报错如下图 这是因为sqlserver分为用户和登录名, navicate登录需要登录名.一般我们在单节点创建登录名会sqlserver同时会在数据库里创建用户名,二者关 ...

  6. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  7. sql服务器登录名为电脑名如何修改,如何恢复数据库的账号 登录名/用户名等

    当我们重装系统,或者是重装数据库之后,当附加数据库之后,发现数据库里面 有用户名,但是在sqlserver里面没有 登陆名 例如 先看  用户名  是有他上次系统的用户名的 现在我们先去添加这个登录名 ...

  8. mysql2012用户名_SQL Server 登录名、服务器角色、用户名和数据库角色 --- 解释

    1.一个数据库用户可以对应多个架构(架构是表容器).架构里面包含的是数据库表. 2.一个数据库角色有可能涉及多个架构.数据库角色对应的是权限. 3.一个用户对应一个数据库角色. 4.登录名与数据库用户 ...

  9. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系**

    1.一个数据库用户可以对应多个架构(架构是表容器).架构里面包含的是数据库表. 2.一个数据库角色有可能涉及多个架构.数据库角色对应的是权限. 3.一个用户对应一个数据库角色. 4.登录名与数据库用户 ...

  10. sql登录名和用户名_通过分配角色和权限来移动或复制SQL登录名

    sql登录名和用户名 This article speaks to, how to copy SQL Logins on the new server with Server Level roles ...

最新文章

  1. SQL SERVER 2000写存储过程出现列名无效的解决方法
  2. Jupyter Notebook快捷键
  3. Java报表工具FineReport常见的数据集报错错误代码和解释
  4. 12月7日学习内容整理:ORM单表操作
  5. [转] apache配置rewrite及.htaccess文件
  6. HubSpot company数据在UI上的展示和通过API方式进行获取
  7. DOM Xerces类库使用方法
  8. hazelcast集群配置_使用HazelCast进行Hibernate缓存:基本配置
  9. CentOS 7 Apache服务的安装与配置(转)
  10. 【HDU - 6184】Counting Stars(三元环计数,二分,优化暴力,O(m*sqrt(m)),图论)
  11. IIS虚拟目录实现与文件服务器网络驱动器映射共享
  12. 快速幂运算 《挑战程序设计竞赛》
  13. SQLSERVER查询数据库所有表名及行数
  14. python uiautomation_使用python UIAutomation从QQ2017(v8.9)群界面获取所有群成员详细资料,...
  15. git21天打卡day15-添加提交修改文件
  16. atitit.高级编程语言的特性 and 未来趋势与进化.doc
  17. postgre数据库记录唯一键_详解sqlserver数据库的索引设计
  18. JNPF.java前后端分离框架,SpringBoot+SpringCloud开发微服务平台
  19. vi/vim怎么对多行文字进行注释/取消注释
  20. 游戏HTML翻翻乐,大班益智游戏翻翻乐教案

热门文章

  1. Vue中watch用法详解
  2. 设置 phpstorm 左侧文件自动定位到当前编辑的文件
  3. tomcat端口被占用的解决方式
  4. Runtime.getRuntime().exec()如何调用7z解压文件
  5. 编程基本功:工作环境、运行环境,跟代码一样重要,都要备份
  6. 文字处理技术:复杂的行宽计算
  7. LINUX安装依赖库的解决办法
  8. 汉代以前,鸳鸯是形容兄弟感情的,后来演变为男女感情
  9. 工作失误:没有分析进程消耗了这么多内存的原因
  10. 明明管理失败,跟距离远有什么关系?