`

从public回收SELECT ANY TABLE权限(或其他类似权限)将导致数据库中所有的procedure、function和package失效。

阅读更多
从public回收SELECT ANY TABLE权限(或其他类似权限)将导致数据库中所有的procedure、function和package失效。

这时登陆数据库会报错:ORA-06553: PLS-213: STANDARD 包不可访问。

下面用一个例子说明怎么会产生这种情况,以及如何解决,感谢biti给出的思路--使用utlrp.sql脚本编译失效包。

当然从备份中恢复是最稳妥的方法,下面的方法只是没有备份,或无法停机的方法。另外还可以执行catalog.sql和catproc.sql重建数据字典,不过操作风险相对较大。
SQL> CONN YANGTK/YANGTK@TEST
已连接。
SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS = 'INVALID';

未选定行

SQL> GRANT SELECT ANY TABLE TO PUBLIC;

授权成功。

SQL> REVOKE SELECT ANY TABLE TO PUBLIC;
REVOKE SELECT ANY TABLE TO PUBLIC
                        *
ERROR 位于第 1 行:
ORA-00905: 缺少关键字


SQL> REVOKE SELECT ANY TABLE FROM PUBLIC;

撤销成功。

SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS = 'INVALID';

OBJECT_NAME
------------------------------------------------------------------
CLIENT_IP_ADDRESS
DATABASE_NAME
DBMSOBJG
DBMSOBJG2
DBMSOBJGWRAPPER
DBMSOBJG_DP
DBMSZEXP_SYSPKGGRNT
DBMS_ALERT
DBMS_APPCTX
DBMS_APPLICATION_INFO
DBMS_APPLY_ADM
DBMS_APPLY_ADM_INTERNAL
DBMS_APPLY_ERROR
DBMS_APPLY_PROCESS
DBMS_AQ
DBMS_AQADM
DBMS_AQADM_SYS
DBMS_AQADM_SYSCALLS
DBMS_AQELM
DBMS_AQIN
DBMS_AQJMS
DBMS_AQJMS_INTERNAL
DBMS_AQ_EXP_HISTORY_TABLES
DBMS_AQ_EXP_INDEX_TABLES
DBMS_AQ_EXP_QUEUES
DBMS_AQ_EXP_QUEUE_TABLES
DBMS_AQ_EXP_SIGNATURE_TABLES
DBMS_AQ_EXP_SUBSCRIBER_TABLES
DBMS_AQ_EXP_TIMEMGR_TABLES
DBMS_AQ_EXP_ZECURITY
DBMS_AQ_IMPORT_INTERNAL
DBMS_AQ_IMP_INTERNAL
DBMS_AQ_IMP_ZECURITY
DBMS_AQ_SYS_EXP_ACTIONS
DBMS_AQ_SYS_EXP_INTERNAL
DBMS_AQ_SYS_IMP_INTERNAL
DBMS_ASYNCRPC_PUSH
DBMS_AW
DBMS_AW_EXP
DBMS_BACKUP_RESTORE
DBMS_CAPTURE_ADM
DBMS_CAPTURE_ADM_INTERNAL
DBMS_CAPTURE_PROCESS
DBMS_CDC_PUBLISH
DBMS_CDC_SUBSCRIBE
DBMS_CDC_UTILITY
DBMS_CRYPTO_TOOLKIT
DBMS_CRYPTO_TOOLKIT_FFI
DBMS_CRYPTO_TOOLKIT_TYPES
DBMS_DDL
DBMS_DDL_INTERNAL
DBMS_DEBUG
DBMS_DEBUG_JDWP
DBMS_DEBUG_JDWP_CUSTOM
DBMS_DEFER
DBMS_DEFERGEN
DBMS_DEFERGEN_AUDIT
DBMS_DEFERGEN_INTERNAL
DBMS_DEFERGEN_LOB
DBMS_DEFERGEN_PRIORITY
DBMS_DEFERGEN_RESOLUTION
DBMS_DEFERGEN_UTIL
DBMS_DEFERGEN_WRAP
DBMS_DEFER_ENQ_UTL
DBMS_DEFER_IMPORT_INTERNAL
DBMS_DEFER_INTERNAL_QUERY
DBMS_DEFER_INTERNAL_SYS
DBMS_DEFER_QUERY
DBMS_DEFER_QUERY_UTL
DBMS_DEFER_REPCAT
DBMS_DEFER_SYS
DBMS_DEFER_SYS_PART1
DBMS_DESCRIBE
DBMS_DISTRIBUTED_TRUST_ADMIN
DBMS_DRS
DBMS_EPGC
DBMS_EXPORT_EXTENSION
DBMS_EXTENDED_TTS_CHECKS
DBMS_FGA
DBMS_FLASHBACK
DBMS_HS
DBMS_HS_ALT
DBMS_HS_CHK
DBMS_HS_UTL
DBMS_IAS_CONFIGURE
DBMS_IAS_INST
DBMS_IAS_INST_UTL
DBMS_IAS_INST_UTL_EXP
DBMS_IAS_MT_INST
DBMS_IAS_MT_INST_INTERNAL
DBMS_IAS_QUERY
DBMS_IAS_SESSION
DBMS_IAS_TEMPLATE
DBMS_IAS_TEMPLATE_INTERNAL
DBMS_IAS_TEMPLATE_UTL
DBMS_IJOB
DBMS_INTERNAL_LOGSTDBY
DBMS_INTERNAL_REPCAT
DBMS_INTERNAL_TRIGGER
DBMS_IREFRESH
DBMS_ISNAPSHOT
DBMS_ITRIGGER_UTL
DBMS_JAVA_TEST
DBMS_JOB
DBMS_LCR
DBMS_LOB
DBMS_LOCK
DBMS_LOGMNR
DBMS_LOGMNR_D
DBMS_LOGMNR_FFVTOLOGMNRT
DBMS_LOGMNR_INTERNAL
DBMS_LOGMNR_LOGREP_DICT
DBMS_LOGMNR_OCTOLOGMNRT
DBMS_LOGMNR_SESSION
DBMS_LOGREP_DEF_PROC
DBMS_LOGREP_DEF_PROC_UTL
DBMS_LOGREP_EXP
DBMS_LOGREP_IMP
DBMS_LOGREP_IMP_INTERNAL
DBMS_LOGREP_UTIL
DBMS_LOGSTDBY
DBMS_MAINT_GEN
DBMS_METADATA
DBMS_METADATA_INT
DBMS_METADATA_UTIL
DBMS_OBFUSCATION_TOOLKIT
DBMS_OBFUSCATION_TOOLKIT_FFI
DBMS_ODCI
DBMS_OFFLINE_INTERNAL
DBMS_OFFLINE_OG
DBMS_OFFLINE_RGT
DBMS_OFFLINE_SNAPSHOT
DBMS_OFFLINE_UTL
DBMS_OUTPUT
DBMS_PCLXUTIL
DBMS_PICKLER
DBMS_PIPE
DBMS_PITR
DBMS_PLUGTS
DBMS_PLUGTSP
DBMS_PROPAGATION_ADM
DBMS_PRVTAQIM
DBMS_PRVTAQIP
DBMS_PRVTAQIS
DBMS_PRVTRMIE
DBMS_PSP
DBMS_PSWMG_IMPORT
DBMS_RANDOM
DBMS_RCVMAN
DBMS_RECTIFIER_DIFF
DBMS_RECTIFIER_FRIENDS
DBMS_REDEFINITION
DBMS_REFRESH
DBMS_REFRESH_EXP_LWM
DBMS_REFRESH_EXP_SITES
DBMS_REGISTRY
DBMS_REGISTRY_SYS
DBMS_REPAIR
DBMS_REPCAT
DBMS_REPCAT_ADD_MASTER
DBMS_REPCAT_ADMIN
DBMS_REPCAT_AUTH
DBMS_REPCAT_CACHE
DBMS_REPCAT_COMMON_UTL
DBMS_REPCAT_CONF
DBMS_REPCAT_DECL
DBMS_REPCAT_FLA
DBMS_REPCAT_FLA_MAS
DBMS_REPCAT_FLA_UTL
DBMS_REPCAT_INSTANTIATE
DBMS_REPCAT_INTERNAL
DBMS_REPCAT_INTERNAL_PACKAGE
DBMS_REPCAT_MAS
DBMS_REPCAT_MIG
DBMS_REPCAT_MIG_INTERNAL
DBMS_REPCAT_OBJ_UTL
DBMS_REPCAT_OUTPUT
DBMS_REPCAT_RGT
DBMS_REPCAT_RGT_ALT
DBMS_REPCAT_RGT_CHK
DBMS_REPCAT_RGT_CUST
DBMS_REPCAT_RGT_CUST2
DBMS_REPCAT_RGT_EXP
DBMS_REPCAT_RGT_UTL
DBMS_REPCAT_RPC
DBMS_REPCAT_RPC_UTL
DBMS_REPCAT_RQ
DBMS_REPCAT_SNA
DBMS_REPCAT_SNA_UTL
DBMS_REPCAT_SQL_UTL
DBMS_REPCAT_UNTRUSTED
DBMS_REPCAT_UTL
DBMS_REPCAT_UTL2
DBMS_REPCAT_UTL3
DBMS_REPCAT_UTL4
DBMS_REPCAT_VALIDATE
DBMS_REPUTIL
DBMS_REPUTIL2
DBMS_RESOURCE_MANAGER
DBMS_RESOURCE_MANAGER_PRIVS
DBMS_RESUMABLE
DBMS_RLS
DBMS_RMGR_GROUP_EXPORT
DBMS_RMGR_PACT_EXPORT
DBMS_RMGR_PLAN_EXPORT
DBMS_RMIN
DBMS_ROWID
DBMS_RULE
DBMS_RULEADM_INTERNAL
DBMS_RULE_ADM
DBMS_RULE_COMPATIBLE_90
DBMS_RULE_EXIMP
DBMS_RULE_EXP_EC_INTERNAL
DBMS_RULE_EXP_EV_CTXS
DBMS_RULE_EXP_RL_INTERNAL
DBMS_RULE_EXP_RS_INTERNAL
DBMS_RULE_EXP_RULES
DBMS_RULE_EXP_RULE_SETS
DBMS_RULE_EXP_UTL
DBMS_RULE_IMP_OBJ
DBMS_SESSION
DBMS_SNAPSHOT
DBMS_SNAPSHOT_UTL
DBMS_SNAP_INTERNAL
DBMS_SNAP_REPAPI
DBMS_SPACE
DBMS_SPACE_ADMIN
DBMS_SQL
DBMS_SQLJTYPE
DBMS_STANDARD
DBMS_STATS
DBMS_STATS_INTERNAL
DBMS_STORAGE_MAP
DBMS_STREAMS
DBMS_STREAMS_ADM
DBMS_STREAMS_ADM_UTL
DBMS_SUMADV
DBMS_SUMADVISOR
DBMS_SUMMARY
DBMS_SUMREF_UTIL
DBMS_SUMVDM
DBMS_SYSTEM
DBMS_SYS_ERROR
DBMS_SYS_SQL
DBMS_TRACE
DBMS_TRANSACTION
DBMS_TRANSACTION_INTERNAL_SYS
DBMS_TRANSFORM
DBMS_TRANSFORM_EXIMP
DBMS_TTS
DBMS_TYPES
DBMS_TYPE_UTILITY
DBMS_UTILITY
DBMS_XMLGEN
DBMS_XPLAN
DBMS_XRWMV
DBMS_ZHELP
DBMS_ZHELP_IR
DES_ENCRYPTED_PASSWORD
DIANA
DICTIONARY_OBJ_NAME
DICTIONARY_OBJ_NAME_LIST
DICTIONARY_OBJ_OWNER
DICTIONARY_OBJ_OWNER_LIST
DICTIONARY_OBJ_TYPE
DIUTIL
GETTVOID
GRANTEE
HTF
HTP
INSTANCE_NUM
IS_ALTER_COLUMN
IS_CREATING_NESTED_TABLE
IS_DROP_COLUMN
IS_SERVERERROR
LOGIN_USER
LOGMNR_CREATE_REPLACE_METADATA
LOGMNR_DICT_CACHE
LOGMNR_DPC
LOGMNR_GTLO3
LOGMNR_KRVRDA_TEST_APPLY
LOGMNR_KRVRDLUID3
LOGMNR_KRVRDREPDICT3
LOGOFF_PROC
LOGON_PROC
LT
LTADM
LTAQ
LTDDL
LTDTRG
LTPRIV
LTRIC
LTUTIL
LT_CTX_PKG
LT_EXPORT_PKG
LT_REPLN
NO_VM_CREATE
NO_VM_CREATE_PROC
NO_VM_DROP
NO_VM_DROP_PROC
ODCICOLINFODUMP
ODCICONST
ODCIENVDUMP
ODCIINDEXALTEROPTIONDUMP
ODCIINDEXCALLPROPERTYDUMP
ODCIINDEXINFODUMP
ODCIINDEXINFOFLAGSDUMP
ODCIPREDINFODUMP
ODCIQUERYINFODUMP
ODCISTATSOPTIONSDUMP
OEMGETNEXTEXTEND
OLAP_TABLE
OUTLN_EDIT_PKG
OUTLN_PKG
OWA
OWA_CACHE
OWA_COOKIE
OWA_CUSTOM
OWA_IMAGE
OWA_OPT_LOCK
OWA_PATTERN
OWA_SEC
OWA_TEXT
OWA_UTIL
OWM_DDL_PKG
OWM_MIG_PKG
OWM_REPUTIL
PARTITION_POS
PBREAK
PBRPH
PBSDE
PBUTL
PIDL
PLITBLM
PRIVILEGE_LIST
PRVT_EGUTL
PRVT_EPGC
PSTUB
PSTUBT
REVOKEE
SERVER_ERROR
SERVER_ERROR_DEPTH
SERVER_ERROR_MSG
SERVER_ERROR_NUM_PARAMS
SERVER_ERROR_PARAM
SPACE_ERROR_INFO
SQL_TXT
STANDARD
STREAMS$_EVALUATION_CONTEXT
SUBPTXT
SUBPTXT2
SYSEVENT
SYS_IXMLAGG
SYS_LOGOFF
SYS_LOGON
SYS_STUB_FOR_PURITY_ANALYSIS
SYS_XMLAGG
UD_TRIGS
URIFACTORY
UTL_COLL
UTL_ENCODE
UTL_FILE
UTL_GDK
UTL_HTTP
UTL_INADDR
UTL_RAW
UTL_RECOMP
UTL_REF
UTL_SMTP
UTL_TCP
UTL_URL
UTL_XML
WITH_GRANT_OPTION
WM_DDL_UTIL
WM_ERROR
WPG_DOCLOAD
WPIUTL
XMLCONCAT
XMLSEQUENCEFROMREFCURSOR
XMLSEQUENCEFROMREFCURSOR2
XMLSEQUENCEFROMXMLTYPE
DBMS_REPCAT_AUTH
DEF$_PROPAGATOR_TRIG
ORA$_SYS_REP_AUTH
REPCATLOGTRIG
ORA$GRANT_SYS_SELECT
OWM_VALIDATE
ADD_JOB_HISTORY
COUNTRIES$RP
DEPARTMENTS$RP
EMPLOYEES$RP
JOBS$RP
JOB_HISTORY$RP
LOCATIONS$RP
REGIONS$RP
SECURE_DML
SECURE_EMPLOYEES
UPDATE_JOB_HISTORY

已选择398行。

SQL> CONN YANGTK/YANGTK@TEST
ERROR:
ORA-06553: PLS-213: STANDARD 包不可访问


访问程序包 DBMS_APPLICATION_INFO 时出错
已连接。
SQL> CONN /@TEST AS SYSDBA
已连接。
SQL> alter package standard compile;

程序包已变更。

SQL> alter package dbms_standard compile;

程序包已变更。

SQL> @%ORACLE_HOME%rdbmsadminutlrp.sql

PL/SQL 过程已成功完成。


表已创建。


表已创建。


表已创建。


索引已创建。


表已创建。


表已创建。


视图已建立。


视图已建立。


程序包已创建。

没有错误。

程序包主体已创建。

没有错误。

PL/SQL 过程已成功完成。


PL/SQL 过程已成功完成。

SQL> SELECT COUNT(*) FROM DBA_OBJECTS WHERE STATUS = 'INVALID';

  COUNT(*)
----------
         6

SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS = 'INVALID';

OBJECT_NAME
-------------------------------------------------------------------
ODCIARGDESC
ODCICOLINFO
ODCICOST
ODCIINDEXINFO
ODCIINDEXINFO
STREAMS$_EVALUATION_CONTEXT

已选择6行。

SQL> CONN YANGTK/YANGTK@TEST
已连接。
SQL>

至此,可以看到,原来失效的将近400个对象基本上都被重新编译通过,登陆时的错误也消失了。

需要注意的是,必须首先手工编译STANDARD包,然后编译DBMS_STANDARD包,utlrp脚本的正常运行的前提是这两个包正确。




yangtingkun 发表于:2004.11.16 19:26 ::分类: ( ORACLE ) ::阅读:(8494次) :: 评论 (15)







请问从哪儿获得rdbmsadminutlrp.sql, 在我的ORACLE_HOME及子目录中找不道该文件, 安装盘里也没有. 我用的是 Oracle 8.0.6.
谢谢!

xit 评论于: 2007.11.12 15:19  re: 从PUBLIC回收SELECT ANY TABLE权限 [回复]
这个包似乎是从8i才开始提供。
9以上的版本都有。
但是8肯定没有

yangtingkun 评论于: 2007.11.12 15:22  re: 从PUBLIC回收SELECT ANY TABLE权限 [回复]
多谢这么快的回复!那么最后一步在8里面用什么替代呢?或着您有相关的语句吗?

xit 评论于: 2007.11.12 15:44  re: 从PUBLIC回收SELECT ANY TABLE权限 [回复]
自己写过匿名块,对状态不正确的过程依次编译即可

yangtingkun 评论于: 2007.11.12 23:53  re: 从PUBLIC回收SELECT ANY TABLE权限 [回复]
需要考虑dependecy的,

yanggq 评论于: 2008.01.26 19:46  re: 从PUBLIC回收SELECT ANY TABLE权限 [回复]
不需要考虑DEPENDENCY,因为Oracle会对当前包所依赖的包进行级联编译

yangtingkun 评论于: 2008.01.26 23:29
来源:http://itlife365.com/?post=211
分享到:
评论

相关推荐

    Oracle 授权 ORA-00990: 权限缺失或无效

    在Oracle数据库管理中,"ORA-00990: 权限缺失或无效"是一个常见的错误代码,它表示用户尝试执行的操作没有足够的权限。这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中...

    Oracle公司内部数据库培训之控制用户权限.pptx

    Oracle数据库权限控制是确保数据库安全的关键环节,它涉及到对用户、角色和各种操作的精细化管理。在Oracle中,权限分为系统权限和对象权限两大类,分别对应对数据库整体操作的授权和对具体数据库对象(如表、视图、...

    oracle所有的系统权限

    89. **SELECT TABLE**:与“SELECT ANY TABLE”类似,但仅限于用户自己创建的表。 90. **SELECT VIEW**:使用户能够选择视图中的数据。 91. **UNLIMITED TABLESPACE**:使用户能够在指定的表空间中无限制地存储...

    GBase8s数据库权限 .docx

    创建数据库和表的人们经常将 Connect 和 Select 权限授予 public,以便所有用户都拥有它们。如果您可查询表,则您至少具有对那个数据库和表的 Connect 和 Select 权限。您需要其他的表级别权限来修改数据。 显示表...

    oracle数据库权限管理

    在Oracle环境中,权限控制是通过授权(GRANT)和回收(REVOKE)操作来实现的,以决定用户或角色可以访问哪些资源以及他们可以执行的操作。 首先,让我们详细了解一下Oracle中的权限类型: 1. **系统权限**:这些...

    Delphi procedure and function

    标题“Delphi procedure and function”指向了编程领域中的一个具体概念,即Delphi语言中两种重要的代码组织单元:过程(procedure)和函数(function)。Delphi是一种快速应用程序开发工具,它使用Object Pascal...

    oracle权限表

    - **CREATE ANY SNAPSHOT**:允许用户在任何模式中创建快照,通常需要具有`CREATE ANY TABLE`权限。 - **ALTER SNAPSHOT**:允许用户改变任何模式中的任何快照。 - **DROP ANY SNAPSHOT**:允许用户删除任何模式中的...

    oracle系统权限列表.pdf

    `SELECT ANY TABLE`、`INSERT ANY TABLE`、`UPDATE ANY TABLE`和`DELETE ANY TABLE`分别授予查询、插入、更新和删除任何表的权利。`LOCK ANY TABLE`用于锁定表以防止并发冲突,而`FLASHBACK ANY TABLE`则允许用户...

    讲述数据库权限相关的知识

    总之,数据库权限管理是数据库系统中不可或缺的一部分,它关乎数据的安全和系统的稳定运行。了解并熟练掌握权限设置和管理技巧,对于任何数据库管理员来说都是至关重要的。通过细致的规划和实施,可以构建一个既高效...

    Oracle公司内部数据库培训资料13_控制用户权限.pptx

    此外,`PUBLIC`关键字允许DBA将权限分配给数据库中的所有用户,如:`GRANT select ON alice.departments TO PUBLIC;` 为了监控权限的分配,Oracle提供了数据字典视图,如`ROLE_SYS_PRIVS`(角色的系统权限)、`ROLE...

    ORACLE学习之常用数据库系统表语句

    Oracle数据库中,系统表存储了数据库对象的元数据,例如表、视图、索引等,以及用户权限、统计信息等关键信息。掌握常用系统表语句对于数据库的管理和日常维护至关重要。接下来将详细介绍一些常用的Oracle系统表语句...

    数据库用户权限

    系统权限的授权、查看、传递和回收都是由具有DBA权限的用户进行的。 授权系统权限的命令通常是`GRANT`,例如:`GRANT connect, resource, dba TO 用户名 [,...]`。回收权限使用`REVOKE`命令,例如:`REVOKE dba, ...

    oracle系统权限列表.docx

    Oracle数据库系统权限是数据库管理员(DBA)管理和控制数据库访问的关键元素。权限的分配和管理对于确保数据安全性和合规性至关重要。在Oracle 10G版本中,有超过170种不同的系统权限,这些权限被分类为对象权限、...

    数据库原理之数据库权限管理PPT学习教案.pptx

    数据库权限管理的主要目标是保护数据库中的数据,防止未经授权的访问和操作。 一、用户和模式 在 Oracle 数据库中,用户和模式是一一对应的,一个模式只能被一个用户所拥有,并且名字必须与用户的名称相同。用户的...

    SQL Server的用户及权限

    数据库权限的授予使用`GRANT`语句,例如向zhang1在tele114数据库上授予创建表、视图和存储过程的权限,并对students表的select和reference权限,以及name和native字段的update权限,命令如下: ```sql use tele114 ...

    PGSQL统计一个数据库所有数据库空字段的函数

    ### PGSQL统计一个数据库所有数据库空字段的函数 在PostgreSQL(简称PGSQL)中,有时我们需要统计数据库中所有表的空字段数量。这在数据分析、数据清洗等场景下非常有用。下面详细介绍如何创建并使用一个自定义函数...

    三招教你搞定sql server数据库权限冲突

    在SQL Server数据库管理中,权限冲突是常见的问题之一,尤其当多个角色或用户对同一数据库对象有重叠或冲突的权限时。解决这类问题需要深入理解SQL Server的权限体系,并采取有效的策略。以下将详细解析如何通过三招...

    有关于java数据库方面的资料

    - 授予所有用户对SC表的查询权限: `GRANT SELECT ON TABLE SC TO PUBLIC;` - 授予用户U4对学生表(Student)的学号更新权限和查询权限: `GRANT UPDATE(Sno), SELECT ON Student TO U4;` - 授予用户U5对SC表的插入...

    oracle系统权限列表[定义].pdf

    7. CREATE PUBLIC SYNONYM:创建公共同义词,可供所有数据库用户使用。 8. CREATE TABLE:授权在自己的模式下创建新表。 9. ALTER ANY TABLE:允许修改任何表。 10. DROP ANY TABLE:允许删除任何表。 11. COMMENT ...

    oracle权限全集

    Oracle权限管理是数据库管理系统中的核心组成部分,用于控制不同用户对数据库资源的访问和操作。在Oracle中,权限的分配和管理对于确保数据安全性和维护系统稳定性至关重要。以下是一些主要的Oracle权限及其详细说明...

Global site tag (gtag.js) - Google Analytics