gpt4 book ai didi

api - Azure API 应用程序中基于角色的访问控制

转载 作者:行者123 更新时间:2023-12-03 03:09:45 25 4
gpt4 key购买 nike

我有以下情况:

Azure 中有一个 SQL 数据库,其中包含一个名为“联系人”的表。我可以使用同样托管在 Azure 上的自行实现的 Java API 应用程序访问此表中的数据。

现在我想要的是:

具有 RoleA 的用户在调用 API 时只能看到一小部分联系人。具有 RoleB 的用户在使用 API 时可以看到更大的联系人集。我会以某种方式定义用户可以访问的集合。

实现这种基于角色的访问控制的最佳位置是什么?我可以/应该吗

  1. 在 Azure 门户中进行配置?
  2. 在我的 Java 后端实现此功能吗?
  3. 为我的 SQL 数据库中的每个角色创建用户?

最佳答案

您应该通过使用 Row level security 获得完全相同的行为。

您可以:

1.) 将任何/所有联系人映射到您的应用程序的用户。 (您可能认为在辅助表中执行最简单的操作。)

2.) 实现一个谓词来检查哪个用户登录到应用程序。

CREATE FUNCTION Security.contactAccessPredicate(@ContactID int) 
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS isAccessible
FROM dbo.ApplicationUserContacts --a mapping table
WHERE
(
-- application users can access only patients assigned to them
Contact_ContactID = @ContactID
AND ApplicationUser_Id = CAST(SESSION_CONTEXT(N'UserId') AS nvarchar(128))
)
OR
(
-- DBAs can access all contacts
IS_MEMBER('db_owner') = 1
)
go

3.) 将该谓词绑定(bind)到您的模式。

CREATE SECURITY POLICY Security.contactSecurityPolicy 
ADD FILTER PREDICATE Security.contactAccessPredicate(PatientID) ON dbo.Contacts,
ADD BLOCK PREDICATE Security.contactAccessPredicate(PatientID) ON dbo.Contacts
go

我对您的表命名以及如何命名映射表进行了一些猜测。

Azure SQL Security Demo 中有类似的实现

<小时/>

回答你的想法:我认为 1 不起作用,2 可以正常工作,但需要依赖 APP 更新来更改 map ,而 3 则不能直接起作用。我上面描述的大纲将使登录到 Web 应用程序的用户能够确定返回了哪些行。

关于api - Azure API 应用程序中基于角色的访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40284644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com