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 ...
随机推荐
- EC笔记,第一部分:3.尽量使用const
03.尽量使用const 1.const概述 2.返回const 为何要返回一个const? 因为如果不返回const,程序员可能写出fun(a,b)=c;这样的代码,也许是因为打字错误可能写出类似i ...
- 【Java每日一题】20161025
20161024问题解析请点击今日问题下方的"[Java每日一题]20161025"查看 package Oct2016; import static java.lang.Math ...
- XE8 for iOS 状态栏的几种效果
XE8 实现 iOS 状态栏的几种效果: 一.状态栏底色: 开一个新工程. 设定 Fill.Color 颜色属性. 设定 Fill.Kind = Solid. 无需修改任何官方源码. 二.隐藏状态栏( ...
- web工程依赖的问题
http://blog.csdn.net/testcs_dn/article/details/43764497 做个记录
- Oracle Database 11g For Windows7 旗舰版的安装
系统环境:win7 32位系统 安装步骤: 1,Oracle(甲骨文)官网下载适合自己的数据库安装包,下载地址http://www.oracle.com/technetwork/cn/indexes/ ...
- shell脚本集合
慢慢学习,慢慢记吧 第一个shell脚本,创建用户,默认密码用户名,使得用户第一次登陆强制修改密码的脚本 #/bin/bash #创建用户,指定初始密码用户名,第一次登陆后强制修改用户名 userad ...
- Android提升篇系列:adb无法识别MX5等特殊机型
发现自己Ubuntu系统adb无法识别魅族 mx5机型.操作具体如下(其他机型依然适用): 一.Ubuntu环境 1.查看自己当前设备的idVendor lsusb命令直接查看当前usb设别列表,找到 ...
- loadrunner用javavuser进行接口测试
在日常工作中会遇到被测试系统通讯都是通过加密的数据包,加密算法是公司自己开发的,并且发送的数据包还要经过系统的压缩,以保证系统的性能.利用loadrunner就无法解决这里的加密的技术问题,利用jav ...
- 设置MySQL允许外网访问
1:设置mysql的配置文件 /etc/mysql/my.cnf 找到 bind-address =127.0.0.1 将其注释掉://作用是使得不再只允许本地访问: 重启 ...
- 一种基于annotation的Spring-mvc权限控制方法
简介 本文介绍一种采用annotation来对spring-mvc进行权限控制的方法. 通过枚举类来定义权限项. 将annotation标注到需要控制权限的spring-mvc方法上. 然后,在spr ...