首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Azure API应用程序中基于角色的访问控制

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

Stack Overflow用户
提问于 2016-10-27 12:30:46
回答 1查看 351关注 0票数 1

我有以下情况:

Azure中有一个sql数据库,其中包含一个名为Contact的表。我可以使用一个自实现的Java访问这个表中的数据,这个应用程序也托管在Azure上。

我想要的是:

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

实现此角色基础访问控制的最佳位置是什么?我能/应该

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

回答 1

Stack Overflow用户

发布于 2016-10-27 17:38:59

您应该通过使用行级安全性来获得正确的行为。

您可以:

1.)将任何/所有联系人映射到应用程序的用户。(您可能会认为在次要表中这样做是最简单的。)

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

代码语言:javascript
运行
复制
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.)将该谓词绑定到架构。

代码语言:javascript
运行
复制
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安全性演示中有一个类似的实现

要回答你的想法:我不认为1会工作,2会很好,虽然将依赖于应用程序更新来改变映射,而3将不会直接工作。我上面描述的大纲将让登录到web应用程序的用户能够确定哪些行被返回。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40284644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档