暂无图片
暂无图片
暂无图片
暂无图片
1
暂无图片

AlwaysOn从库用户权限问题

suger 2023-02-12
658

现有SQL SERVER服务器A和B,两个环境都提前创建好用户,设置好权限,然后搭建的AlwaysOn,主副本为A,辅助副本为B,客户端连接正常。切换主库为B后,客户端无法连接。查看A与B中的用户权限可以发现,用户名密码都是一样的,但在数据库映射这一项,A中用户有映射到相应库,B中却没有。于是添加映射,保存,这时提示:用户已存在!(这是B为主库时才能做的操作,若A为主库,在B上执行此操作会提示B为只读。。。)

后来问了度娘,找到以下方法:

步骤1:查看主库上该账号的sid:

SELECT * FROM [dbName]..sysusers
或者:

select [sid] from sys.syslogins where name='xxx'
步骤2:在副本数据库上创建对应账号:

CREATE LOGIN [帐号] WITH PASSWORD = '?',
SID = ?, --从上面的查询从获取
DEFAULT_DATABASE = [数据库名称], --默认数据库
CHECK_EXPIRATION = OFF, --强制密码过期 关闭
CHECK_POLICY = OFF --强制密码策略 关闭
这样就可以解决以上问题。据个人理解,绑定到数据库权限的应该是用户SID,B中直接创建的用户,虽然名称与密码一致,但SID不同,也是无法继承到权限。所以:

如果数据库想搬迁到其他环境,或AlwaysOn的从库中运行,都需要用相同的SID来创建用户。

或者,只是搬迁数据库,可以解除孤立用户,重新设置权限:

USE 数据库名
GO
sp_change_users_login 'update_one','用户名','用户名'
 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

秀逗咔嚓
暂无图片
1年前
评论
暂无图片 0
遇到了相同的问题,已解决,补充一下:步骤2时,副本数据库的同名用户,可以先改下名字,然后再创建用户。
1年前
暂无图片 点赞
评论