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

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

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

以下过程为 root\MyNamespace 命名空间设置安全描述符。 SDDL 字符串将所有者和组设置为经过身份验证的用户,并指定由子命名空间继承的自定义访问控制列表 (DACL)。 DACL 允许用户有权读取数据、执行方法、将数据写入提供程序类和使用远程访问:WBEM_ENABLE、WBEM_METHOD_EXECUTE、WBEM_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 失败,请考虑以下错误消息:

    错误 说明
    WBEM_E_INVALID_PARAMETER 没有继承的 DACL。 或者,调用方违反了父名称空间中的 DACL 或 SD。
    WBEM_E_ACCESS_DENIED 调用方没有权限更新 MOF 中的 SDDL。

     

设置命名空间安全描述符

命名空间访问权限常量

命名空间 ACE 标志常量

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