常见问题

常见问题解答:是否可以移除公众对 Oracle 包的执行权限?

Last Published: April 25, 2020

答案

可以,在 Oracle 中创建或升级地理数据库后,可以撤消 Oracle PUBLIC 角色对以下包的执行权限:

  • sys.dbms_lock
  • sys.dbms_pipe
  • sys.dbms_lob
  • sys.dbms_sql
  • sys.dbms_utility
  • sys.utl_raw

如果撤消该权限,则 Oracle 管理员必须将所有这些包的执行权限显式授予 SDE 用户和 CTXSYS 用户(Oracle Text 组件所有者),以及使用 ArcGIS 连接到 Oracle 实例的每个用户。

要从撤消公众对包的权限,请在 SQL*Plus 中以 Oracle SYS 用户身份执行以下 SQL 语句:

SQL> REVOKE EXECUTE ON dbms_lock FROM public;

撤消成功。

SQL> REVOKE EXECUTE ON dbms_pipe FROM public;

撤消成功。

SQL> REVOKE EXECUTE ON dbms_lob FROM public;

撤消成功。

SQL> REVOKE EXECUTE ON dbms_sql FROM public;

撤消成功。

SQL> REVOKE EXECUTE ON dbms_utility FROM public;

撤消成功。

SQL> REVOKE EXECUTE ON utl_raw FROM public;

撤消成功。

撤消公共角色的权限后,SYS 用户必须将包的执行权限授予 SDE 用户和 CTXSYS 用户。

SQL> GRANT EXECUTE ON dbms_lock TO sde;

授予成功。

SQL> GRANT EXECUTE ON dbms_pipe TO sde;

授予成功。

SQL> GRANT EXECUTE ON dbms_lob TO sde;

授予成功。

SQL> GRANT EXECUTE ON dbms_sql TO sde;

授予成功。

SQL> GRANT EXECUTE ON dbms_utility TO sde;

授予成功。

SQL> GRANT EXECUTE ON utl_raw TO sde;

授予成功。

SQL> GRANT EXECUTE ON dbms_lock TO ctxsys; 

授予成功。 

SQL> GRANT EXECUTE ON dbms_pipe TO ctxsys; 

授予成功。 

SQL> GRANT EXECUTE ON dbms_lob TO ctxsys; 

授予成功。 

SQL> GRANT EXECUTE ON dbms_sql TO ctxsys; 

授予成功。 

SQL> GRANT EXECUTE ON dbms_utility TO ctxsys; 

授予成功。 

SQL> GRANT EXECUTE ON utl_raw TO ctxsys; 

授予成功。

如果 SDE 用户没有执行 sys.dbms_pipe 包的显式权限,则尝试启动 ArcSDE 服务会失败,以下错误消息会写入 ArcSDE 错误日志:

错误:
SQL Stmt: 

必须直接为 SDE DBA 用户授予所需的 Oracle 内置包 DBMS_PIPE 执行权限,而不仅仅是授予他们具有执行访问权限的角色。

对于使用 ArcSDE 应用程序服务器或直接连接连接到地理数据库的个人用户,SYS 用户必须显式授予用户对包的权限。 同样,使用 SQL*Plus,以 SYS 用户身份连接,并向所需用户授予每个包的执行权限。

SQL> GRANT EXECUTE ON dbms_lock TO tom;

授予成功。

SQL> GRANT execute ON dbms_pipe TO tom;

授予成功。

SQL> GRANT EXECUTE ON dbms_lob TO tom;

授予成功。
SQL> GRANT EXECUTE ON dbms_sql TO tom;

授予成功。
SQL> GRANT EXECUTE ON dbms_utility TO tom;

授予成功。
SQL> GRANT EXECUTE ON utl_raw TO tom;

授予成功。

对连接到地理数据库的每个用户重复这些命令。

注:
不支持将这些包的执行权限授予数据库角色,然后将该角色授予用户。 由于 SDE 本身具有依赖于这些 Oracle 包的包,因此在执行 Oracle 存储的过程或包时,通过角色授予的权限不适用。 有关其他详细信息,请参阅 Oracle 文档。

向每个用户授予包的执行权限后,请重新编译 SDE 和 CTXSYS 对象。 在 SQL*Plus 中以 SYS 用户身份连接并编译 SDE 和 CTXSYS 方案。

SQL> EXEC dbms_utility.compile_schema( 'SDE' );

PL/SQL 步骤成功完成。

SQL> EXEC dbms_utility.compile_schema( 'CTXSYS' );

PL/SQL 步骤成功完成。

文章 ID:000010238

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

发现关于本主题的更多内容