19c中通过Lockdown Profile实现权限管控

2025年2月24日 作者 XiaofeiHuangfu

背景描述

在数据库日常运维中,数据库管理用户拥有较高的权限,部分业务用户权限也过大,合法用户的误操作对于生产环境来说是最危险的,也是最难管理的。高危的操作命令如果误操作往往会引发生产故障,对企业造成损失。用户权限合理管控使用,生产环境安全稳定运行是运维的重要目标之一。Oracle 12.2开始提供一个特性Lockdown Profile,通过该功能我们可以对用户在多租户环境下的管理权限进行管控。19c中继续完善了该特性,通过该功能可以限定特定功能,阻止特定参数改变,限制特定命令等。

Lockdown Profile概述

  • Lockdown Profile是多租户环境中的对象
  • 能够对CDB和PDB实现权限管控
  • 进行限制的资源
  1. Feature:指Oracle Database的功能。例如,可以指定AWS ACCESS、JAVA、net_access、os_access等
  2. OPTION:指Oracle Database的选项。可以指定DATABASE QUEUING和PARTITIONING,DATABASE QUEUING是指Advanced QUEUING的功能
  3. STATEMENT:限制SQL语句。可以限制ALTER DATABASE语句/ ALTER PLUGGABLE DATABASE语句/ ALTER SESSION语句/ ALTER SYSTEM语句

Lockdown Profile使用

–创建和修改lockdownpfile

在CDB中创建lockdown profile

Lockdown Profile created.
SQL> ALTER LOCKDOWN PROFILE CDB_PROLK1 DISABLE FEATURE = ('NETWORK_ACCESS');
Lockdown Profile altered.
SQL> ALTER LOCKDOWN PROFILE CDB_PROLK1 DISABLE OPTION = ('PARTITIONING');
Lockdown Profile altered.
SQL> ALTER LOCKDOWN PROFILE CDB_PROLK1 DISABLE STATEMENT=('ALTER SYSTEM') CLAUSE=('SET') OPTION=('RESULT_CACHE_MODE') VALUE=('FORCE');
Lockdown Profile altered.

–检查lockdownpfile

RULE_TYPE            RULE                 CLAUSE                         CLAUSE_OPTION             MAX_VALUE            STATUS               USERS
-------------------- -------------------- ------------------------------ ------------------------- -------------------- -------------------- ------
FEATURE              NETWORK_ACCESS                                                                                                         DISABLE              ALL
OPTION               PARTITIONING                                                                                                                 DISABLE              ALL
STATEMENT            ALTER SYSTEM         SET                            RESULT_CACHE_MODE                              DISABLE             ALL

–开启lockdownpfile

Session altered.
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 HRPDB                          READ WRITE NO
SQL> ALTER SYSTEM SET pdb_lockdown =CDB_PROLK1;
System altered.
 
### --验证lockdownpfile
```SQL> alter system set RESULT_CACHE_MODE=force;
alter system set RESULT_CACHE_MODE=force
*
ERROR at line 1:
ORA-01031: insufficient privileges
开启lockdown profile后不能通过alter syetem 修改RESULT_CACHE_MODE参数。
SQL> CREATE TABLE part1(c1 NUMBER, c2 VARCHAR2(10))
PARTITION BY LIST(c1)
(
partition p1 VALUES (100),
PARTITION p2 VALUES (200)
);  2    3    4    5    6
CREATE TABLE part1(c1 NUMBER, c2 VARCHAR2(10))
*
ERROR at line 1:
ORA-00439: feature not enabled: Partitioning

开启lockdown profile后不能创建分区表了。

–关闭lockdownpfile特性

在CDB中:
SQL> ALTER LOCKDOWN PROFILE CDB_PROLK1 enable STATEMENT=(‘ALTER SYSTEM’) CLAUSE=(‘SET’)
OPTION=(‘PDB_LOCKDOWN’);
Lockdown Profile altered.
在PDB中:
SQL> alter session set container=hrpdb;
Session altered.
SQL> ALTER SYSTEM SET pdb_lockdown = ‘’;
System altered.

-the end-