SQL Server:孤立用户详解
SQL Server 的用户安全管理分两层,整个SQL Server 服务器一层,每个数据库一层。
- 在服务器层的帐号,叫登录账户(SQL Server:服务器角色),可以设置它管理整个SQL Server服务器(开启跟踪,修改 Sql Server 安全配置,备份所有数据库等)。
- 在数据库一层,叫数据库账户(SQL Server:数据库角色),可以设置它对这个特定的数据库有读写、修改表结构、存储过程定义等权限。
登录帐号对于服务器而言的,数据库用户是针对特定数据库来讲的。就相当于一个房间里放着很多保险柜,你有房门钥匙了,必须得有每个保险柜的钥匙才能从保险柜里取东西。登录帐户是房门钥匙,数据库用户是保险柜钥匙。
1. 什么是孤立用户
如上述所述“登陆账户”和“数据库账户”之间存在一层映射,如果数据库“A”中有账户“cms”,但没有“登陆账户”与其对应,那么“cms”账户就无法连接SQL Server服务,因此它就没有任何作用,便成立一个孤立的用户。
2. 什么情况下会产生孤立用户
第一个服务器的情况:
- 数据库A
- 数据库A中有cms账户,并且也存在cms登陆账户
在第一个服务器中备份数据A,并在第二个服务器中还原该数据库,那么第二个服务器的情况:
- 数据库A
- 数据库A中有cms账户,不存在与其对应的登陆账户
此时在第二个服务器的数据库A中便产生了孤立账户cms,在第二个服务器中运行下述语句也可看到孤立账户cms:
Use A
exec sp_change_users_login 'report'
如果直接建立登陆账户“cms”,并制定其“数据库访问”为数据库A,会提示“用户**已存在”,如下图:

3. 如何解决孤立用户
解决孤立账户实质上就是建立一个“登陆账户”,并关联“登陆账户”和“数据库账户”。
建立一个登陆账户(一般与孤立账户同名,即“cms”),先不设置该“登陆账户”的数据库访问和数据角色,并设置该“登陆账户”的密码(一般也与孤立账户相同),然后连接“登陆账户”和“数据库账户”。
Use A
exec sp_change_users_login 'update_one', 'cms', 'cms'
这样在执行“exec sp_change_users_login 'report'”就不会看到孤立账户“cms”了。
sp_change_users_login的语法
exec sp_change_users_login 'update_one', '登陆账户名', '数据库账户名'
注意:“登陆账户”的账户名和密码都可以和“孤立账户”不同,应用程序的数据库配置应当为“登陆账户”的账户名和密码,而不是“数据库账户”。
4. 另一种解决办法
假设数据A中存在孤立账户cms,其密码为“123456”,应用程序的数据库配置也是此。为了能够使得应用程序能够正常使用,可以做如下操作:
- 建立登陆账户“cms”,并设置密码和默认数据库分别为123456、cms
- 设置该登陆账户的“服务器角色”为“System Administrators”
- 不为该登陆账户设置相关“数据库访问”属性
- 保存时会提示如下错误,不必理会

这种方法仅仅是建立了一个类似于sa的cms用户,虽能够保障应用程序正常使用,但并不能解决孤立用户。
SQL Server:孤立用户详解的更多相关文章
- MS SQL Server 数据库连接字符串详解
MS SQL Server 数据库连接字符串详解 原地址:http://blog.csdn.net/jhhja/article/details/6096565 问题 : 超时时间已到.在从池中获取连接 ...
- Sql Server 孤立用户解决办法
Sql Server 孤立用户 是我们经常遇到的事情,今天详细的梳理了下,希望能帮到你 当把用户数据库从一台 Sql Server 使用备份和恢复的方式迁移到另一台服务器.数据库恢复以后,原先用户定义 ...
- SQL Server表分区详解
原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...
- Sql Server之数据类型详解
数据类型是一种属性,用于指定对象可保存的数据的类型,SQL Server中支持多种数据类型,包括字符类型.数值类型以及日期类型等.数据类型相当于一个容器,容器的大小决定了装的东西的多少,将数据分为 ...
- sql server 存储过程的详解
SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) dro ...
- SQL Server with(nolock)详解
大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的. 什么是并发访问:同一时间有多个用户访问同一资源,并发 ...
- JDBC连接SQL Server 2005步骤详解
一.设置SQL Server服务器: 1.“开始” → “程序” → “Microsoft SQL Server 2005” → “配置工具” → “SQL Server Configurati ...
- SQL Server 远程备份详解
例1: 有A数据库服务器,B本机: 我现在想通过在B机器上通过代码调用SQL来执行A数据库的备份到B机器上 调用的SQL语句为:Backup Database MYDATABASE To Disk=' ...
- SQL Server 2017 安装详解
SQL server 2017下载链接:https://pan.baidu.com/s/1FSzqJfHQAa0QpZ_fObrfjQ 提取码:1xvb 1.双击iso镜像文件 打开setup ...
随机推荐
- Java的HashSet类
如果要查找一个集合中是否包含了某个对象,那么就需要把这个对象和这个集合中的每个对象依次进行比较和判断,直到找到这个对象为止,或者把所有对象都比较一次为止(如果最后一个对象才是要查找的对象,或者集合中没 ...
- lua编译出so文件
把lua编译出so文件 http://superuser.com/questions/557884/getting-error-recompile-with-fpic http://guiquanz. ...
- 什么是CGI
什么是CGI 1. 定义: CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器 上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. 2. 功能: 绝大 ...
- python 实时遍历日志文件
首先尝试使用 python open 遍历一个大日志文件, 使用 readlines() 还是 readline() ? 总体上 readlines() 不慢于python 一次次调用 readlin ...
- jvm三的三种类加载器
JVM有三种类加载器:bootstrap负责加载系统类,extclassloader负责加载扩展类,appclassloader负责加载应用类.他们主要是分工不一样,各自负责不同的区域,另外也是为了实 ...
- The POM for XXX:jar:${com.ld.base.service.version} is missing, no dependency information available
最近有个jar改了名字后,有个依赖它的工程死活引用的是老名字,导致打包的时候出错,如下所示: [INFO] ---------------------------------------------- ...
- java内存模型-基础
基础 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间 ...
- Space.js – HTML 驱动的页面 3D 滚动效果
为了让我们的信息能够有效地沟通,我们需要创建用户和我们的媒体之间的强有力的联系.今天我们就来探讨在网络上呈现故事的新方法,并为此创造了一个开源和免费使用的 JavaScript 库称为 space.j ...
- JS与一般处理程序之间传值乱码
好久没用到,突然遇到此问题还用了点时间. 在JS里面通过URL向Handler传中文值的时候,在Handler里面取值出来后会发现是乱码的~~.这就需要个编码解码过程.(先记录自己遇到的一个方面的解决 ...
- JavaScript学习笔记-实现枚举类型,扑克牌应用
//实现枚举类型,扑克牌应用 function creatEnum(p){ //构造函数 var Enumeration = function(){throw 'can not Ins ...