我只是在研究如何在Azure上构建一个大规模,全局可访问的应用程序.
那里已经有很多技术可以让你的应用程序尽可能贴近消费者.
我有点困惑的是数据库.如果您使用的是SQL Azure,则必须指定一个区域来放置它.如果我的SQL Azure实例位于西欧(阿姆斯特丹),但我的客户位于澳大利亚,并通过澳大利亚(NSW)的实例访问该应用程序,应用程序与数据库通信之间会有一些延迟.
我见过的有关Geo Replication的所有参考资料似乎都在主从冗余设置的上下文中.但是我想知道是否可以使用Master-Master设置,其中每个应用程序实例在同一个Geo-Region中与它自己的SQL Azure主实例进行对话,然后sql azure会处理它们之间的双向复制.
我的生产应用程序有一个Premium 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'
Run Code Online (Sandbox Code Playgroud)
因此,我们的用户对Prod数据库施加了很多负载,我们认为是时候将报告功能移到辅助同步从数据库了.
由于我们使用的是SQL Azure Premium层,因此我们可以使用只读辅助副本启用Active Geo-Replication.实际上MS甚至说它适用于只读工作负载,例如报告.
所以我设置了SECONDARY
服务器,启用了播种,它现在已经完成,我可以使用SECONDARY
管理员用户和密码访问只读副本.
但是SECONDARY
服务器没有登录,ssrsuser
而我可以创建一个SECONDARY.master
,我不能DROP RECREATE
用户,因为SECONDARY.MyApp
数据库处于只读模式.
有没有其他方法来解决这个问题.我真的不想将SECONDARY
服务器管理员用户和密码放入SSRS连接字符串.
sql-server azure reporting-services geo-replication azure-sql-database
我需要在地理复制数据库上创建登录名和用户。用户将被授予该数据库的“db_datareader”角色。
尝试的方法是使用 SID(相同身份)参数,如下所示:
-- 1. PRIMARY_DATABASE: Run on master database of Primary Database to create login
CREATE LOGIN [LOGINUSER] WITH password='XYZ'
GO
-- 2. Select details for created SQL login
SELECT [name], [sid]
FROM [sys].[sql_logins]
WHERE [type_desc] = 'SQL_Login'
AND [name] = 'LOGINUSER'
GO
-- 3. SECONDARY_DATABASE: Run on master database of Secondary Database to create login with associated SID
CREATE LOGIN [LOGINUSER]
WITH PASSWORD = 'XYZ',
SID = <SID from Step 2>
GO
Run Code Online (Sandbox Code Playgroud)
虽然登录创建在两个数据库上都工作正常,但允许我访问 PRIMARY_DATABASE,但拒绝访问 SECONDARY_DATABASE,并出现以下错误:
The server principal …
Run Code Online (Sandbox Code Playgroud)