AlwaysOn从库用户权限问题

现有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','用户名','用户名'

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值