oracle 12cR2新特性-PDB lockdown profile

版权声明:本文为Buddy Yuan原创文章,未经允许不得转载。原文地址:oracle 12cR2新特性-PDB lockdown profile

在12c多租户架构当中,PDB不仅仅共享了主机环境外,它还共享了操作系统,网络和公共对象。考虑到一些特权会允许数据库用户执行跨PDB操作,PDB可能会暴露某一些漏洞。特别是在公有云和私有云的环境中,多租户隔离是安全性的关键要求。因此,在Oracle 12cR2推出了lockwodn profile进行控制,并在Oracle 18c里面进一步得到了增强。

锁定配置文件可以限制pdb中用户执行某些操作:
1.管理功能,限制某些SQL语句,如alter system和alter session、alter database;
2.运行访问网络的程序,例如utl_smtp和utl_http
3.访问普通用户的对象;
4.与OS交互,比如UTL_FILE、DBMS_FILE_TRANSFER包
5.在cdb中执行不受限制的跨pdb连接;
6.生成awr快照;
7.部分或者整体使用java;
8.使用某些数据库选项,例如高级队列和分区表;

那么我们先来测试下这个功能,测试功能需要了解以下注意点:
1.创建、启用、禁用和删除lockdown文件的过程相对简单,用户需要具备create lockdown profile、alter lockdown profile、drop lockdown profile的权限。如果要启用lockdown profile(在CDB或者是PDB级别),还需要该用户有ALTER SYSTEM或者是SYSDBA的权限。
2.单个lockdown profile文件可以在其中定于多个规则。
3.一个pdb一次只能激活一个lockdown profile配置文件。
4.lockdown profile文件强制执行的限制是PDB范围的,它们会影响到每个用户,包括sys和systsm.
5.如果在cdb$root中启用了lockdown profile配置文件,则会影响所有的pdb,如果在pdb中启用,则只会影响pdb。

接下来我们就来测试一下这个功能
1.首先创建lockdown profile

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> create lockdown profile default_pdb_lockdown;
Lockdown Profile created.

2.接下来增加一些限制,限制前面说过有几种,我们来一一介绍。
2.1.锁定数据库选项。在Oracle 12cR2中,只有两个选项(DATABASE QUEUING,PARTITIONING)可以在lockdown配置文件中启用或禁用。

alter lockdown profile default_pdb_lockdown disable option=('PARTITIONING');
alter lockdown profile default_pdb_lockdown disable option=('DATABASE QUEUING');
alter lockdown profile default_pdb_lockdown disable option all;
alter lockdown profile default_pdb_lockdown disable option all except = ('DATABASE QUEUING','PARTITIONING');

这里几个选项的意思如option all,就是禁用所有数据库选项,option all except就是禁用所有选项除了DATABASE QUEUING,PARTITIONING;
如果要启用,就把disable关键字修改成enable。

alter lockdown profile default_pdb_lockdown enable option all;

2.2锁定数据库功能。可以参考官方文档中的Table 11-1 PDB Lockdown Profile Features介绍的。可以指定一组功能(Feature Bundle),也可以指定Feature。

alter lockdown profile default_pdb_lockdown disable feature=('OS_ACCESS');
alter lockdown profile default_pdb_lockdown disable feature=('UTL_HTTP','UTL_SMTP');

2.3.锁定语句
目前4个ALTER语句(ALTER DATABASE,ALTER PLUGGABLE DATABASE,ALTER SESSION,ALTER SYSTEM)可以被pdb lockdown profile锁定。

alter lockdown profile default_pdb_lockdown disable statement=('ALTER DATABASE','ALTER PLUGGABLE DATABASE');
alter lockdown profile default_pdb_lockdown disable statement all except=('ALTER DATABASE','ALTER PLUGGABLE DATABASE');

当然限制的范围可以使用CLAUSE,OPTION,MINVALUE,MAXVALUE。
以下语句禁用ALTER SYSTEM SUSPEND和ALTER SYSTEM RESUME语句;

alter lockdown profile default_pdb_lockdown disable statement=('ALTER SYSTEM') clause = ('SUSPEND', 'RESUME');

以下语句禁用所有ALTER PLUGGABLE DATABASE语句,除了DEFAULT TABLESPACE和DEFAULT TEMPORARY TABLESPACE;

alter lockdown profile default_pdb_lockdown disable statement=('ALTER PLUGGABLE DATABASE') clause all except =('DEFAULT TABLESPACE','DEFAULT TEMPORARY TABLESPACE');

以下语句禁用ALTER SESSION语句设置COMMIT_WAIT或CURSOR_SHARING

alter lockdown profile default_pdb_lockdown disable statement=('ALTER SESSION') clause=('SET') option=('COMMIT_WAIT','CURSOR_SHARING');

以下语句禁用ALTER SYSTEM语句设置或修改CPU_COUNT小于8;

alter lockdown profile default_pdb_lockdown disable statement=('ALTER SYSTEM') clause=('SET') option = ('CPU_COUNT') minvalue = '8';

以下语句禁用ALTER SYSTEM语句设置或修改CPU_COUNT大于2;

alter lockdown profile default_pdb_lockdown disable statement=('ALTER SYSTEM') clause=('SET') option = ('CPU_COUNT') maxvalue = '2';

以下语句禁用ALTER SYSTEM语句设置或修改CPU_COUNT小于2和大于8;

alter lockdown profile default_pdb_lockdown disable statement=('ALTER SYSTEM') clause=('SET') option = ('CPU_COUNT') minvalue = '2' maxvalue = '8';

3.限制策略需要好好的考虑好,不然就会经常出现alter session set container都出现权限错误的问题,因为有一些递归SQL调用就会出现问题。如下所示:

SQL> alter session set container=ORCLPDB1;
ERROR:
ORA-01031: insufficient privileges

SQL> show pdbs; 
ERROR:
ORA-00604: error occurred at recursive SQL level 2
ORA-01031: insufficient privileges

这里我简单测试,做了以下几个限制。

SQL> alter lockdown profile default_pdb_lockdown disable option=('PARTITIONING');
Lockdown Profile altered.

SQL> alter lockdown profile default_pdb_lockdown disable option=('DATABASE QUEUING');
Lockdown Profile altered.

SQL> alter lockdown profile default_pdb_lockdown disable feature=('OS_ACCESS');
Lockdown Profile altered.

SQL> alter lockdown profile default_pdb_lockdown disable feature=('UTL_HTTP','UTL_SMTP');
Lockdown Profile altered.

SQL> alter lockdown profile default_pdb_lockdown disable statement=('alter system') clause=('set') option all;
Lockdown Profile altered.

4.启用lockdown profile。我们在CDB中设置参数PDB_LOCKDOWN,那么所有PDB的都会使用这个lockdown profile。

SQL> ALTER SYSTEM SET PDB_LOCKDOWN = default_pdb_lockdown;
System altered.

我们可以通过查询DBA_LOCKDOWN_PROFILES视图,查看我们已经设置的限制规则。

SQL> select profile_name,rule_type,rule,clause,clause_option,status,users from DBA_LOCKDOWN_PROFILES where PROFILE_NAME='DEFAULT_PDB_LOCKDOWN';

PROFILE_NAME RULE_TYPE RULE CLAUSE CLAUSE_OPTION STATUS USERS
-------------------- -------------------- ------------------------- ------------------------------ ------------------------- ------- ------
DEFAULT_PDB_LOCKDOWN FEATURE OS_ACCESS DISABLE ALL
DEFAULT_PDB_LOCKDOWN FEATURE UTL_HTTP DISABLE ALL
DEFAULT_PDB_LOCKDOWN FEATURE UTL_SMTP DISABLE ALL
DEFAULT_PDB_LOCKDOWN OPTION DATABASE QUEUING DISABLE ALL
DEFAULT_PDB_LOCKDOWN OPTION PARTITIONING DISABLE ALL
DEFAULT_PDB_LOCKDOWN STATEMENT ALTER SYSTEM SET DISABLE ALL

5.执行测试,接下来我们进入到PDB里面,执行相关的SQL测试下限制是否生效了。

SQL> alter session set container=ORCLPDB1;
Session altered.

SQL> show parameter pdb_lockdown
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pdb_lockdown string DEFAULT_PDB_LOCKDOWN

可以看到是没有权限使用ALTER SYSTEM的,创建分区表会报ORA-00439: feature not enabled: Partitioning

SQL> alter system set cursor_sharing=EXACT;
alter system set cursor_sharing=EXACT
*
ERROR at line 1:
ORA-01031: insufficient privileges

SQL> create table t1 (c1 number) partition by hash (c1);
create table t1 (c1 number) partition by hash (c1)
*
ERROR at line 1:
ORA-00439: feature not enabled: Partitioning

再次回到CDB,在CDB下执行这些语句,可以看到功能是不受限制的。

SQL> alter session set container=cdb$root;
Session altered.

SQL> create table t1 (c1 number) partition by hash (c1);
Table created.

所以,我们可以看到,lockdown profile是限制PDB中某些操作的安全机制。它可以限制ALTER SYSTEM等强大的权限。也可以禁止使用一些访问网络或者是操作系统层面的强大的函数和包,当然还可以控制使用一些数据库的选项。这么做的好处是提升了安全性,做好了租户隔离。在公有云和私有云的租户环境是非常有用的功能。

分享到: 更多

Post a Comment

Your email is never published nor shared. Required fields are marked *