这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战
Oracle 数据库中除了 sys,system 具有 DBA 权限外,其他业务用户一般具有 CONNECT,RESOURCE 权限就够了,剩下的后期可根据业务需求授予相应权限。但在很多生产环境中,开发运维人员为了省事,经常直接将 DBA 权限赋予普通业务用户,后期再遇上安全检测,等保测评之类的,必须要整改时,再想要回收上来就不是那么简单了。
查看数据库中 DBA 权限的业务用户
SQL> select * from dba_role_privs where granted_role='DBA';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
SYD DBA NO YES
SYS DBA YES YES
GOLDENGATE DBA NO YES
SYSTEM DBA YES YES
赋予 CONNECT,RESOURCE 权限
SQL> conn syd
Enter password:
Connected.
SQL> select * from user_sys_privs;
USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SYD UNLIMITED TABLESPACE NO
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
SYD DBA NO YES NO
SQL> grant connect,resource to syd;
Grant succeeded.
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
SYD CONNECT NO YES NO
SYD DBA NO YES NO
SYD RESOURCE NO YES NO
SQL> conn GOLDENGATE
Enter password:
Connected.
SQL> select * from user_sys_privs;
USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
GOLDENGATE CREATE ANY DIRECTORY NO
GOLDENGATE DROP ANY DIRECTORY NO
GOLDENGATE UNLIMITED TABLESPACE NO
GOLDENGATE ALTER SESSION NO
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
GOLDENGATE CONNECT NO YES NO
GOLDENGATE DBA NO YES NO
GOLDENGATE GGS_GGSUSER_ROLE NO YES NO
GOLDENGATE RESOURCE NO YES NO
业务开发运维人员根据业务逻辑进行详细授权
此环节授权若梳理不全,下面回收 DBA 权限后可能影响到生产业务。
业务逻辑越清晰,梳理的越快越全,回收 DBA 权限后,对业务的影响也越小甚至没影响。
业务逻辑越混乱,梳理的越慢越可能遗漏,回收 DBA 权限后,经常会出现某些数据因无权访问,而影响到相关业务。
当然也会遇到一些破罐子破摔的,不顾业务影响直接回收 DBA 权限,回收后看哪些业务因没权限无法访问了,再重新挨个授权。
收回业务用户的 DBA 权限
SQL> conn sys as sysdba
Enter password:
Connected.
SQL> revoke dba from syd;
Revoke succeeded.
SQL> revoke dba from GOLDENGATE;
Revoke succeeded.
SQL> select * from dba_role_privs where granted_role='DBA';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
SYS DBA YES YES
SYSTEM DBA YES YES
业务验证
全面验证业务系统,观察收回 DBA 权限后,系统运行情况,若存在权限不足的问题,再重新进行相关授权。
PS:生产环境中,若 DBA 权限的普通用户较多,建议分时间,分批次进行权限回收,将对生产环境的影响降至最小。