首页 > 解决方案 > PowerApps 允许来宾用户使用 AAD 集成功能连接到 Azure SQL 数据库

问题描述

我有一个特定的问题,我在网上找不到任何答案。

情况如下:我们创建了一个连接到 Azure SQL 数据库的 Canvas 应用程序。我们将连接类型设置为 AAD 集成。

作为 AD 成员的用户可以查看应用程序中的数据,但来宾用户,即使我们为他们提供了所有权限和 PowerApps 计划,也无法查看数据。他们收到与成员相同的授权窗口,但是当他们单击允许时,应用程序启动,但没有从 SQL 数据库中提取数据。

在此处输入图像描述

当我们尝试使用来宾用户电子邮件和凭据(通过 SQL 服务器管理工​​作室)直接连接到 Azure SQL 数据库时,一切正常,来宾可以看到所有表。

当我们使用隐式共享连接(使用 SQL 服务器身份验证)时,客人可以看到数据,但由于其安全性,我们需要使用集成的 AAD。

到目前为止,我们尝试过:

在此处输入图像描述

似乎没有任何效果。如果您能告诉我如何完成这项工作,甚至将我推向正确的方向,我会非常高兴。

标签: azure-active-directoryazure-sql-databasepowerapps

解决方案


我已经在我身边重现了你的问题。这是我的经验。

将powerapp license(我在这里使用O365 E5)分配给guest帐户并将应用程序共享到该帐户后,我可以访问该应用程序但看不到表中的数据。我假设它是由于连接器尚未共享造成的,但由于没有“共享按钮”,该连接器确实无法共享。

然后我尝试使用这两个 sql 将访问策略添加到我的访客帐户:

CREATE USER [tiny-wa_outlook.com#EXT#@xx.onmicrosoft.com] FROM EXTERNAL PROVIDER;
GRANT SELECT ON dbo.tinyTest TO [tiny-wa_outlook.com#EXT#@xx.onmicrosoft.com];

请注意这里,我在这里使用了用户主体名称(可以在 azure ad->users 中找到主体名称),我还测试了在 sql 中使用 'tiny-wa@outlook.com' 但执行成功后,它没有'不工作。

所以我觉得你可以尝试使用上面的sql来添加你的guest账户,让他们可以访问powerapp。

这是一些相关的文档:

创建映射到 azure 广告身份的包含用户

共享应用资源

为用户添加表权限

===========================更新======================= ===

分享我对这个故障排除的经验。

首先我需要创建一个电源应用程序,但我发现在使用 sql server azure ad 身份验证创建连接器后,它无法连接到 sql server,错误消息类似于“凭据丢失或无效。内部异常:为 SQL 源提供的凭据无效',解决方案是将我的管理员帐户添加为 sql server 实例 Active Directory Admin

然后我选择了一个表并成功创建了一个示例应用程序。使用创建帐户,我可以访问该应用程序,但其他帐户不能。这里需要将应用程序及其相关连接器共享给其他用户。但是由于没有许可证,其他帐户仍然无法访问该应用程序。因为 sql server 连接器是高级连接器,所以我在这里分配 O365 E3 许可证。分配许可证时遇到错误,用户的“使用位置”不能为空或无法在 M365 管理中心分配许可证。

然后我遇到了与Op类似的错误,不同的是会员帐户和访客帐户都看不到应用程序中的数据。我试图找到将连接器共享给这些用途的方法,但失败了,我不确定那些没有共享按钮的连接器是否可以共享给其他人。因此,我无法研究这种连接器是否以其他方式进行了身份验证,因此它们根本不需要共享。

接下来的操作是使用用于创建 sql server 和数据库的帐户登录数据库并执行上面的 sqls。 在此处输入图像描述

然后会员帐户可以看到电源应用程序中的数据,而访客帐户看不到。原因是我在sql中使用了xx@outlook.com作为参数,当我使用xx_outlook.com#EXT#@xx.onmicrosoft.com时,它终于起作用了。

希望这也可以帮助你。

==================================================== =

创建我的演示应用程序:首先,我确定我的环境不是沙箱(下面屏幕截图中的环境)。而且我觉得创建demo app很简单,我的app也很简单,就是选择create an app from data 然后选择sql server作为connector,接下来我选择auzre ad auth点击connector,输入服务器名和数据库名称然后选择一个表,之后我的应用程序已创建。该表有一行数据,因此当我使用创建帐户登录应用程序时,我会在屏幕上看到它,而其他帐户(会员或客人)则看不到。

我的 sql server 实例和数据库是很久以前创建的,但我确定我是按照本教程创建它们的。

在此处输入图像描述 在此处输入图像描述


推荐阅读