SQL数据库附加移植引发的思考:
SQL数据库附加移植(无法找到表)引发的思考:
本问题备忘录:
现象:无法找到存储过程.
在网上找了一些方法,找不得正确的结论.
为什么找不到?
原因: 数据库用户失去对应的登录/因无法识别的登录.
第一步: 为数据库 创建一个登录.
EXEC sp_addlogin '登录帐号', '密码', '数据库名'
第二步: 更改当前数据库中 SQL Server 用户与 Microsoft SQL Server登录之间的关系
EXEC sp_change_users_login 'Update_One', 'sql数据库用户', 'sql登录帐号'
用户和登录没有对应起来.
建立用户与sql帐号之间对应关系的核心语句:
数据库 用户表 (类似 dbo)
sp_change_users_login 简要流程:
a.检查是否存在该用户.
SELECT * FROM sysusers WHERE
name = @UserNamePattern -- match user name
and issqluser = 1
b.取得sql帐号的对应id.
系统登录表(sql帐号)取得帐号id
select @loginsid = sid from master.dbo.syslogins where
loginname = @LoginName -- match login name
and isntname = 0
c.更新id 设置对应关系.
update sysusers set sid = @loginsid, updatedate = getdate()
where name = @UserNamePattern and issqluser = 1
and sid <> @loginsid
小结:
SELECT * FROM sysusers
一个登录帐号添加拥有数据库将在该表中增加一行,一个登录帐号必须有个对应用户名;而一个用户名不必有登录帐号.
sysusers
数据库中每个 Microsoft® Windows 用户、Windows 组、Microsoft SQL Server™ 用户或 SQL Server 角色在表中占一行。
SELECT * FROM sysmembers
用户 和 角色 对应关系
dbo(角色成员,即用户) 和 db_owner(组)
sysmembers(每个数据库)
每个数据库角色成员在表中占一行。该表存储在每个数据库中
master数据库:
syslogins
每个登录帐户在表中占一行。