测试ASM ACL 权限控制。

本文详细介绍了在Oracle环境下测试ASMACL权限控制的过程,包括使用SQL命令展示用户信息、数据库文件名,创建表空间、调整表空间状态,并在ASM环境中设置ASM盘组属性以实现权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试ASM ACL 权限控制。
on the oracle:
SQL> show user
USER is "SYS"
SQL> select name from v$database;

NAME
---------
ORCL

SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/users.259.766156881
+DATA/orcl/datafile/undotbs1.258.766156879
+DATA/orcl/datafile/sysaux.257.766156879
+DATA/orcl/datafile/system.256.766156877
+DATA/orcl/datafile/example.264.766157087
+DATA/orcl/datafile/undotbs2.265.766157357
+DATA/orcl/datafile/undotbs3.269.766236417

7 rows selected.

SQL>  create tablespace tbs datafile '+ACFS' size 10m;

Tablespace created.

SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/orcl/datafile/users.259.766156881
+DATA/orcl/datafile/undotbs1.258.766156879
+DATA/orcl/datafile/sysaux.257.766156879
+DATA/orcl/datafile/system.256.766156877
+DATA/orcl/datafile/example.264.766157087
+DATA/orcl/datafile/undotbs2.265.766157357
+DATA/orcl/datafile/undotbs3.269.766236417
+ACFS/orcl/datafile/tbs.259.766320739

8 rows selected.

SQL> alter tablespace tbs offline;

Tablespace altered.
ON ASM:

[grid@host01 ~]$ . oarenv
-bash: oarenv: No such file or directory
[grid@host01 ~]$ . oraenv
ORACLE_SID = [grid] ? +ASM2
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/grid
[grid@host01 ~]$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 4 10:50:43 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options

SQL> select * from v$asm_user;

no rows selected

SQL> alter diskgroup acfs set attribute='access_control.enabled'='true';
alter diskgroup acfs set attribute='access_control.enabled'='true'
                                  *
ERROR at line 1:
ORA-15214: missing or invalid attribute specification


SQL> alter diskgroup acfs set attribute 'access_control.enabled'='true';
alter diskgroup acfs set attribute 'access_control.enabled'='true'
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15242: could not set attribute access_control.enabled
ORA-15238: true is not a valid value for attribute access_control.enabled
ORA-15283: ASM operation requires compatible.rdbms of 11.2.0.0.0 or higher


SQL> alter diskgroup acfs set attribute 'compatible.rdbms'='11.2.0.0.0';

Diskgroup altered.

SQL>  alter diskgroup acfs set attribute 'access_control.enabled'='true';

Diskgroup altered.

SQL> alter tablespace tbs online;
alter tablespace tbs online
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 8 - see DBWR trace file
ORA-01110: data file 8: '+ACFS/orcl/datafile/tbs.259.766320739'

 ON ASM:
 
SQL> alter diskgroup acfs add user 'oracle';

Diskgroup altered.
ON DB.
SQL> alter tablespace tbs online;

Tablespace altered.




<think>好的,用户问的是在VB6中使用RegOpenKeyEx读取注册表内容时,在已加入域的Windows 10系统上无法获取数据的问题。首先,我需要考虑可能的原因。 可能权限问题,因为域环境下的组策略可能限制了用户权限。用户可能没有足够的权限访问特定的注册表项,特别是HKEY_LOCAL_MACHINE下的项,需要管理员权限。这时候应该检查是否需要以管理员身份运行程序,或者修改注册表项的权限。 另外,注册表重定向也是一个可能性。64位系统上,32位程序访问某些注册表路径会被重定向到Wow6432Node,用户可能没有意识到这一点,导致路径错误。需要确认VB6程序是否是32位,如果是,可能需要调整访问的路径。 还有可能组策略锁定了注册表访问。域控制器可能通过策略禁止普通用户访问某些注册表项,这时候需要检查域策略或联系管理员。此外,防病毒软件或安全软件可能拦截了注册表操作,暂时禁用这些软件测试是否有帮助。 注册表项是否确实存在也需要确认,特别是不同用户登录时。可能用户检查的路径在域环境下不存在,或者路径有变化。使用regedit手动确认路径是否存在,以及是否有访问权限。 代码方面,可能需要调整访问权限参数,比如将KEY_READ改为KEY_READ Or KEY_WOW64_64KEY来绕过重定向。或者尝试使用KEY_ALL_ACCESS,但要注意权限问题。 最后,建议用户分步骤排查:检查路径是否正确,以管理员身份运行,处理重定向,检查组策略,查看错误代码等。如果用户能提供具体的注册表路径和错误代码,可以更精准地解决问题。</think>在Windows 10加域环境下VB6通过`RegOpenKeyEx`读取注册表失败的常见原因及解决方案如下: --- ### 一、核心问题分析 1. **权限限制增强** - 域策略通常会限制普通用户访问`HKEY_LOCAL_MACHINE`分支 - Windows 10对注册表访问的UAC管控更严格(特别是系统关键区域) 2. **注册表虚拟化干扰** - 32位程序在64位系统中访问`HKEY_LOCAL_MACHINE\SOFTWARE`会被重定向到`Wow6432Node` - 域环境可能强制关闭注册表虚拟化功能 3. **访问标志位不兼容** - 未正确处理`KEY_WOW64_64KEY`或`KEY_WOW64_32KEY`标志 - 旧版VB6的API声明可能缺少关键参数 --- ### 二、具体解决方案 #### 方案1:显式声明64位访问(关键步骤) ```vb ' 修改API声明(新增samDesired参数) Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _ (ByVal hKey As Long, ByVal lpSubKey As String, _ ByVal ulOptions As Long, ByVal samDesired As Long, _ phkResult As Long) As Long ' 使用访问标志组合 Const KEY_QUERY_VALUE = &H1 Const KEY_WOW64_64KEY = &H100 Const KEY_WOW64_32KEY = &H200 ' 调用示例(访问64位原生注册表) Dim lResult As Long lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\YourKey", 0, _ KEY_QUERY_VALUE Or KEY_WOW64_64KEY, hKey) ``` #### 方案2:绕过重定向(路径修正) ```vb ' 直接访问32位虚拟化路径 Dim sPath As String If Is64BitOS() Then ' 需要自定义OS位数检测函数 sPath = "SOFTWARE\Wow6432Node\YourKey" Else sPath = "SOFTWARE\YourKey" End If ``` #### 方案3:提权运行程序 ```vb ' 在VB6工程中嵌入UAC清单文件 ' 新建文件 app.manifest 内容: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> ``` --- ### 三、域环境特殊处理 1. **组策略冲突排查** - 检查域控制器是否部署了以下策略: - `计算机配置\管理模板\系统\注册表工具\阻止访问注册表编辑工具` - `用户配置\管理模板\系统\阻止访问注册表编辑工具` 2. **注册表权限修复** ```powershell # 以管理员身份运行PowerShell Set-Location "HKLM:\SOFTWARE\YourKey" $acl = Get-Acl . $rule = New-Object System.Security.AccessControl.RegistryAccessRule ("DOMAIN\Users","ReadKey","Allow") $acl.SetAccessRule($rule) Set-Acl -Path . -AclObject $acl ``` 3. **注册表访问日志捕获 ```cmd :: 启用审核策略(需要域管理员权限) reg add "HKLM\SOFTWARE\YourKey" /v "TestValue" /t REG_SZ /d "Test" /f auditpol /set /subcategory:"Registry" /success:enable /failure:enable ``` --- ### 四、错误处理建议 ```vb ' 增强错误捕获机制 Private Sub ReadRegistry() On Error GoTo ErrorHandler Dim lRet As Long, hKey As Long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\TargetKey", 0, _ KEY_READ Or KEY_WOW64_64KEY, hKey) If lRet <> ERROR_SUCCESS Then MsgBox "错误代码: 0x" & Hex(lRet) & vbCrLf & _ "可能原因: " & GetRegErrorDesc(lRet) ' 自定义错误描述函数 Exit Sub End If ' ...其他操作... ErrorHandler: Debug.Print "Error " & Err.Number & ": " & Err.Description End Sub ``` --- ### 五、兼容性验证步骤 1. 在非域环境中测试相同代码 2. 使用`Process Monitor`监控注册表访问路径 3. 对比本地管理员账户与域账户的访问差异 4. 检查Windows事件查看器中相关安全日志(事件ID 4656/4657) > **注意**:如果目标注册表项涉及系统安全策略(如杀毒软件保护区域),可能需要联系域管理员进行白名单配置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值