有时候用户有这样的需求,我希望不能做这个用户不能做drop truncate等操作。
在12c之前,需要通过trigger来实现,但是在12c及之后,可以用过 lockdown profile的特性,来实现权限的细粒化操作。
不仅仅可以限制pdb中local用户的操作,甚至是sys等common user也能限制。
且不仅仅是针对表,也可以针对数据库的某些操作,比如 alter system。
整个流程如下,仅供参考,(测试环境为19c-linux7-rac)
CREATE LOCKDOWN PROFILE profile_name
[FROM static_base_profile | INCLUDING dynamic_base_profile ];
例子:
SQL> CREATE LOCKDOWN PROFILE test_profile;
Lockdown Profile created
限制alter system操作的profile
SQL> ALTER LOCKDOWN PROFILE test_profile DISABLE STATEMENT=('ALTER SYSTEM');
Lockdown Profile altered.
允许flush shared pool
SQL> 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;
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_LOCKDOWN
NAME TYPE VALUE
-------- -------- ----------
pdb_lockdown string test_profile;
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 profile
DROP LOCKDOWN PROFILE test_profile;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31404823/viewspace-2715468/ ,如需转载,请注明出处,否则将追究法律责任。