我的生产应用程序有一个Premium P2 sql Azure数据库,出于安全考虑,我创建了数据库特定模式/视图/角色以及用于从SSRS查询中读取数据的特定数据库用户帐户.
这个的安装脚本如下.
-- On Primary Master CREATE LOGIN ssrsuser WITH password='******' -- On Primary MyApp CREATE USER ssrsuser FOR LOGIN ssrsuser CREATE ROLE [ssrsreader] AUTHORIZATION [db_owner] GRANT SELECT ON SCHEMA :: [App] TO [ssrsreader] GRANT SELECT ON SCHEMA :: [Reports] TO [ssrsreader] EXEC sp_addrolemember 'ssrsreader','ssrsuser'
因此,我们的用户对Prod数据库施加了很大的负担,我们决定是时候将报告功能移到辅助同步从数据库了.
由于我们使用的是sql Azure Premium层,因此我们可以使用只读辅助副本启用Active Geo-Replication. In fact MS even say that it’s suitable for read-only workloads such as reporting.
所以我设置了SECONDARY服务器,启用了种子,它现在已经完成,我可以使用SECONDARY管理员用户和密码访问只读副本.
但是SECONDARY服务器没有ssrsuser的登录,而我可以在SECONDARY.master中创建一个,我不能DROP RECREATE用户,因为SECONDARY.MyApp数据库处于只读模式.
解决方法
无需在用户数据库中为ssruser重新生成SID.由于复制,它已经存在.您需要做的就是将该SID与辅助服务器中主服务器中的LOGIN相关联.本文提供了详细信息.
https://azure.microsoft.com/en-us/documentation/articles/sql-database-geo-replication-security-config/
https://azure.microsoft.com/en-us/documentation/articles/sql-database-geo-replication-security-config/
我希望这有帮助.