分享

【安全为王】听说你最喜欢给所有用户授DBA的权限

 数据和云 2020-07-01

 编辑手记:最近很多朋友会问关于数据库用户授权的问题,经常问这样的问题,我能不能直接给用户DBA的角色,多方便。恩,方便是方便了,恶意操作和误操作也方便了。今天再苦口婆心告诉你,过度授权有哪些风险。

过度授权的风险

从安全角度考虑,数据库的授权应当遵循最小权限授予法,即仅授予满足用户需要的最小权限。这是因为在数据库中,如果进行了不当授权,则可能为数据库带来安全风险。

在数据库中,EXECUTE/CREATE ANY PROCEDURE都是非常重要的权限,如果被授予普通用户,则可能为数据库带来安全风险。

以下是在Oracle Database 8.1.7中的测试,首先创建了两个测试用户:


当使用测试用户连接后,EXECUTE ANY PROCEDURE的权限使用户具有了访问和执行dbms_sys_sql包的权限,这个Package可以被用户利用来获得更高的权限:


通过如下一段代码,Hacker用户就可以很多DDL语句,诸如修改其他用户的口令,对自我进行授权等:


通过DBMS_SYS_SQL.parse_as_user,hacker可以在数据库内任意为非作歹了。用户loser的口令已被更改:


在Oracle 9i中,如果用户具有EXECUTE/CREATE ANY PROCEDURE的权限,则同样用户可以做出很多跨越常规的授权:


现在CREATE ANY PROCEDURE的权限可以使用户创建任何过程:


现在EXECUTE ANY PROCEDURE的权限,可以使用户执行创建的过程,进行跨越职权的授权:

SQL> execute system.do('grant dba to eygle');

PL/SQL procedure successfully completed.

检查一下当前用户具有的权限:


重新连接会激活角色授权,可以注意到用户已经具备了DBA的职权:

SQL> connect eygle/eygle

Connected.

SQL> SELECT * FROM SESSION_ROLES;

ROLE

------------------------------

PLUSTRACE

DBA

SELECT_CATALOG_ROLE

HS_ADMIN_ROLE

EXECUTE_CATALOG_ROLE

DELETE_CATALOG_ROLE

EXP_FULL_DATABASE

IMP_FULL_DATABASE

GATHER_SYSTEM_STATISTICS

WM_ADMIN_ROLE

JAVA_ADMIN

JAVA_DEPLOY

12 rows selected.

SQL> SELECT * FROM SESSION_PRIVS;

PRIVILEGE

----------------------------------------

ALTER SYSTEM

AUDIT SYSTEM

CREATE SESSION

ALTER SESSION

RESTRICTED SESSION

CREATE TABLESPACE

ALTER TABLESPACE

MANAGE TABLESPACE

虽然在不同的版本中,Oracle一直在强化其安全管理,但是仍然需要我们小心谨慎的管理数据库权限,确保数据库安全。

如何加入"云和恩墨大讲堂"微信群

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多