ITPub博客

首页 > 数据库 > Oracle > 存储过程与权限

存储过程与权限

原创 Oracle 作者:luisedalian 时间:2014-01-15 13:48:42 0 删除 编辑
在SQL中可以正常执行的语句,为什么在存储过程中却无法执行?

1.定义者权限存储过程role无效,必须要有显示的授权  AUTHID DEFINER

点击(此处)折叠或打开

  1. conn / AS SYSDBA;
  2. CREATE USER usera IDENTIFIED BY usera;
  3. CREATE USER luise IDENTIFIED BY luise;
  4. GRANT CONNECT, RESOURCE TO usera;
  5. GRANT CONNECT, RESOURCE, DBA TO luise;

  6. conn usera/usera;
  7. CREATE TABLE usera_tab AS SELECT * FROM all_objects;

  8. --luise用户因为具有DBA角色,可以执行usera方案下的表的删除操作
  9. conn luise/luise;
  10. DELETE FROM usera.usera_tab;

  11. --但在luise用户下创建存储过程,执行同样的删除操作,却不可以
  12. CREATE OR REPLACE PROCEDURE lusie_proc
  13. AS
  14. BEGIN
  15.   DELETE FROM usera.usera_tab;
  16.   COMMIT;
  17. END;
  18. /

  19. Warning: Procedure created with compilation errors.

  20. --查看错误
  21. luise@TESTDB11>show errors
  22. Errors for PROCEDURE LUSIE_PROC:

  23. LINE/COL ERROR
  24. -------- -----------------------------------------------------------------
  25. 4/3 PL/SQL: SQL Statement ignored
  26. 4/21 PL/SQL: ORA-00942: table or view does not exist

  27. --usera登录给luise直接授权
  28. conn usera/usera;
  29. GRANT ALL ON usera_tab TO luise;

  30. --再次登录,编译成功
  31. conn luise/luise
  32. CREATE OR REPLACE PROCEDURE lusie_proc
  33. AS
  34. BEGIN
  35.   DELETE FROM usera.usera_tab;
  36.   COMMIT;
  37. END;
  38. /

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1070896/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    6040856