问题
在部署完Sql Server Always on之后,遇到用户登陆SQL数据库的问题,用户分为两种,一种windows用户验证登陆,一种是SQL Server登陆用户登陆,前者映射没有问题,但是通过第二种方式登陆时出现了问题:DB01主库 DB02从库 ,业务数据库CRM, 01创建完用户 映射CRM数据库之后,切换到02库 创建用户,映射CRM数据库时 提示映射用户已存在。
原因
这是因为CRM数据库已经和DB01做了映射关系,虽然DB02的登陆用户名一样,但是SID不一致,在DB02上用相同的名字去映射CRM库时就会出现一样的名字,映射存在。
解决办法
1. 笨办法
在02数据库创建登陆用户时名字和DB01做区分,映射数据完了之后,再将登陆名改为一样的。这样就可以通过监听来直接登陆到高可用组的数据库。缺点:每次修改用户权限都要调整两次 而且还需要切换主从库。
2. 好办法
既然在DB02上创建映射时 是因为名字一样,SID不一样,那么我们可以保持DB02的登陆用户名字和sid和DB01的一样就可以了。
- 查询DB01上的登录用户sid:
select sid,name,* from sys.syslogins
- 在DB02上创建一样的账号:
create login [登陆用户名] with password = '密码',
SID = sid,
default_database = [CRM_MSCRM], --- 默认数据库
check_expiration =OFF, --- 强制密码过期
check_policy = OFF ---- 强制密码策略
运行,查看,完美解决问题。