前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle 20c 新特性:DIAGNOSTICS_CONTROL 对诊断事件的安全管控

Oracle 20c 新特性:DIAGNOSTICS_CONTROL 对诊断事件的安全管控

作者头像
数据和云
发布2020-05-08 17:21:36
7610
发布2020-05-08 17:21:36
举报
文章被收录于专栏:数据和云

导读:在诊断Oracle数据库问题时,Oracle支持服务人员可能会指示您执行某些诊断操作。有些诊断操作是无害的。但是,如果不正确地执行其他操作,可能会产生不利影响。为了控制和监控执行此类诊断操作的人员,Oracle Database 20 引入了诊断控制的安全控制措施。

在诊断Oracle数据库问题时,Oracle支持服务人员可能会指示您执行某些诊断操作。有些诊断操作是无害的。但是,如果不正确地执行其他操作,可能会产生不利影响。为了控制和监控执行此类诊断操作的人员,Oracle Database 20 引入了诊断控制的安全控制措施。

这一改进是通过参数 DIAGNOSTICS_CONTROL 来引入的:

潜在的不安全诊断操作在数据库中被内部识别出来。这些操作包括用ALTER SESSION或ALTER SYSTEM语句设置某些调试事件和调试操作。例如。

代码语言:javascript
复制
ALTER SESSION SET EVENTS '1357 trace name context forever, level 2';
ALTER SYSTEM SET EVENTS 'trace[vos]';

用户可以通过被授予ENABLE DIAGNOSTICS系统权限,或被授予DBA角色,或以SYSDBA身份认证,来授权用户执行潜在的不安全诊断操作。

DIAGNOSTICS_CONTROL初始化参数可以让你指定当一个未经授权的用户试图执行这些诊断操作时,数据库如何响应,可能的参数值是:

  1. ERROR: 当未经授权的用户尝试执行一个潜在的不安全的诊断操作时,该尝试以错误 ORA-01031: 权限不足而失败。
  2. WARNING:当未经授权的用户尝试执行潜在的不安全诊断操作时,尝试成功,但警告被写入警告日志。
  3. IGNORE:当未经授权的用户尝试执行潜在的不安全诊断操作时,尝试成功,不会出现错误信息或警告。这是默认情况。

接下来让我们通过测试展示一下这个参数控制的效果。

首先创建一个测试用户:

代码语言:javascript
复制
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.

然后设置参数,以下在 CDB 以 SYS 用户执行:

代码语言:javascript
复制
SQL> show user
USER is "SYS"

SQL> alter system set diagnostics_control=ERROR;

System altered.

此时,在新建立的用户 ENMO 上执行 ALTER SESSION 修改诊断参数,可以看到终端直接收到了 ORA-01031 错误,阻止了用户执行:

代码语言:javascript
复制
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]

接下来在 CDB 修改参数:

代码语言:javascript
复制
SQL> alter system set diagnostics_control=WARNING;
System altered.

注意,修改参数的动作会记入告警日志:

代码语言:javascript
复制
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;

此时回到 ENMO 用户的会话,重复执行 ALTER SESSION 可以看到执行成功:

代码语言:javascript
复制
SQL> ALTER SESSION SET EVENTS '1357 trace name context forever, level 2';

Session altered.

观察告警日志,可以看到详细的信息都被记录下来,包括执行的用户、时间 等,但是操作被执行:

代码语言:javascript
复制
代码语言:javascript
复制
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'.

最后,在修改DIAGNOSTICS_CONTROL初始化参数时,请注意以下注意事项。

  1. 要使用ALTER SYSTEM命令修改这个参数,必须通过认证为SYSDBA。
  2. 在Oracle RAC环境中,目前无法通过在ALTER SYSTEM SET语句中指定SID子句在远程实例上修改此参数。

显然,通过 DIAGNOSTICS_CONTROL ,Oracle 让看不到、摸不着的诊断操作,变得有迹可循,可以跟踪,云和恩墨认为,这是 Oracle 细致入微的又一体现,对数据库安全进行了有益的管控和增强。

参考:https://docs.oracle.com/en/database/oracle/oracle-database/20/refrn/DIAGNOSTICS_CONTROL.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档