命名空间创建时的安全性设置

创建命名空间的托管对象格式(MOF)文件还可以通过在安全描述符定义语言(SDDL)格式中包含 NamespaceSecuritySDDL 限定符,来定义命名空间的安全描述符

可以使用 NamespaceSecuritySDDL 来保护任何命名空间。 还可以在简单的 MOF 文件中使用此限定符来更改现有命名空间上的安全描述符。 SDDL 字符串由 WMI 进行处理,以建立命名空间安全性,但不存储为字符串。 如果未指定安全描述符,则使用默认安全性。 有关详细信息,请参阅 设置命名空间安全描述符

以下过程设置 root\MyNamespace 命名空间的安全描述符。 SDDL 字符串将所有者和组设置为经过身份验证的用户,并指定子命名空间继承的 任意访问控制列表(DACL )。 DACL 允许用户读取数据、执行方法、将数据写入提供程序类并使用远程访问:WBEM_ENABLEWBEM_METHOD_EXECUTEWBEM_WRITE_PROVIDER、WBEM_REMOTE_ACCESS。 有关详细信息,请参阅 访问 WMI 命名空间

设置命名空间 DACL

  1. 创建托管对象格式 (MOF) 文件或修改现有的 MOF 文件,该文件定义命名空间以使用 SDDL 字符串添加 NamespaceSecuritySDDL 限定符。

    下面的代码示例显示要修改的命名空间为 root\MyNamespace,该文件命名为 MyNamespace_security.mof。

    #pragma autorecover
    #pragma namespace("\\\\.\\root")
    [NamespaceSecuritySDDL ("O:BAG:BAD:(A;CI;0x60003;;;WD)")]
    Instance of __Namespace
    {
      Name = "MyNamespace";
    };
    
  2. 请注意,SDDL 字符串区分大小写:字母必须大写。

    下面的代码示例将 SDDL 字符串中的字母“o”和“g”显示为小写,并将导致 Mofcomp.exe 返回错误。

    #pragma autorecover
    #pragma namespace("\\\\.\\root")
    [NamespaceSecuritySDDL("o:BAg:BAD:(A;CI;0x60003;;;WD)")] 
    Instance of __Namespace
    {
      Name = "MyNamespace";
    };
    
  3. 运行 Mofcomp.exe 以编译 MOF 文件。

    c:\mofcomp MyNamespace_security.mof

    在C++中,使用 IMoFCompiler 方法。

  4. 如果尝试设置命名空间 DACL 失败,请考虑以下错误消息:

    错误 DESCRIPTION
    WBEM_E_INVALID_PARAMETER 没有继承的 DACL。 或者,调用方违反了父命名空间中的 DACL 或 SD。
    WBEM_E_ACCESS_DENIED 调用方无权在 MOF 中更新 SDDL。

     

设置命名空间安全描述符

命名空间访问权限常量

命名空间 ACE 标志常量

更改安全对象上的访问安全性