gpt4 book ai didi

.net - 在自定义 BCS/.net 类上实现安全性?

转载 作者:行者123 更新时间:2023-12-01 04:19:01 24 4
gpt4 key购买 nike

我正在实现自定义 BCS 模型以从后端系统获取数据。由于后端使用它自己的用户管理,我通过服务帐户访问它。

所有这些都运行良好,并允许我将数据拉入 SharePoint。但是,因为它是通过服务帐户引导的,所以每个人都可以访问它,这很糟糕。

任何人都可以给我一些提示,以实现哪种方法?后端没有给我 NT ACL,但我想知道我是否可以以某种方式“伪造”它们? (基本上说“此 NT 组具有读取访问权限”就足够了)。

我知道用于搜索结果的 ISecurityTrimmer2,但理想情况下我想涵盖 BCS 模型内部的安全性,以便它也适用于外部列表。我想避免使用安全存储并将每个用户映射到后端。

最佳答案

得到答复 here .我可以将 BCS 模型中的一个字段设置为 WindowsSecurityDescriptorField,然后我可以在我的 BCS 方法中使用自定义代码来创建一个 ACL:

Byte[] GetSecurityDescriptor(string domain, string username)
{
NTAccount acc = new NTAccount(domain, username);
var sid = (SecurityIdentifier)acc.Translate(typeof(SecurityIdentifier));
CommonSecurityDescriptor sd = new CommonSecurityDescriptor(false, false,
ControlFlags.None,sid,null, null, null);
sd.SetDiscretionaryAclProtection(true, false);

//Deny access to everyone
SecurityIdentifier everyone = new SecurityIdentifier(
WellKnownSidType.WorldSid, null);
sd.DiscretionaryAcl.RemoveAccess(AccessControlType.Allow, everyone,
unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);

//Grant full access to specified user
sd.DiscretionaryAcl.AddAccess(AccessControlType.Allow, sid,
unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);

byte[] secDes = new Byte[sd.BinaryLength];
sd.GetBinaryForm(secDes, 0);

return secDes;
}

这很有效,并允许我在后端系统和 Active Directory 之间转换用户后创建自定义 ACL。

如果将安全性作为 BCS 模型的一部分,我仍然很想知道是否有人有其他方法。

关于.net - 在自定义 BCS/.net 类上实现安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596534/

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