SQL Server数据库中还原孤立用户的方法集合
-
虽然SQL Server现在搬迁的技术越来越多,自带的方法也越来越高级。
但是我们的SQL Server在搬迁的会出现很多孤立用户,微软没有自动的处理。
因为我们的数据库权限表都不会在应用数据库中,但是每次对数据库作迁移的时候,单个数据库却带着它的数据库用户对象。
并且我们在新的数据库机器上也不能登录这些账号,但是它却静悄悄的存在我们的数据库中。
微软以前提供的一个老的接口存储过程来处理这个问题。
sp_change_users_login
将现有数据库用户映射到 SQL Server 登录名。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 ALTER USER。
虽然每次都在说以后的版本会不支持,但是用了好几个版本还是支持的。
语法:
12345sp_change_users_login [ @Action= ]'<EM>action</EM>'[ , [ @UserNamePattern = ]'<EM>user</EM>'][ , [ @LoginName = ]'<EM>login</EM>'][ , [ @Password= ]'<EM>password</EM>'][;]参数:
[ @Action = ] 'action'
说明过程要执行的操作。action 的数据类型为 varchar(10)。action 可具有下列值之一。
值
说明
Auto_Fix
将当前数据库的 sys.database_principals 系统目录视图中的用户项链接到同名的 SQL Server 登录名。如果不存在同名的登录名,将会创建一个。检查Auto_Fix 语句的结果,确认实际链接是否正确。在对安全性较为敏感的情况下,要避免使用Auto_Fix。
如果使用 Auto_Fix 时登录名尚不存在,则必须指定 user 和 password,否则必须指定user,但password 将被忽略。login 必须为 NULL。user 必须是当前数据库中的有效用户。不能将另一个用户映射到该登录名。
Report
列出当前数据库中未链接到任何登录名的用户以及相应的安全标识符 (SID)。user、login 和 password 必须为 NULL 或不指定。
Update_One
将当前数据库中的指定 user 链接到现有 SQL Server login。必须指定 user 和 login。password 必须为 NULL 或不指定。
[ @UserNamePattern = ] 'user'
当前数据库中的用户名。user 的数据类型为 sysname,默认值为 NULL。
[ @LoginName = ] 'login'
SQL Server 登录的名称。login 的数据类型为 sysname,默认值为 NULL。
[ @Password = ] 'password'
通过指定 Auto_Fix 创建的新 SQL Server 登录名分配的密码。如果已存在匹配的登录名,则映射该用户名与登录名且忽略password。如果不存在匹配的登录名,则 sp_change_users_login 创建新的 SQL Server 登录名并分配password作为新登录名的密码。password 的数据类型为 sysname,且不能为 NULL。
返回代码值:
0(成功)或 1(失败)
结果集:
列名 数据类型 说明 UserName
sysname
数据库用户名。
UserSID
varbinary(85)
用户的安全标识符。
注释:
使用 sp_change_users_login 将当前数据库中的数据库用户链接到 SQL Server 登录名。如果用户登录名已更改,则使用 sp_change_users_login 将用户链接到新的登录,而不会丢失用户的权限。新的login 不能为 sa,而user不能为 dbo、guest 或 INFORMATION_SCHEMA 用户。
sp_change_users_login 不能用于将数据库用户映射到 Windows 级主体、证书或非对称密钥。
sp_change_users_login 不能与通过 Windows 主体创建的 SQL Server 登录名一起使用,也不能与使用 CREATE USER WITHOUT LOGIN 创建的用户一起使用。
不能在用户定义的事务中执行 sp_change_users_login。
权限:
需要 db_owner 固定数据库角色的成员身份。只有 sysadmin 固定服务器角色的成员才能指定 Auto_Fix 选项。
示例:
A. 显示登录映射的当前用户的报告
下例生成当前数据库中的用户及其安全标识符 (SID) 的报告。
复制代码1EXECsp_change_users_login'Report';B. 将数据库用户映射到新的 SQL Server 登录名
在以下示例中,数据库用户与新的 SQL Server 登录名关联。数据库用户 MB-Sales 首先映射到另一个登录名,然后重新映射到登录名MaryB。
复制代码12345678--Create the new login.CREATELOGIN MaryBWITHPASSWORD='982734snfdHHkjj3';GO--Map database user MB-Sales to login MaryB.USE AdventureWorks2008R2;GOEXECsp_change_users_login'Update_One','MB-Sales','MaryB';GOC. 自动将用户映射到登录名(必要时新建一个登录名)
以下示例显示如何使用 Auto_Fix 将现有用户映射到同名的登录名,以及如何在不存在登录名 Mary 的情况下,创建密码为B3r12-3x$098f6 的 SQL Server 登录名Mary。
实战:
12345678910111213141516171819/*很多做DBA的朋友也許都会碰到一个这样的问题,在数据还原到其他服务器时,登录名会丢失,重建非常麻烦,特別是数据库用户较多的的情况,其实这个问题解决非常简单,sql server 2005 及以前的产品,sql server 提供了 sp_change_users_login存储过程,(sql server 2008 须用ALTER USER)sp_change_users_login有三种动作:report,update_one和auto_fix具体用法:*//*1.列出当前数据库中的孤立用戶*/execsp_change_users_login'report'/*2.如果已有登录用戶,将用戶名映射为指定的登录名*/execsp_change_users_login'UPDATE_ONE','用戶名','登录名'orexecsp_change_users_login'AUTO_FIX','用戶名'/*3.如果沒有建立登录用戶*/execsp_change_users_login'Auto_Fix','登录名',NULL,'登录密码'/*--相同名字可以使用,处理孤立用户--在单个数据库上执行*/execsp_change_users_login'AUTO_FIX','db_writer'execsp_change_users_login'AUTO_FIX','db_reader'
SQL Server数据库中还原孤立用户的方法集合的更多相关文章
- 清空SQL Server数据库中所有表数据的方法(转)
清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...
- 清空SQL Server数据库中所有表数据的方法
原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可 ...
- 在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个。必须提供所有成员。 (microsoft.sqlserver.smo)
问题:在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个.必须提供所有成员. (micro ...
- (4.21)SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)
转自:指尖流淌 http://www.cnblogs.com/zhijianliutang/p/4100103.html SQL Server数据库启动过程(用户数据库加载过程的疑难杂症) 前言 本篇 ...
- 转:SQL SERVER数据库中实现快速的数据提取和数据分页
探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...
- SQL server数据库中的DateTime类型出现的问题
我们知道这个SQL server数据库中的DateTime类型是数据库应用开发中经经常使用到的一种数据类型.而C#语言中也有DateTime类型,尽管二者都是用来描写叙述时间的,可是它们的默认值是不同 ...
- SQL Server数据库中的系统数据库?
SQL Server的系统数据库分为:master,model,msdb和tempdb 1.Master数据库 Master数据库记录SQL Server系统的所有系统级别信息(表sysobjects ...
- SQL语句操作SQL SERVER数据库登录名、用户及权限
要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许连接 SQL Server 服务器的权利: 获得访问特定数据库中数据的权利(select, update, de ...
- .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)
.NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...
随机推荐
- uva10098 Generating Fast, Sorted Permutation
#include"iostream"#include"stdio.h"#include"string.h"#include"alg ...
- npm 国内淘宝镜像cnpm
某些插件很奇怪,需要用国内的镜像下载才可以 #安装淘宝镜像npm install cnpm -g --registry=https://registry.npm.taobao.org #使用淘宝镜像下 ...
- java 处理xml格式数据
1.单个xml文件 package lia.meetlucene; import java.io.*; import javax.xml.parsers.DocumentBuilder; import ...
- 如何使用 Migration创建一个迁移
切换到YII所在的目录 yii migrate/create test
- new NABCD
小组名称: 天天向上 项目名称:连连看 小组成员:王森(组长).胡丽娜.林莉.张政.张金生 新NABCD模型 N(需求) 传统的连连看有许多,玩法单一,感觉没意思,用户更希望连连看游戏增加更多的与众不 ...
- Linux 每天自动备份mysql数据库的方法
Linux 每天自动备份mysql数据库的方法 作者: 字体:[增加 减小] 类型:转载 linux下为了安全有时候需要自动备份mysql数据库,下面是具体的实现步骤. /usr/bin为my ...
- Yii源码阅读笔记(十九)
View中渲染view视图文件的前置和后置方法,以及渲染动态内容的方法: /** * @return string|boolean the view file currently being rend ...
- http UserAgent
string uAgent = Request.ServerVariables["HTTP_USER_AGENT"].ToLower(); //获取客户端浏览器的请求 判断 是什 ...
- Artificial Intelligence Research Methodologies 人工智能研究方法
Computer Science An Overview _J. Glenn Brookshear _11th Edition To appreciate the field of artificia ...
- MySql解决插入中文乱码问题
在dos中登陆mysql 后输入: // 查看数据使用的所有编码show variables like 'character%';// 修改客户端的编码 为 gbkset character_set_ ...