首页 文章

在plsql中检查用户的密码是否有效

提问于
浏览
0

我需要检查数据库用户是否有效 .

我将允许用户使用 ALTER 命令更改其密码,但在此之前,我想验证他们当前的密码,以确保他们是他们所说的人 . 是否可以在pl / sql内部获取用户/密码组合并检查它是否有效?

2 回答

  • 1

    我认为Oracle数据库不会为您提供执行此操作的API . 您可以使用的一个kludge是使用环回数据库链接来检查它 . 像这样:

    DECLARE
      p_username        VARCHAR2 (30) := 'VXSMIMMCP';  -- Change to the user whose password you are validating
      p_test_password   VARCHAR2 (30) := 'NOT_MY_PASSWORD';  
      p_loopback_connection_string VARCHAR2(80) := 'STRQA2';  -- Change this for your environment
    BEGIN
    
      BEGIN
        EXECUTE IMMEDIATE q'[drop database link password_test_loopback]';
      EXCEPTION
        WHEN OTHERS THEN
          NULL;
      END;
    
      EXECUTE IMMEDIATE
        'create database link password_test_loopback connect to "' || p_username || '" identified by "' || p_test_password || '" using ''' || p_loopback_connection_string || '''';
    
      EXECUTE IMMEDIATE q'[SELECT * FROM dual@password_test_loopback]';
    
      EXECUTE IMMEDIATE q'[drop database link password_test_loopback]';
    
      dbms_output.put_line('Password is good');
    EXCEPTION WHEN OTHERS THEN
      IF SQLCODE = -1017 THEN
        DBMS_OUTPUT.PUT_LINE('Password is wrong');
      ELSE
        raise;
      END IF;
    END;
    

    更高级的选项是找到一种方法来使用单点登录/ LDAP进行Oracle身份验证 . 然后,您的问题变成了 - 我如何在LDAP字典中验证用户名/密码,这更容易 .

  • 0

    任何数据库用户都可以更改自己的密码 . 这不是你可以统治的东西 . 这就是“按设计”的工作方式 . 数据库中给定用户的权限是另一个故事 . 这就是你和dba可以统治的地方 .

    sys@XE> create user a identified by a;
    
    User created.
    
    Elapsed: 00:00:00.03
    sys@XE> grant create session to a;
    
    Grant succeeded.
    
    sys@XE> @c a/a
    
    a@XE> alter user a identified by b;
    
    User altered.
    
    Elapsed: 00:00:00.03
    a@XE> @c a/b
    a@XE>
    

    您的应用程序工具必须具有用于密码管理的模块 . 看看Tom's answer对此:

相关问题