c# - 如何从机器 sid 获取/查找域 sid
问题描述
我可以得到机器 Sid,如下所示:
var dir = new DirectoryEntry($"WinNT://{Environment.MachineName},Computer");
var objSid = dir.Children.Cast<DirectoryEntry>().First().InvokeGet("objectSID");
var secId = new SecurityIdentifier((byte[])objSid, 0);
var machineSid = secId.AccountDomainSid.ToString();
我试图从机器 Sid 中找到计算机 Sid,但它始终为 NULL。
using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, "AbcDomain", "userName", "password"))
{
var pc01 = ComputerPrincipal.FindByIdentity(principalContext, IdentityType.Sid, machineSid);
//output: pc01 = null
var pc02 = ComputerPrincipal.FindByIdentity(principalContext, IdentityType.Name, "PC-JACKML5291");
//output: pc02...
}
我想在调用之前检查重复的机器 sid JoinDomainOrWorkgroup
。我可以从机器 SID 获取计算机 SID(加入域)吗?
解决方案
机器 SID 与域上计算机对象的 SID 不同。它们不一样。
根据这篇文章,
为了确保唯一性,Setup 生成的 SID 具有一个固定的子权限值 (21) 和三个随机生成的子权限值(输出中“S-1-5-21”后面的数字)。
如果您想要域上计算机对象的 SID,则必须按计算机名称搜索对象。
推荐阅读
- angular - 我在路由方面遇到问题,Angular 在单击链接之前显示组件
- node.js - 如何修复登录错误:在护照 js 中登录此应用程序时出现错误?
- node.js - MERN 堆栈 webapp 显示空白屏幕 Android 移动浏览器,作为 React-Redux 前端,Node-Express 后端
- javascript - 更新对象数组中的单个对象键值反应 redux 状态
- puppet - 使用 Puppet 为 Debian 设置存储库
- symfony - 是否可以在 Symfony 4 中使用没有 AppBundle 的 ongr-elasticsearch 包?
- sql-server - 将字段从 nVarchar 转换为 Numeric,用于多行性能的 sql 函数
- c - 如何使我的代码独立于“RTOS”?
- wordpress - 用于 Wordpress 的 Gutenburg 组件的标准编辑器样式
- phpmyadmin - 无法连接到远程数据库