我需要检查数据库用户是否有效。检查用户的密码是否有效plsql
我将允许用户使用ALTER命令更改他们的密码,但在此之前我想验证他们当前的密码以确保他们是他们所说的那个人。是否有可能在pl/sql中使用用户/密码组合并检查它是否有效?
我需要检查数据库用户是否有效。检查用户的密码是否有效plsql
我将允许用户使用ALTER命令更改他们的密码,但在此之前我想验证他们当前的密码以确保他们是他们所说的那个人。是否有可能在pl/sql中使用用户/密码组合并检查它是否有效?
任何数据库用户都可以更改自己的密码。这不是你可以统治的东西。这是“设计”的工作原理。数据库内给定用户的权限是另一回事。这是你作为dba可以统治的地方。
[email protected]> create user a identified by a;
User created.
Elapsed: 00:00:00.03
[email protected]> grant create session to a;
Grant succeeded.
[email protected]> @c a/a
[email protected]> alter user a identified by b;
User altered.
Elapsed: 00:00:00.03
[email protected]> @c a/b
[email protected]>
您的应用程序工具必须有一个密码管理模块。 看看Tom's answer对此:
我不认为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 [email protected]_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字典中验证用户名/密码,这很容易。
我想这应该回答你的问题...... http://dba.stackexchange.com/questions/43086/how-to-change-a-user-password-while-checking-the-current -password-in-oracle – Mitchell
我不确定我是否理解问题的上下文。通常,用户在更改密码之前已经登录到数据库,因此您可以使用他们登录的事实作为他们知道当前密码的证据。如果您希望用户在未登录的情况下更改其密码,您是否可以使用'alter user'命令的'replace old_password'子句? –
对于其他人澄清的问题:SYS_CONTEXT('USERENV','SESSION_USERID')或者'SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY')'是否足以获得调用您的过程的名称?您并不需要偷看密码,只需询问Oracle当前用户是否已通过身份验证... – Ditto