原文链接:https://mp.weixin.qq.com/s/8Ad15KowCi4Pq0ZkY-oy4A 复制至浏览器,即可查看
在诊断Oracle数据库问题时,Oracle支持服务人员可能会指示您执行某些诊断操作。有些诊断操作是无害的。但是,如果不正确地执行其他操作,可能会产生不利影响。为了控制和监控执行此类诊断操作的人员,Oracle Database 20 引入了诊断控制的安全控制措施。
这一改进是通过参数 DIAGNOSTICS_CONTROL 来引入的:
![Oracle 20c 新特性:DIAGNOSTICS_CONTROL 对诊断事件的安全管控](http://p2.ttnews.xyz/loading.gif)
潜在的不安全诊断操作在数据库中被内部识别出来。这些操作包括用ALTER SESSION或ALTER SYSTEM语句设置某些调试事件和调试操作。例如。
<code>ALTER SESSION SET EVENTS '1357 trace name context forever, level 2';
ALTER SYSTEM SET EVENTS 'trace[vos]';
/<code>
用户可以通过被授予ENABLE DIAGNOSTICS系统权限,或被授予DBA角色,或以SYSDBA身份认证,来授权用户执行潜在的不安全诊断操作。
DIAGNOSTICS_CONTROL初始化参数可以让你指定当一个未经授权的用户试图执行这些诊断操作时,数据库如何响应,可能的参数值是:
- ERROR: 当未经授权的用户尝试执行一个潜在的不安全的诊断操作时,该尝试以错误 ORA-01031: 权限不足而失败。
- WARNING:当未经授权的用户尝试执行潜在的不安全诊断操作时,尝试成功,但警告被写入警告日志。
- IGNORE:当未经授权的用户尝试执行潜在的不安全诊断操作时,尝试成功,不会出现错误信息或警告。这是默认情况。
接下来让我们通过测试展示一下这个参数控制的效果。
首先创建一个测试用户:
<code>Copyright (c) 1982, 2020, Oracle. All rights reserved.
Last Successful login time: Fri Apr 24 2020 02:51:08 +00:00
Connected to:
Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
Version 20.2.0.0.0
SQL> show user
USER is "EYGLE"
SQL> create user enmo identified by enmo;
User created.
SQL> grant connect,resource to enmo;
Grant succeeded.
SQL> grant alter session to enmo;
Grant succeeded.
/<code>
然后设置参数,以下在 CDB 以 SYS 用户执行:
<code>SQL> show user
USER is "SYS"
SQL> alter system set diagnostics_control=ERROR;
System altered.
/<code>
此时,在新建立的用户 ENMO 上执行 ALTER SESSION 修改诊断参数,可以看到终端直接收到了 ORA-01031 错误,阻止了用户执行:
<code>SQL> connect enmo/enmo@enmo
Connected.
SQL> ALTER SESSION SET EVENTS '1357 trace name context forever, level 2';
ERROR:
ORA-01031: insufficient privileges
ORA-49100: Failed to process event statement [1357 trace name context forever,
level 2]
/<code>
接下来在 CDB 修改参数:
<code>SQL> alter system set diagnostics_control=WARNING;
System altered.
/<code>
注意,修改参数的动作会记入告警日志:
<code>SQL> ! tail -4 alert*
2020-04-24T02:52:25.957547+00:00
ALTER SYSTEM SET diagnostics_control='ERROR' SCOPE=BOTH;
2020-04-24T02:55:51.341360+00:00
ALTER SYSTEM SET diagnostics_control='WARNING' SCOPE=BOTH;
/<code>
此时回到 ENMO 用户的会话,重复执行 ALTER SESSION 可以看到执行成功:
<code>SQL> ALTER SESSION SET EVENTS '1357 trace name context forever, level 2';
Session altered.
/<code>
观察告警日志,可以看到详细的信息都被记录下来,包括执行的用户、时间 等,但是操作被执行:
<code>SQL> ! tail -6 alert*
2020-04-24T02:57:49.719833+00:00
ALTER SYSTEM SET diagnostics_control='WARNING' SCOPE=BOTH;
2020-04-24T02:57:54.962153+00:00
ENMO(4):User 'ENMO' has set the following debug-event(s) on the event-group 'session':
ENMO(4):'1357 trace name context forever, level 2'
ENMO(4):To disable such messages, refer to documentation about parameter 'diagnostics_control'.
/<code>
最后,在修改DIAGNOSTICS_CONTROL初始化参数时,请注意以下注意事项。
- 要使用ALTER SYSTEM命令修改这个参数,必须通过认证为SYSDBA。
- 在Oracle RAC环境中,目前无法通过在ALTER SYSTEM SET语句中指定SID子句在远程实例上修改此参数。
显然,通过 DIAGNOSTICS_CONTROL ,Oracle 让看不到、摸不着的诊断操作,变得有迹可循,可以跟踪,云和恩墨认为,这是 Oracle 细致入微的又一体现,对数据库安全进行了有益的管控和增强。
参考:DIAGNOSTICS_CONTROL
閱讀更多 數據和雲智能 的文章