`

从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
分享到:
评论

相关推荐

    关于数据库的权限设置深入剖析

    以下命令格式中Grant表示授予权限, Revoke表示撤消权限,User-List指用户名列表,多个用户以逗号分隔,对大多数数据库系统而言,PUBLIC代表所有用户。在数据库用户的管理中,我们可以根据用户对数据库数据的需要...

    数据库系统概论第5版课后答案第4章-数据库安全性(1).doc

    4) 审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,D BA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取 数据的人、时间和内容等。 5) 数据加密:对存储和...

    数据库系统概论第5版王珊萨师煊课后答案第4章-数据库安全性.doc

    4) 审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,D BA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取 数据的人、时间和内容等。 5) 数据加密:对存储和...

    数据库系统概论第5版课后答案第4章-数据库安全性.doc

    4) 审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,D BA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取 数据的人、时间和内容等。 5) 数据加密:对存储和...

    MS-sql 2005拒绝了对对象 ‘xxx’ (数据库 ‘xxx’,架构 ‘dbo’)的 SELECT 权限的解决方法

    问题:Sql server 2005 默认... 答案: 数据库(xxx) —>安全性—->架构—->dbo(属性)—>权限—>添加—>浏览–> [public]—->具有授予权限(select)  您可能感兴趣的文章:DELL DOSA 6.X 服务器引导光盘Dell Systems

    数据库实验报告 SQL语言的DCL (详细版 含有截图的)

    3.用REVOKE语句将DBA(数据库管理员)、DBO(建库用户)授与其它用户对数据库的操作权收回,语法格式如下: REVOKE <权限组>|ALL PRIVILEGES [ON <对象名>] FROM <用户组名>|PUBLIC 三、实验任务 1. 创建新的数据库...

    PHP权限管理系统源码

    实现了基本的权限管理,本系统是基于权限节点进行认证,可控制菜单显示隐藏,基于角色控制权限节点。 1、前端框架:layui2.5.6 2、后端框架:ThinkPHP5.1.39LTS 3、后端界面基于layuimini 权限管理系统安装教程: 1...

    如何在Java程序中访问mysql数据库中的数据并进行简单的操作

    在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文。 创建一个javaProject,并输入如下java代码: package ...

    Firebird数据库中文版

    使用PSQL(Procedure SQL),你可以创建强大的存储过程来处理服务上的所有数据,你可以使用select Stored Procedure的形式,使用存储过程,以得到一个虚拟的表结构的结果。这样的话,你就可以很容易的在报表中使用它。 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。  系统预定义角色 预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下面我们就简单介绍些系统角色:  CONNECT...

    SQL Server的用户及权限

    Sybase中的用户分为两种:SQL服务器用户和数据库用户。 安装完SQL服务器后,系统自动建立一个SQL服务器用户sa,口令为空,即系统管理员,他对整个系统有操作权,其他用户均由系统管理员建立。在SQL Server中有三种...

    VB通过配置文件System.ini连接数据库

    Public Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString ...

    Java数据库查询结果的输出

    Java数据库查询结果的输出 摘自:北京海脉信息咨询有限公司  利用Java开发数据库应用时,经常需要在用户界面上显示查询结果。我们可以利用Vector、JTable、AbstractTableModel等三个类较好地解决这一问题。 类...

    DB2数据库系统安全配置基线

    第3章 数据库权限 5 3.1 从PUBLIC撤销隐式的权限和特权 5 3.1.1 从PUBLIC撤销隐式的权限和特权 5 3.2 跟踪隐式的特权 6 3.2.1 跟踪隐式的特权 6 3.3 检查用户许可和特权 6 3.3.1 检查用户许可和特权* 6 第4章 DB2...

    关于java中package的设置

    package就是程序库单元,在一般的java程序中,我们使用关键字import导入整个程序库,例如: import java.util.*; 这时我们取用的便是所谓的package,这种写法会将java标准公用程序库(utility library,也就是java....

    jsp+struts权限管理

    jsp+struts权限管理源代码。 package sunyang.functions.action; import java.util.List; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import sunyang.functions...

    简单权限模块源码

    其功能同通达OA中的权限管理类似,一步到位满足跨机构、跨地域、多应用系统下的用户权限管理 框架说明: 一、PermSystem:项目的前台部分 ①. globalStyle:存放整个项目公用的一些样式文件、图片、脚本 ②. images:...

    用java代码来解析private、public、default、protected的权限问题

    用java代码来解析private、public、default、protected的权限问题

    Android Studio如何获取SQLite数据并显示到ListView上

    我们在使用ListView的时候需要和数据进行绑定,那么问题来了,如何获取SQLite数据库中的数据并动态的显示到ListView当中呢?其实过程很简单:首先要获取SQLite数据(当然首先你要创建一个SQLite数据库并填写了一些...

Global site tag (gtag.js) - Google Analytics