Oracle 合理控制 DBA 权限

515 阅读2分钟

这是我参与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 权限的普通用户较多,建议分时间,分批次进行权限回收,将对生产环境的影响降至最小。