关于SQL数据库备份和恢复问题,请教高手指点

rzh123 2003-07-28 04:25:10
我在一台服务器上建立了一个数据库并且用了一段时间,现在把它备份下来,然后在另一台机器上也建立一个同样的数据库并且还原备份却发现还原后数据库的登陆用户没有设置上,只有用户名没有登陆用户名。在安全性的登陆用户里设置后,提示此用户已经存在,可是在数据库的用户中却没有登陆用户名只有用户名,请问有什么方法可以解决此问题或者有什么好的备份还原数据库的方法?
请问有其他的备份还原数据库的方法吗?在此过程中保证数据库的结构和数据已经试图和存储过程都正确。
...全文
68 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwooqqoo 2003-08-01
  • 打赏
  • 举报
回复
就是孤立用户的问题,我是这样解决的:先设置服务器“允许对系统目录直接进行修改”,然后delete from sysusers where name = 'test'

USE testDB

--grant access to database eview to user scm
exec sp_grantdbaccess 'test'

--make user scm the owner of database eview
exec sp_addrolemember 'db_owner','test'
记得给我分哦!
CrazyFor 2003-07-28
  • 打赏
  • 举报
回复
Transact-SQL 参考


sp_changedbowner
更改当前数据库的所有者。

语法
sp_changedbowner [ @loginame = ] 'login'
[ , [ @map = ] remap_alias_flag ]

参数
[@loginame =] 'login'

当前数据库新所有者的登录 ID。login 的数据类型为 sysname,没有默认值。login 必须是已存在的 Microsoft® SQL Server™ 登录或 Microsoft Windows NT® 用户。如果 login 通过当前数据库内的现有别名或用户安全帐户已拥有访问该数据库的权限,则不能成为该数据库的所有者。为了避免这种情况,应先除去当前数据库中的别名或用户。

[@map =] remap_alias_flag

值为 true 或 false,表示旧数据库所有者 (dbo) 的现有别名是映射到当前数据库的新所有者还是要除去。remap_alias_flag 的数据类型为 varchar(5),默认值为 NULL,表示旧 dbo 的任何现有别名均映射到当前数据库的新所有者。false 表示除去旧数据库所有者的现有别名。

返回代码值
0(成功)或 1(失败)

注释
执行 sp_changedbowner 之后,新所有者称为数据库中的 dbo 用户。dbo 拥有执行数据库中所有活动的暗示性权限。

不能更改 master、model 或 tempdb 系统数据库的所有者。

若要显示有效 login 值的列表,请执行 sp_helplogins 存储过程。

执行只有 login 参数的 sp_changedbowner 会将数据库所有权改为 login,并将先前别名为 dbo 的用户别名映射到新数据库所有者。

权限
只有 sysadmin 固定服务器角色成员的成员或当前数据库的所有者才能执行 sp_changedbowner。

示例
下面的示例使用户 Albert 成为当前数据库的所有者,并将旧数据库所有者的现有别名映射到 Albert。

EXEC sp_changedbowner 'Albert'


请参见

CREATE DATABASE

sp_dropalias

sp_dropuser

sp_helpdb

sp_helplogins

系统存储过程

©1988-2000 Microsoft Corporation。保留所有权利。
pengdali 2003-07-28
  • 打赏
  • 举报
回复
把数据库备份还原到另一个服务器时,可能会遇到孤立用户的问题。下面的方案显示并解决了这个问题:

通过执行 sp_addlogin,把登录 janetl 改名为 dbo。
sp_addlogin 'janetl', 'dbo'

备份数据库。在本例中,备份 Northwind。
BACKUP DATABASE Northwind
TO DISK = 'c:\mssql\backup\northwnd'

除去刚刚备份的数据库。
DROP DATABASE Northwind

除去登录。
sp_droplogin 'janetl'

还原备份的数据库。
RESTORE DATABASE Northwind
FROM DISK = 'c:\mssql\backup\northwnd'

select * from sysusers

janetl 登录不能访问 Northwind 数据库,除非允许 guest 登录。尽管 janetl 登录已经删除,它仍然(作为一个孤立行)显示在 sysusers 表中:

USE Northwind
SELECT *
FROM sysusers
WHERE name = 'janetl'

解决孤立用户问题

用 sp_addlogin 添加一个临时登录。为孤立用户指定安全标识符 (SID)(从 sysusers)。
sp_addlogin @loginame = 'nancyd',
@sid = 0x32C864A70427D211B4DD00104B9E8A00

用 sp_dropalias 除去属于别名 SID 的临时别名。
sp_dropalias 'nancyd'

用 sp_dropuser 除去原始用户(即现在的孤立用户)。
sp_dropuser 'janetl'

用 sp_dropuser 除去原始登录。
sp_droplogin 'nancyd'
rzh123 2003-07-28
  • 打赏
  • 举报
回复
用户名删不掉
friendliu 2003-07-28
  • 打赏
  • 举报
回复
把用户名删掉
重新建立。。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧