10

我的生产应用程序有一个高级 P2 SQL Azure 数据库,出于安全原因,我创建了特定于数据库的架构/视图/角色和一个特定的数据库用户帐户,用于从 SSRS 查询中读取数据。

让我们调用服务器PRIMARY和我的数据库MyApp

设置脚本如下。

-- 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 DB 上施加了很多负载,我们决定是时候将报告功能转移到辅助同步的从数据库中了。

由于我们使用的是 SQL Azure 高级层,因此我们可以使用只读辅助副本启用 Active Geo-Replication。事实上,MS 甚至说它适用于报告等只读工作负载。

所以我已经设置了服务器,启用了播种,它现在已经完成,我可以使用管理员用户和密码SECONDARY访问只读副本。SECONDARY

但是SECONDARY服务器没有登录名,ssrsuser虽然我可以在其中创建一个,但由于数据库处于只读模式SECONDARY.master,所以我不能登录用户。DROP RECREATESECONDARY.MyApp

有没有其他方法可以解决这个问题。我真的不想将SECONDARY服务器管理员用户和密码放入 SSRS 连接字符串中。

4

1 回答 1

14

无需为用户数据库中的 ssruser 重新生成 SID。由于复制,它已经存在。您需要做的就是将该 SID 与辅助服务器的主服务器中的 LOGIN 相关联。本文提供了详细信息。 https://azure.microsoft.com/en-us/documentation/articles/sql-database-geo-replication-security-config/

我希望这有帮助。

于 2015-04-09T18:11:25.503 回答