用A000001用户创建存储过程
把用户密码改成与用户名相同,存储过程如下:
CREATE OR REPLACE PROCEDURE ALTER_PASSWORD
-- 修改密码
(
p_user in varchar2
) is
sqlstr varchar2(400);
acur integer ;
ignore integer;begin
acur := dbms_sql.open_cursor;
sqlstr := 'alter user '||p_user||' identified by '||p_user ;
DBMS_SQL.PARSE(acur, sqlstr,dbms_sql.native);
ignore :=dbms_sql.execute(acur);
DBMS_SQL.close_cursor(acur);
commit;
end ALTER_PASSWORD; sqlplus中以A000001登陆调用如下:
exec ALTER_PASSWORD('A000001');
运行成功但是以A000002登陆调用
exec A000001.ALTER_PASSWORD('A000002');
报错权限不足,在DBMS_SQL.PARSE(acur, sqlstr,dbms_sql.native);谢高手指点!
把用户密码改成与用户名相同,存储过程如下:
CREATE OR REPLACE PROCEDURE ALTER_PASSWORD
-- 修改密码
(
p_user in varchar2
) is
sqlstr varchar2(400);
acur integer ;
ignore integer;begin
acur := dbms_sql.open_cursor;
sqlstr := 'alter user '||p_user||' identified by '||p_user ;
DBMS_SQL.PARSE(acur, sqlstr,dbms_sql.native);
ignore :=dbms_sql.execute(acur);
DBMS_SQL.close_cursor(acur);
commit;
end ALTER_PASSWORD; sqlplus中以A000001登陆调用如下:
exec ALTER_PASSWORD('A000001');
运行成功但是以A000002登陆调用
exec A000001.ALTER_PASSWORD('A000002');
报错权限不足,在DBMS_SQL.PARSE(acur, sqlstr,dbms_sql.native);谢高手指点!
grant alter any user to A000002;
DBA Role 有权限alter user 后来我发现再给A000001赋alter user 权限,则运行成功,不知为何?
按理说A000001属于DBA Role就应该有了alter user 权限.