我之前在 Azure PaaS 数据库上使用以下内容设置了 Azure 弹性数据库查询:
在数据源数据库上:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<encryption key>';
GO
CREATE DATABASE SCOPED CREDENTIAL CRED_Azure_Login
WITH IDENTITY = 'SomeUser', SECRET = '<Some password>'
GO
这次运行没有问题,我可以看到在查看 sys.database_scoped_credentials 时创建的凭据。所以看起来来源很好。
在目标数据库上:
CREATE EXTERNAL DATA SOURCE Source_AzureDatabase
WITH
(
TYPE=RDBMS,
LOCATION='<DB location>.database.windows.net',
DATABASE_NAME='SourceDBName',
CREDENTIAL= CRED_Azure_Login
);
这曾经可以正常工作,但是我收到以下错误:
Msg 46516, Level 16, State 26, Line 1
The specified credential cannot be found or the user does not have permission to perform this action.
我在目标数据库中使用管理员登录名(我通过数据库的 Azure 门户概述页面更改了管理员登录名并重新登录,以确保)。文档说您需要对数据库具有 CONTROL 权限,因此这应该不是问题。由于我已成功设置源数据库主密钥和凭据,因此链接到它应该不是问题。
其他人可以试试这个看看是不是只有我一个人?另一位 DBA 审查了代码,没有发现任何问题。感觉微软可能已经破坏了这个功能 - 其他人可以检查他们可以做到吗?
您需要在同一个(目标)数据库上创建 db 范围凭据和外部数据源。
IDENTITY='' 应该是一个可以访问您要从中查询的源数据库的帐户,在我的示例 Test2 中。
因此,例如要从数据库 test 访问数据库 Test2 的表,请在数据库上执行所有这些:Test。
资源