在Oracle数据库中,我可以跟踪访问同一架构的不同个人的登录信息吗



我的组织在Oracle数据库中有许多模式,需要由许多单独的开发人员访问。在大多数情况下,开发人员可以使用自己的id登录,并通过角色权限访问这些其他模式,但对于某些任务,个别开发人员需要直接登录到这些模式。

例如,模式A需要由用户X和Y访问。用户X和用户Y可以使用自己的ID登录,但为了充分利用模式A的潜力,他们需要模式A密码。

我感兴趣的是跟踪用户Y是否以及何时使用模式A密码登录到模式A。这能做到吗?

我对此的需求主要与密码安全和员工离开我们组织时的离职程序有关。例如,如果我有模式A,并且密码至少有一些用户X、Y、Z和Q知道,而用户Q离开了,这是一个威胁吗?如果检查结果显示用户Q不知道模式A的密码,那么我没有安全风险,但如果检查结果表明用户Q知道模式A,那么我需要更改模式A的口令,这可能会影响用户X、Y和Z。

因此,我的问题是,Oracle中是否有一种方法可以让我作为DBA识别哪些人登录了这些模式,无论是通过跟踪他们的客户端标识符还是其他途径?

感谢

对于这个特定的场景,使用代理身份验证:它一次解决了与开发环境相关的几个问题。

[代理身份验证]允许用户作为一个用户在连接时连接到数据库成为不同的用户。此功能最初由Oracle作为应用程序对最终用户进行身份验证的一种方式通过公共应用程序帐户的单个数据库帐户,但是反之亦然。

在这个模型中。。。每个显影剂被给予单独的,数据库中的个人帐户。大多数应用程序开发现在都可以通过这些个人账户进行处理和审计。因为登录帐户与个人用户相关联,没有鼓励开发人员与任何人共享他们的证书其他的判断个人账户是否被分享,这样做将成为与大多数人终止合同的理由公司。

为了在实际操作中演示这一点,我将创建一个应用程序模式并将其配置为只能通过代理访问身份验证:

Connected to: Oracle Database 19c Enterprise Edition Release
19.0.0.0.0 - Production Version 19.3.0.0.0
SQL> create user app_schema no authentication proxy only connect;
User created.
SQL> grant connect, resource to app_schema;
Grant succeeded. 

"无身份验证"选项创建共享没有凭据的帐户。[这不是严格要求的,但]它消除了维护永远不会使用的帐户的密码或证书直接地"仅代理连接"选项仅允许代理到共享帐户的连接。[这也不是必需的,但根据您的情况可能会有用。]"连接"one_answers"资源"角色授予使用帐户和创建对象的基本权限。接下来,我将创建一个示例开发用户:

SQL> create user dev_user identified by oracle;
User created. 

现在可以更改应用程序模式以允许来自个人开发者帐户的连接,如下所示:

alter user app_owner grant connect through dev_user; 

注意语法:APP_OWNER架构被更改为允许通过DEV_USER帐户。这不是直接分配给的特权开发用户。一旦分配了此代理权限开发人员可以使用他们的个人资格证书他们所需要做的就是附加应用程序帐户名在其开发帐户名称末尾的括号中,如下所示:

SQL> connect dev_user[app_schema]/oracle
Connected. 
SQL> show user;
USER is "APP_SCHEMA" 

通过这种方式连接,开发人员可以仍然执行所需的操作,但永远不需要意识到应用程序所有者帐户的真实密码(假设其中一个是偶数已分配)。代理帐户名称(开发者的个人帐户)在系统会话上下文中可用,并且可以自动通过数据库触发器在v$session视图中可见,以便DBA可以随时告知谁连接到共享帐户。

CREATE OR REPLACE TRIGGER db_session_trig  
AFTER LOGON ON DATABASE  
v_proxy_user varchar2; 
BEGIN
v_proxy_user := sys_context('userenv','proxy_user');
if v_proxy_user is not null then
dbms_session.set_identifier(v_proxy_user);
end if; 
END; 
select username, osuser, client_identifier 
from v$session where username='APEX_040000';
USERNAME          OSUSER          CLIENT_IDENTIFIER 
----------------- --------------- ---------------------- 
APEX_040000       oracle          PETE 

使用PROXY_USERS视图可以很容易地准确地确定哪些开发人员可以访问每个应用程序所有者帐户。

PROXY   CLIENT         AUTHENTICATION FLAGS 
------- -------------- -------------- -----------------------------------
PETE    APEX_040000    NO             PROXY MAY ACTIVATE ALL CLIENT ROLES  

因为即使是基本的审计捕获开发人员的操作系统用户名,审核跟踪将记录作为应用程序执行DDL操作背后的实际开发人员物主

Sep 4 10:04:07 testdb Oracle Audit: SESSIONID: "12345" ENTRYID: "1"
STATEMENT: "6" USERID: "APP_SCHEMA" USERHOST: "myserver" TERMINAL:
"pts/2" ACTION: "7" RETURNCODE: "0" OBJ$CREATOR: "APP_SCHEMA"
OBJ$NAME: "TEST_TABLE" SES$TID "4567" OS$USERID: "PETE" 

使用具有代理帐户访问权限的单个开发人员用户帐户应用程序模式,允许开发人员在共享帐户,同时仍然保持帐户凭据安全,连接用户的可见性以及准确的审计历史记录。

全文如下:https://pmdba.wordpress.com/2021/10/15/shared-application-accounts-revisited/

您可以为此使用代理用户。这样就不需要共享密码,定期审计就可以完成它的工作。

另一种选择是在开发人员可以调用的其他模式中定义包。包需要使用定义者权限进行定义,因此当开发人员调用包时,将使用直接授予架构的权限来执行。这样做可以避免令人讨厌的"任何"特权。

最新更新