【发布时间】:2014-04-18 16:33:55
【问题描述】:
谁能告诉我如何在 oracle 中执行以下存储过程:-
create or replace PROCEDURE spValidateDBA(
UserId IN VARCHAR2,
UserPassword IN VARCHAR2,
UserRole OUT STRING_ARRAY)
AS
BEGIN
EXECUTE IMMEDIATE 'select GRANTED_ROLE into UserRole from DBA_USERS DU,DBA_ROLE_PRIVS DRP where DU.USERNAME=UserId and
DU.PASSWORD=UserPassword AND DU.USERNAME=DRP.GRANTEE';
END spValidateDBA;
STRING_ARRAY 是此语句中声明的字符串数组类型:- 将 STRING_ARRAY 类型创建为 VARCHAR2(50) 的表;
如有任何问题,请告诉我。
【问题讨论】:
-
表
DBA_USERS中的列PASSWORD仅包含密码哈希,而不包含明文密码。 -
有没有办法针对特定用户验证数据库密码以进行用户验证?
-
我认为这是不可能的。用户在登录到必须输入个人密码的数据库时得到验证。
-
也许获得所需信息的更短的方法是这个函数:DBMS_SESSION.IS_ROLE_ENABLED(<rolename>)。它还包括一个角色是否被授予另一个角色。