暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 通过dblink更改远程数据库用户的密码,但显示错误为 “ORA-06550: 第1行,第8列: PLS-00352: 无法访问另一个数据库 'sys_dbalink”

ASKTOM 2019-11-28
1177

问题描述

嗨,我在Oracle Apex中创建了一个表单,当我单击提交按钮,然后运行存储过程,通过dblink更改远程数据库用户密码,但我收到错误为 “ORA-06550: 第1行,第8列: PLS-00352: 无法访问另一个数据库” SYS_DBALINK “。请找到我的代码

版本: 甲骨文数据库11g Express Edition版本11.2.0.2.0-生产

Below SP runs in  local database that calls different database dynamically over dblink

DECLARE
  SQL_STRING VARCHAR2(1000);
BEGIN
SQL_STRING:=' begin accout_change@'||:P2_DATABASE||'LINK('''||:P2_USERAME||''','''||:P2_PASSWORD||'''); end; ';
    EXECUTE IMMEDIATE SQL_STRING;
-- dbms_output.put_line(SQL_STRING);
END;
 
Below SP runs in remote database

create or replace PROCEDURE accout_change (
    P2_USERAME VARCHAR2,
    P2_PASSWORD VARCHAR2
) IS
    sql_string   VARCHAR2(500);
BEGIN
    sql_string := 'alter user '
                  || P2_USERAME
                  || ' '
                  || 'identified by '
                  || P2_PASSWORD;
   EXECUTE IMMEDIATE sql_string;
    -- dbms_output.put_line('string ' || sql_string);
    -- dbms_output.put_line('Success');
EXCEPTION 
WHEN OTHERS then
dbms_output.put_line('Failed');
END;
复制

专家解答

当心!当心!此代码具有MASSIVESQL注入的可能性。

停止使用字符串连接。

使用绑定变量。

注意: 这对于alter用户来说很棘手-您无法绑定标识符 (用户名,表名等)-因此,您需要使用dbms_assert来确保代码安全。

要了解此信息,请阅读:

https://www.oracle.com/technetwork/database/features/plsql/overview/how-to-write-injection-proof-plsql-1-129572.pdf

DO THIS NOW!

如果此代码已经存在,请将其删除,直到安全为止。

无论如何,关于你的问题:

看起来链接本身配置不正确。运行时会发生什么:
select * from dual@SYS_DBALINK
复制




What about the procedure on the remote database? Can you call it on that database? What about manually calling it from SQL*plus/cl/dev over the db link?
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论