我有一个数据库tom,后来还原远程下载的数据库的备份文件tom2.bak,还原到tom2。
我有一个用户hongda,他映射 表tom的几个权限。因为对tom2无任何权限,所以现在给他加同样的权限到tom2数据库上,但出现如下报错:
标题: Microsoft SQL Server Management Studio
------------------------------
创建 对于 用户“hongda”失败。 (Microsoft.SqlServer.Smo)
有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.4000.0+((KJ_PCU_Main).120628-0827+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=创建+User&LinkId=20476
------------------------------
其他信息:
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)
------------------------------
用户、组或角色 'hongda' 在当前数据库中已存在。 (Microsoft SQL Server,错误: 15023)
有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.00.1600&EvtSrc=MSSQLServer&EvtID=15023&LinkId=20476
------------------------------
按钮:
确定
------------------------------
创建失败 角色已存在
------解决方案--------------------
一般的一般,选db_owner,除非有什么特殊要求。
------解决方案--------------------
果断db_owner,数据库的所有权限。呵呵
------解决方案--------------------
我来试着解释一下,这个现象:
#1.SQL SERVER有一个登陆名叫hongda,登陆名跟任何数据库都没有关系。
#2.在数据库tom中,也有一个帐户名叫hongda,它只属于tom这个数据库。
#3.在数据库tom2中,也有一个帐户名叫hongda,它只属于tom2这个数据库。(当然我们先不管这个hongda是不是孤立帐户)
#4.本来上而#1,#2,#3中的3个hongda是没有任何关系的。但为了达到下面这个目的:一个user用hongda登陆SQL SERVER,并能控制它对tom和tom2数据库的操作权限。就会这样:把#2中的hongda和#1中的hongda映射一下,把#3中的hongda和#1中的hongda映射一下。这样,用#1中的hongda登陆后,由于映射了两个数据库中的hongda,就具有了#2,#3数据库中hongda的所有操作权限。
#5.上面说了下原理。下面来说下你的现象:每次我修改他们的属性:安全性 → 登录名 → hongda → 属性 → 用户映射,只要修改 用户“数据库角色成员身份”救会报错这个。这时你的操作是:把#1中的hongda映射到tom和tom2中的hongda,由于这儿操作是:给tom及tom2创建一个名字为hongda的数据库级别的用户名,然后赋予,下面选中的权限:由于tom库已经正常映射过了,就不动它;tom2在创建时,发现hongda这个帐户已经存在,那就打算把它删除重建,但如果这时,tom2.hongda这个帐户还具有权限,就无法删除。所以,提示你,帐户已存在。而你把它的权限都去掉后,就可以被删除重建了。
------解决方案--------------------