代码之家  ›  专栏  ›  技术社区  ›  ninesided

如何从Java解锁Oracle用户的帐户?

  •  1
  • ninesided  · 技术社区  · 16 年前

    我正在试图弄清楚为什么我的应用程序无法成功解锁用户的Oracle帐户。以下是我的代码片段:

    OracleDataSource ods = new oracle.jdbc.pool.OracleDataSource();
    
    Properties props = new Properties();
    props.put("user", "sys");
    props.put("password", "sys");
    props.put("internal_logon", "sysdba");
    
    ods.setConnectionProperties(props);
    ods.setURL("jdbc:oracle:thin:@localhost:1523:TEST_DB");
    
    Connection conn = ods.getConnection();
    Statement stmt = conn.createStatement();
    stmt.execute("ALTER USER SCOTT ACCOUNT UNLOCK");
    stmt.close();
    

    它在任何时候都不会引起争议 SQLException 或者报告任何问题,但用户的帐户实际上没有解锁。我是不是错过了一些显而易见的东西,还是有什么巧妙的方法让它发挥作用?

    8 回复  |  直到 16 年前
        1
  •  2
  •   David Aldridge    16 年前

    如果让应用程序连接成这样的sysdba,我会非常紧张。

    我希望有一个有权限的用户可以更改用户,从中删除创建会话权限,并让此模式包含一个帐户\u unlock pl/sql过程,您的应用程序所连接的用户被授予执行权限。ALTER USER功能强大,您可能希望限制应用程序可以更改的属性甚至单个用户。

    这也可能解决这个问题。

        2
  •  1
  •   Michael Rutherfurd    16 年前

    尝试使用executeUpdate,而不是仅执行。例如

    stmt.executeUpdate("ALTER USER SCOTT ACCOUNT UNLOCK")
    
        3
  •  1
  •   Rene    16 年前

    这不是“提交”问题,因为此语句不需要提交。需要考虑的事项:

    您是否从java登录到正确的数据库? 是否有某个进程试图登录到错误凭据导致帐户被锁定的帐户?

        4
  •  0
  •   Brian    16 年前

    我想知道这是否解决了这个问题:

        5
  •  0
  •   denis.zhdanov    16 年前

    试着设置 “自动提交” 财产 “真的” “假” 默认情况下,您的sql未提交。

        6
  •  0
  •   dpbradley    16 年前

    好消息是,您的代码应该可以工作-我刚刚对它进行了快速测试,目标帐户已解锁。我想到两个问题:

    • 从DBA\U用户中选择用户名、帐户\U状态 ?

    • 是否有一个Oracle配置文件可以锁定失败登录尝试的帐户?也许有 另一个进程尝试使用错误的密码连接但失败,该密码正在重新锁定帐户。

        7
  •  0
  •   No AI now No AI ever    16 年前

        8
  •  0
  •   robert amy    13 年前

    通过在包中执行动态sql的可调用语句来实现这一点会更安全。这样,就可以在包上授予execute权限,从而消除SQL注入攻击的可能性