暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译] Oracle 21C 安全性:诊断控制和启用诊断

原创 樱桃小丸子 2022-06-20
274

原文地址:Oracle 21C Security : diagnostics_control and enable diagnostics
原文作者:Mouhamadou Diaw

一些调试事件和调试操作是不安全的,应该谨慎地暴露给用户。在以前的版本中,使用这些诊断的权限控制是不够的。

使用 Oracle 21c,可以阻止普通用户使用这些诊断,以更好地支持职责分离。

事实上,在 Oracle 21c 中,我们有了一种新机制来通过 ALTER SESSION 和/或 ALTER SYSTEM 来控制调试事件和调试操作。该机制由两个新特性实现

  • -ENABLE DIAGNOSTICS 系统权限
  • -DIAGNOSTICS_CONTROL 初始化参数

让我们看看这些功能是如何工作
的,因为 DIAGNOSTICS_CONTROL 设置为 IGNORE,默认行为是每个用户都可以在没有错误的情况下执行诊断任务,如果他有 ALTER SESSION PRIVILEGE

SQL> show parameter diagnostics_control
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
diagnostics_control                  string      IGNORE
SQL>

复制

让我们考虑具有以下权限的用户 EDGE

SQL>  select privilege from dba_sys_privs where GRANTEE='EDGE';
 
PRIVILEGE
----------------------------------------
CREATE TABLE
ALTER SESSION
CREATE SESSION
 
SQL>
复制

用户 EDGE 可以执行以下查询

SQL> show con_name
 
CON_NAME
------------------------------
PDB1
SQL> show user
USER is "EDGE"
SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';
 
Session altered.
 
SQL>
复制

现在让我们将 DIAGNOSTICS_CONTROL 设置为 WARNING

SQL> alter system set diagnostics_control=WARNING;
 
System altered.
 
SQL> show parameter diagnostics_control
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
diagnostics_control                  string      WARNING
SQL>
复制

让我们用用户 EDGE 重试 SET EVENTS 操作

SQL> show con_name
 
CON_NAME
------------------------------
PDB1
SQL> show user
USER is "EDGE"
SQL>
 
 
SQL> ALTER SESSION SET EVENTS '1357 trace name context forever, level 2';
 
Session altered.
 
SQL>
复制

该操作已执行,但我们在数据库警报日志中有一个条目

2022-01-12T12:56:22.136454+01:00
PDB1(3):User 'EDGE' has set the following debug-event(s) on the event-group 'session':
PDB1(3):'1357 trace name context forever, level 2'
PDB1(3):To disable such messages, refer to documentation about parameter 'diagnostics_control'.
复制

现在让我们将 DIAGNOSTICS_CONTROL 设置为 ERROR

SQL> alter system set diagnostics_control=ERROR;
 
System altered.
 
SQL> show parameter diagnostics_control
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
diagnostics_control                  string      ERROR
SQL>
复制

让我们再次尝试用户 EDGE 的 SET EVENTS 操作

SQL> show con_name
 
CON_NAME
------------------------------
PDB1
SQL> show user
USER is "EDGE"
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]
 
SQL>
复制

我们可以看到该语句没有执行并且我们得到一个错误。

我们可以得出结论,使用参数 DIAGNOSTICS_CONTROL,我们可以控制哪些用户可以执行诊断事件。可以在Oracle 文档中看到以下内容

错误:如果没有 SYSDBA 或 ENABLE DIAGNOSTICS 权限的用户尝试启用诊断,则尝试将失败并出现 ORA-01031:权限不足错误。
警告:没有 SYSDBA 或 ENABLE DIAGNOSTICS 权限的用户将能够启用诊断,但警告消息会写入警报日志。警告消息类似于以下内容:
IGNORE:用户可以执行诊断任务而不会出现任何错误消息。此设置是默认设置。

但是如果我想将参数设置为 ERROR 并希望允许一些非 DBA 用户执行诊断事件呢?只需授予他们新的系统权限启用诊断。

下面让我们做一个测试。

SQL>  select privilege from dba_sys_privs where GRANTEE='EDGE';
 
PRIVILEGE
----------------------------------------
ENABLE DIAGNOSTICS
CREATE TABLE
ALTER SESSION
CREATE SESSION
 
SQL> show parameter diagnostics_control
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
diagnostics_control                  string      ERROR
SQL>
复制

现在让我们做一个诊断事件

SQL> show con_name
 
CON_NAME
------------------------------
PDB1
SQL> show user
USER is "EDGE"
 
SQL> ALTER SESSION SET EVENTS '1357 trace name context forever, level 2';
 
Session altered.
 
SQL>
复制

由于现在 EDGE 具有 ENABLE DIAGNOSTICS 权限,因此即使 DIAGNOSTICS_CONTROL 设置为 ERROR,他也可以执行诊断事件。

结论

这个新功能对于限制可以执行诊断操作的用户非常有用。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论