LOCKDOWN profile
有时候用户有这样的需求,我希望不能做这个用户不能做drop truncate等操作。在12c之前,需要通过trigger来实现,但是在12c及之后,可以用过 lockdown profile的特性,来实现权限的细粒化操作。不仅仅可以限制pdb中local用户的操作,甚至是sys等common user也能限制。且不仅仅是针对表,也可以针对数据库的某些操作,比如 alter system。整个流程如下,仅供参考,(测试环境为19c-linux7-rac)
1 创建lockdown profile ,并设置查看
CREATE LOCKDOWN PROFILE
profile_name
[FROM
static_base_profile
| INCLUDING
dynamic_base_profile
];
例子:SQL> CREATE LOCKDOWN PROFILE test_profile;Lockdown Profile created
限制alter system操作的profileSQL> ALTER LOCKDOWN PROFILE test_profile DISABLE STATEMENT=('ALTER SYSTEM');Lockdown Profile altered.
允许flush shared poolSQL> ALTER LOCKDOWN PROFILE test_profile ENABLE STATEMENT=('ALTER SYSTEM') CLAUSE=('FLUSH SHARED_POOL');Lockdown Profile altered.
禁止droptable
SQL> ALTER LOCKDOWN PROFILE test_profile DISABLE STATEMENT=('DROP TABLE');
查看
SET LINESIZE 150
COL PROFILE_NAME FORMAT a20
COL RULE FORMAT a20
COL CLAUSE FORMAT a25
SELECT PROFILE_NAME, RULE, CLAUSE, STATUS FROM CDB_LOCKDOWN_PROFILES;
2 启用和查看pdb 的lockdown profile
SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 pdbtest READ WRITE YES SQL> alter session set container=pdbtest;Session altered.--为LEIPDB的PDB启用该lockdown profile SQL> alter system set PDB_LOCKDOWN = test_profile;System altered. SQL> SHOW PARAMETER PDB_LOCKDOWNNAME TYPE VALUE-------- -------- ----------pdb_lockdown string test_profile;
3. 查看和测试
SELECT * from DBA_LOCKDOWN_PROFILES
–在当前PDB下执行其他ALTER SYSTEM命令 SQL> alter system switch logfile;alter system switch logfile*ERROR at line 1:ORA-01031: insufficient privileges flush shared pool由于enable了。所以可以执行
SQL> alter system FLUSH SHARED_POOL;
System altered.
能创建表,但是无法drop表
4.
修改和删除
如果想要解除的,也很简单。 Lockdown profile支持动态修改,修改完立即生效。ALTER LOCKDOWN PROFILE test_profile ENABLE STATEMENT=('ALTER SYSTEM'); 删除lockdown profileDROP LOCKDOWN PROFILE test_profile;
