我有一个异地复制的sql Azure数据库。现在,我想创建一个具有登录名的用户,并授予他从只读副本中的某个表中读取数据的权限。 但这似乎是不可能的。
当我尝试创建登录用户时,我收到有关只读数据库的错误消息:
CREATE USER [user_name] FOR LOGIN [login_name]
无法更新数据库"测试主",因为数据库 只读。
当我尝试使数据库读写时,它告诉我由于异地复制而不可能:
ALTER DATABASE [test-master] SET READ_WRITE
ODBC 错误: 状态: 42000: 错误: 1468 消息:"[Microsoft][ODBC 驱动程序 17 SQL 服务器][SQL 服务器]无法对数据库执行该操作 "test-master",因为它涉及数据库镜像会话 或可用性组。不允许对 参与数据库镜像会话或 可用性组。Msg 5069,级别 16,状态 3,第 5 行 ALTER 数据库语句失败。
那么有可能吗?
更新:
似乎没有复制登录信息。
在主数据库中将用户脚本化为创建对象:
CREATE USER [user_name] FOR LOGIN [login_name] WITH DEFAULT_SCHEMA=[dbo]
将用户脚本化为副本数据库中的创建对象:
CREATE USER [user_name] WITH DEFAULT_SCHEMA=[dbo]
这是否意味着无法向副本数据库添加新登录名?
我在这里找到了一个解决方案:https://blogs.msdn.microsoft.com/azuresqldbsupport/2018/05/21/tips-tricks-what-you-need-to-do-to-creat-sql-login-to-authenticate-to-azure-sql-dbs-members-in-auto-failover-group/
可以使用Forced Failover
交换数据库的功能,从而使我的副本可写,以便我可以创建用户并授予权限(当然,在此更改期间,以前的主数据库变为只读)。