2014-12-09 11 views
1

내 웹 페이지에서 HTML 콘텐츠를 가져오고 싶습니다. 나는 PLSQL의 UTL_HTML 패키지로 할 수 있다고 읽었다. 그래서 프로젝트에서 다음 코드를 만들었습니다 :PLSQL에서 UTL_HTTP 권한 부여

v_webcontent := utl_http.request(v_weblink); 

여기서 v_webconent와 v_weblink는 더 일찍 선언됩니다. 이 함수를 실행하면 PLSQL 예외가 발생합니다. PLS-00201: identifier 'UTL_HTTP' must be declared이 문제는 패키지를 사용할 수 없기 때문에 발생합니다 (이 링크의 same error message).

나는 조언을 따랐다. 그래서 나는 SYSDBA 나 SYSOPER를 사용해서 만 로그온 할 수 있다고 SYS가 작동하지 않는 SYSTEM 역할로 sql 개발자에게 새로운 데이터베이스 연결을 만들었지 만 데이터베이스로 만든 표준 암호를 사용하지는 않을 것입니다. 그런 다음 위의 링크에 코드를 입력했습니다.

GRANT EXECUTE ON SYS.UTL_HTTP TO [database]; 

내가 만든 사용자의 이름은 '데이터베이스'입니다. 처음에는 [] 대괄호가 없으면 오류가 발생했습니다. 테이블 또는 뷰가 존재하지 않으므로 그 주위에 대괄호를 넣습니다. 이제 오류가 발생합니다 :

Error starting at line : 1 in command - 
GRANT EXECUTE ON SYS.UTL_HTTP TO [database] 
Error report - 
SQL Error: ORA-00987: missing or invalid username(s) 
00987. 00000 - "missing or invalid username(s)" 
*Cause:  
*Action: 

그래서이 문제를 해결할 방법을 모릅니다. 위의 링크에서 OP는 그가 다른 오류를 가지고 있다고 말했고, 그래서 나는 똑같은 문제가 없는지 또한 확인했다. 나는 다음과 같이 입력했다 :

SELECT * FROM dba_objects WHERE object_name='UTL_HTTP' 

그것은 4 개의 입구를 돌려 줬다. 소유자 : SYS, SYS, PUBLIC 및 APEX_040000.

누군가 나를 도울 수 있습니까? SYS와 어떤 암호로 로그온해야합니까?

답변

2
  1. SYS AS SYSDBA으로 로그온하십시오.
  2. 실행 grant execute on sys.utl_http to "Database";은 대괄호를 사용하지 마십시오!

그래야합니다.

조언 : DB 사용자 '데이터베이스'의 이름을 지정하지 마십시오.


은 SYS 암호 관리자로

  1. 실행 cmd.exe를 재설정합니다.
  2. cd : ${ORACLE_HOME}/database
  3. 거기에 PWDsomething.ora 파일을 찾으십시오 (something이 인스턴스 이름 임). 이름을 클립 보드로 복사하십시오.
  4. orapwd file=PWDsomething.ora password=SomePasswordOfMine force=y을 실행하십시오. 여기서 PWDsomething.ora은 3 단계의 파일 이름으로 바뀌고 SomePasswordOfMine은 원하는 모든 암호로 바꿔야합니다.

그럴 수도 있습니다.

+0

다른 이름으로 새 사용자를 만들었습니다. 이제는 다음을 사용하여 권한 부여를 시도했습니다. 'myuser에게 sys.utl_http 실행 권한 부여'; 내가 사용하고있는 사용자가 따옴표를 사용하지 않았기 때문입니다. 두 경우 모두 테이블 또는 뷰가 존재하지 않습니다. 내가 SYSDBA에 대한 암호를 찾지 못했기 때문에 여전히 SYSTEM에 있습니다. 내가 설정 한 적이 없으며 암호를 다시 얻을 수있는 방법을 알고 있습니까? – Politiepet

+0

@ 폴리 티에 페트, 답변이 수정되었습니다. 시도해보십시오. SYS 암호를 재설정 할 필요가 없었으므로이 암호가 작동하는지 모릅니다. – nop77svk

+0

이미 수정했습니다. 문제는 SYS에 로그인 할 수 없다는 것이 아닙니다. 올바른 암호가 SQL 개발자의 SYSDBA에서 작동하지 않았습니다. 그래서 내 SQL 서버 컴퓨터에 무슨 짓을 한거야 : cmd를 입력 'sqlplus/nolog'에서 'sys를 sysdba로 연결'보다, 암호는 주식 암호입니다. 여기에서 실행할 수 있습니다 '권한 부여 실행 sys.utl_http "데이터베이스";' 이 방법으로 작동했습니다. – Politiepet

3

11g부터 특정 도메인에 액세스 할 수있는 사용자를 지정하는 액세스 제어 목록 ('ACL')을 만들어야하기 때문에 은 utl_http에 대한 실행 권한을 사용자에게 부여하는 것 이상으로 충분하지 않습니다! (허용 대답에 지정된대로 데이터베이스 사용자에게 UTL_HTTP에 실행 권한을 부여 후) 11g에서 작동해야이 같은

뭔가 : 여기

SQL> BEGIN 
    2 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl=>'mikesacl.xml', 
    3 description=>'access control list example', 
    4 principal=>'HR', 
    5 is_grant=>TRUE, 
    6 privilege=>'connect'); 
    7 commit; 
    8 end; 
    9/

PL/SQL procedure successfully completed. 


    SQL> begin 
     2 DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
     3 acl=>'mikesacl.xml',host=>'*'); 
     4 commit; 

     5 end; 
     6/

PL/SQL procedure successfully completed. 

은의 매개 변수를 설명하는 매우 유용한 링크입니다 위의 두 가지 기능 :

http://www.oracleflash.com/36/Oracle-11g-Access-Control-List-for-External-Network-Services.html

행운을 빕니다!