QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2632|回复: 0
打印 上一主题 下一主题

获得数据库对象的方法探讨

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象; b; `: x9 o' G$ ~. n1 V% m
原作者姓名 Fang</FONT> </P>
9 B2 m5 S) v1 w) G) U$ f3 J<>SQL SERVER
' K3 @% g, j- h, @) H! \3 C取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
% ^$ q# Y  S+ Q. m7 n系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>; A* M% c1 A3 \5 h0 w' {  |
<>或者</P>
8 A1 d7 W0 _$ p% @<>USE master</P>7 T' ]% |0 k1 C! E$ Y
<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>' |" _# Q2 e6 j! `# V& U
<>, E& @9 j7 N8 V- X, q" l: e+ A
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
) r& B% d' e1 k; _$ o. ?! }, {<>取得表的方法) S8 d6 \1 ]8 t9 S( Z
系统存储过程</P>& a# H0 |: b2 }: ^& K9 q
<>USE xxx</P>
5 F7 E: q# Y  }( D/ J- V; w<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>/ e! u7 L# m# P0 g% ]
<>或者</P>) W) r- d  o1 J# ~! m5 m
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>- i3 K2 O9 p3 H7 f$ j4 t' z
<>USE DBAudit9 @, j3 j% s4 O2 i( n! d
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>6 }6 H. G% s4 j- j) p7 i# Z
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>/ \) ^* ?( _( U3 p
<>USE DBAudit
4 r+ `* n- V1 k. a7 @1 MSELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>2 S, I: k# g' }
<>或者统一使用:</P>
: v- P" d/ H, \. ^. V4 p9 X<>USE DBAudit</P>
' x! Z2 u* Q; W' ^<>SELECT sysobjects.name AS name, sysusers.name AS owner, type, sysobjects.id AS id FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U' OR type = 'S'</P>8 k7 k0 K3 ^  J- o
<>注:</P>
7 a" M5 U; q% ^. E- v+ c<>sysobjects中type字段类型解释:</P>
6 s! S4 I/ Y/ E8 I" K( G8 Z* P<>C = CHECK 约束</P>$ P# o8 }9 W% j1 S; n: l
<>D = 默认值或 DEFAULT 约束</P>" p- {% j* g7 d/ u* o9 b& [7 D( K
<>F = FOREIGN KEY 约束</P>
# q" G4 B& B4 u* e( w6 {$ F<>L = 日志</P>. j  w9 l0 r' d3 Z
<>FN = 标量函数</P>5 p/ z- c: \0 i" w3 n
<>IF = 内嵌表函数</P>
: m% Y1 A* U$ D, \6 k6 O' t<> = 存储过程</P>- t; @, @8 J/ k  J: x% R" r
<>K = PRIMARY KEY 约束(类型是 K)</P>+ Z' Z; F. u8 U. V, s' M
<>RF = 复制筛选存储过程</P>6 ~: O, V# v( s* W0 J( g1 D. z
<P>S = 系统表</P>7 J! l& b: y2 I. p. f
<P>TF = 表函数</P>
$ l9 j1 P8 ~! r6 b<P>TR = 触发器</P>  z3 a0 I8 N. Y8 A: I" e) t
<P>U = 用户表</P>
% u' x( F* c0 c) o+ B4 V6 _<P>UQ = UNIQUE 约束(类型是 K)</P>
, z/ S& k7 s& O: h<P>V = 视图</P>
0 B9 ^# i# `7 y4 F8 p+ C<P>X = 扩展存储过程</P>: o  {; w9 ~8 k
<P>取得列的方法9 o, P' g  M% [) H3 n& c
系统存储过程</P>
1 ^1 a5 F- K' u! K2 ?, e- U<P>USE xxxDatabase</P>
. L0 E' K9 e0 e; u<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>
& Q0 @3 @2 f$ h9 s3 V7 U<P>或者</P>9 d7 P6 p( i) {$ Z; U
<P>USE xxxDatabase</P>
( S* B$ J9 H! J8 m8 C/ v/ c# P<P>SELECT syscolumns.name AS name, systypes.name AS type FROM syscolumns LEFT JOIN systypes ON syscolumns.xtype = systypes.xtype WHERE syscolumns.id = xxxTableId</P>5 W8 h8 b. c) Y+ p+ x  H* `# {
<P>这两种方法都可以取得包括视图的列。</P>
- n1 e' S: l  }/ T: U% A<P>取得视图的方法
5 L" L2 N4 Z' Z$ c+ P' H系统存储过程</P>
! O- |0 ^4 ?5 ]<P>USE xxx</P>+ y; S3 e4 @5 H8 M: \; |
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
9 g5 C# `2 J6 D! ]0 t% r<P>或者</P>
! _3 o. k0 i0 J0 [<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>
" k0 X& T3 `7 ~* I- ~* D2 y( O<P>USE DBAudit</P>
% s( W8 m# K/ e) t/ J; ^2 R<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>
9 ?  C/ J, z3 v<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>; k4 j6 C9 M& D2 f9 {) @' ^- e
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>+ f9 h- d: c6 I- Y- B& S; d! f
<P>取得存储过程的方法) y: }0 A. a9 T' x4 \
系统存储过程</P>
( U: c4 W; L% I+ \0 e<P>USE xxx</P>/ e, P' I; _3 O3 q
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
' j9 F& d$ n1 k<P>或者</P>' W" P' X1 H8 ~
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>
3 G6 i* k) @* c9 v+ B: w<P>USE DBAudit</P>
) O' s2 E9 m3 ^4 ?% ~# p* I- K<P>SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'P' OR type = 'X'</P>
* y$ S1 x. z: y, o! D1 K/ F<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>( x3 r7 V2 V. I) ^4 u! E
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>* }0 \- g- Z- N) ]' Q; S1 m
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
+ B! k# l0 @/ p7 E' L1 e<P>取得函数的方法1 W* A/ @* z9 a* ^. X
系统存储过程</P>
4 E8 ^% f3 o! b<P>USE xxx</P>; h- F4 Z3 D( y
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>. O' j$ I3 s& i7 p
<P>或者</P>
6 H0 I& t1 E' g3 {+ K<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
6 |$ `5 M$ k8 }<P>USE DBAudit</P>
9 w# r' O0 g0 b; ?% Z<P>SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'FN' OR type = 'IF' OR type = ‘TF'</P>( i4 l6 i& P/ I% j) f+ b* W
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>
4 j5 i: e/ e) X<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>& l+ H7 C! U9 O
<P>只能获取用户定义的函数内容。</P>
7 M  E# B& d0 ?<P>取得触发器的方法2 C. u6 `: m0 {+ i. o2 l5 z
系统存储过程</P>$ ?  Z. b/ [1 b2 U( h# v7 i
<P>USE xxx</P>) w& C% q* d9 l. Z
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
8 l; Z- R" S$ Y: r) n* q7 Q) b<P>或者</P>
5 P4 a# o) M5 O  p' r2 [( ?<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>+ P, I8 O, j1 \1 A* G* J
<P>SELECT sysobj1.name AS name, sysusers.name AS owner FROM sysobjects AS sysobj1 LEFT JOIN sysobjects AS sysobj2 ON sysobj1.parent<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>obj = sysobj2.id LEFT JOIN sysusers ON sysobj1.uid = sysusers.uid WHERE sysobj1.type = 'TR'AND sysobj2.name = 'xxxTable'</P>, ^6 e6 Y7 Q, G
<P>取得索引的方法
+ X1 `, m# s( \4 Q* ]! A3 n% w系统存储过程</P>
3 _) t* |0 a% g9 t8 `0 u- I# m5 r<P>USE xxx</P>
8 b( X5 H7 w/ @( K9 h3 U<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>$ G6 W# q0 H; s4 w0 h
<P>用户
2 W+ v2 v+ \) D  K2 p8 d. ^, K系统存储过程</P>
( L, u" g. i' E! }$ K<P>USE xxx</P>' R& t/ U* b( H7 `, |
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>- p6 n/ b& a( ~6 Q( R7 j+ t
<P>角色
3 s4 O1 l% Z/ v* K系统存储过程</P>/ p" }- G6 ^, z. @' `3 `* @7 C
<P>USE xxx
9 J/ s" p5 V  Y- C. D1 @' NEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>
/ B6 s5 p! M; E- }) ~  n/ N6 f9 P; d* I3 W. [4 O6 X
<P>ORACLE
0 G! ~' |0 Q. w2 b5 {特殊
2 H, k8 b# S$ ?" N9 _2 f5 j4 |&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>! U% W/ B$ f6 T% H: }: y0 y
<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>8 T' h; x) v7 Q$ K7 U
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
  p+ }1 s- O/ ]0 ^8 v# {8 C<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法* B% f% o3 i/ U0 q' X8 T
只能由用户指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描到特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A><a href="http://vip.hackbase.com/" target="_blank" >服务</A>器上的所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>。</P>0 o; c0 D" n. q
<P>取得表的方法
' F1 ~: ]7 b, R$ c存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>
. Q/ {/ m8 a3 M$ Y. s4 _' e<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES</P>% S1 D4 X) i7 j
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>
5 Z, L2 t0 j2 z" D<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES</P>
+ w2 o) B5 x+ P+ {: U<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>: V# W8 |4 L7 J' ?3 T
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES</P>
$ e# Q( @. T% s<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
7 o* q" R# w0 L8 u( {& o<P>
- }: J  I8 ~( B9 d2 K: `% {DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
0 B2 E5 w' F$ h<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>; ^; S- O% h% P5 D
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>+ l2 p% W& x- Q: [
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>( Q6 B8 \  I2 `8 J% |3 c9 a
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>8 Z, G9 T" D3 n- l
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>* {% Y' O5 i7 G7 l% Z
<P>
0 \9 C3 N' l, s- W# i4 P- b因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>+ E. k* M" j) m8 @' x
<P>SELECT TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES WHERE OWNER = 'DBAUDIT';</P>
( y. K7 V3 @, ^) U3 x<P>取得隶属于指定表空间的表:</P>
9 r5 l: P& a5 O<P>SELECT TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES WHERE TABLESPACE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME = 'DBAUDIT';</P>
- p" l; {  X) I% V<P>
0 z% I* s2 K9 x/ K  P% x也可以不指定用户名,从而取得所有的表。</P>
/ z: G8 I9 h' V7 `; S<P>SELECT TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES;</P>
" }* P4 L7 G- x5 z<P>取得列的方法
. B3 T4 |( D/ D6 n" ?- u4 e存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>! u  W) m$ L  p$ j
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TAB<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>COLUMNS  `9 Q& _& ^: I6 c9 v$ \3 h* N0 R
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。
, X# \/ L9 W1 @  d6 b  xALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TAB<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>COLUMNS
6 y' N6 B; @& Q1 N  Y: X; U描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
' X+ h) r4 N# u/ Y# k& ^: u" xUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TAB<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>COLUMNS
" U& ]: A+ Z! o, a描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。9 A# n' f) Q7 R
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TAB<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>COLS</P>
0 S9 \: V. a: e3 w+ Y<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>3 c8 I# j( Y! W, L1 K( F2 s* g
<P>
3 ]9 J! N1 s: G3 L, g因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TAB<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>COLUMNS中取得隶属于指定用户的表:) e0 R2 e6 D6 M: U2 u- ]
SELECT COLUMN<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TAB<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>COLUMNS WHERE TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME = 'TASK' AND OWNER = 'DBAUDIT';</P># L/ O' F( x; ?; l* n
<P>取得视图的方法9 ^9 x8 k2 Q5 ]8 v3 r! Y
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
1 _% B* a1 ^# {, g<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
3 L5 G- Q3 \" u- a  q0 r, r描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。( \4 I5 \3 @2 N; x
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS6 P, ]; I0 i: l) D
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。6 \/ u1 S' f- E9 ]
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>, O' }0 U+ O& p$ u6 r" U8 T
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
# }4 N1 o7 g) {- X0 M<P>
! c0 A; z. U4 @/ S# c0 `3 e因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:
* p+ \0 B9 h3 @  }SELECT VIEW<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS WHERE OWNER = 'DBAUDIT';</P>4 w1 }; a1 X0 D6 V
<P>取得存储过程的方法
, |/ D9 r7 e1 }) y& t+ w/ C存储系统对象的系统表/视图有:</P>% b6 u; y% ], D/ l  D" B5 E5 `
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
. v  T3 H4 W2 H. P$ [% p( i<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>  N* [. l, o+ _
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS" f4 d- \# Z9 E" s6 R+ I6 G! r
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
6 ~/ M' [4 R, y) }, y- bUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>. R' V# v) q1 L& \5 t
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>& a- W) D  _/ I6 D
<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>* F% i, `) L$ |% V
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>
/ [- X4 C2 f3 R3 W& j<P>4 s6 Y" C0 q" _) c2 m
对象类型有:</P>
* F' {' ?0 I9 p, U& }<P>CONSUMER GROUP</P>
& H! J' n1 w* p5 U0 p+ [; {<P>CONTEXT</P>
' x" A2 `- j" |  u: t& k<P>DIRECTORY</P>
8 c% v* m! z. ^' x7 p<P>FUNCTION</P>
$ A+ Q( i/ d% q  p) T2 m<P>INDEX</P>. r. c: E3 @4 w8 v& X* Y2 g
<P>INDEX PARTITION</P>/ [9 t$ \/ _, z3 q
<P>INDEXTYPE</P>
9 Y: N% m' N3 n<P>JAVA CLASS</P>) Q9 _3 a0 j4 ^1 `( m5 Y1 E
<P>JAVA DATA</P>
. `+ f" a! i# @+ {/ W<P>JAVA RESOURCE</P>
& p1 Q1 Q( Z5 v/ |# q; h<P>JAVA SOURCE</P>
; h" y; D$ R- u<P>LIBRARY</P>* {- a% f' Q& q( m
<P>LOB</P>
* ]: m7 J; \' s6 C3 D, R8 X<P>MATERIALIZED VIEW</P>
3 Q7 i3 Q8 u+ A1 O) r& D<P>OPERATOR</P>
. Q' u& o7 K  e, Q8 {<P>PACKAGE</P>: \+ s. o; D* y' v3 T! I& [3 e
<P>PACKAGE BODY</P># |/ m3 u: J; _+ y  t4 F
<P>PROCEDURE</P>
7 P7 c' v; |& S1 o+ x, f: \<P>QUEUE</P>
, J; H# E' v9 Y6 l: U: X( ~<P>SEQUENCE</P>7 O6 H3 t& a2 I; K! u9 M& D) ?
<P>SYNONYM</P>
8 o0 c& y8 ~( {3 W, H<P>TABLE</P>9 f; P7 G6 f( |2 B# g1 ?
<P>TABLE PARTITION</P>" Y. w0 _+ O# ^3 v
<P>TRIGGER</P>
7 V3 Q: J2 ]4 b) Y<P>TYPE</P>
7 _1 p- o7 L; O% A4 p+ h0 E- S<P>TYPE BODY</P>% N' |! S( L7 K% ]+ `4 f5 s
<P>VIEW</P>
  x+ U! C8 Y/ O* L) l4 q, N<P>
3 f" X' }2 H1 _! q因此,取得存储过程可以用:</P>2 t- ?' e& Z. {4 ]
<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'PROCEDURE';</P>
+ ?& S0 O/ l+ K& U  F/ E# D  O<P>取得隶属于某个用户的存储过程可以用:</P>" N/ k! c) U( S% J3 T/ v# P
<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'PROCEDURE' AND OWNER = ‘DBAUDIT';</P>1 z( X. ^% A0 Y4 m1 {1 U% H8 x. T( c
<P>) A+ _" f8 v$ l4 H2 B
同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>
! O" z7 g" g* s- Y  s2 U9 ]<P>取得存储过程内容的方法
3 V" e# l; X3 k3 {. I2 g4 K对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>
$ j) l* O7 e) Y2 G' U<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
/ _# P, J: v6 T  m$ ~<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
" z/ D- f2 l, l  U8 A/ U/ A<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
( g$ ?# F, m. M) ^存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。( E% A( Q0 ?  o  x# a, ~9 H
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
# p: P  A. K* ?$ y6 M<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>! M5 ?8 y9 }* r/ ?9 |( z% }5 \
<P>0 f9 @  `! A0 I- p& q& c6 x
因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>& X/ A# Y* ^+ z! ^$ i
<P>SELECT TEXT FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE WHERE NAME = ‘XXX' AND TYPE = ‘PROCEDURE';</P># h- K8 Y2 |& d$ F! |4 t. k
<P>取得函数的方法( G% g& v# @% O# i9 w8 C3 O
同上,取得函数可以用:</P>& g" j) P. [, R! Q: t5 }; {
<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'FUNCTION';</P>' e) r8 P2 K" L: i( j) o6 z0 I
<P>取得隶属于某个用户的函数可以用:</P>6 s6 s1 E1 A$ @5 w0 E
<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'FUNCTION' AND OWNER = 'DBAUDIT';</P>6 c4 O& O( ?* J# U
<P>
$ d3 b: S/ n2 N* n2 U: f: B取得函数内容可以用:</P>
/ Y0 R: c& e5 c* f, a<P>SELECT TEXT FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE WHERE NAME = 'XXX' AND TYPE = 'FUNCTION';</P>3 d% f! f- ]/ L  E
<P>取得触发器的方法7 N+ a$ _- g$ v' A6 b
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>5 V' T2 A( S: K2 ^+ S
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS! t+ A7 `; V3 ?( m" q  X
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。
8 }8 o2 u  ^7 a* p8 gALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS' Y- y* ?: Q! @7 ^8 n, s) M
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。7 Z9 q7 w. ^5 v: p6 E$ E% L- k7 `
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>: k) ?- E, h4 |( }  h3 T3 w9 T
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>9 ?" E5 s% ?6 b
<P>. ~, F5 q1 O) H( [, }  N5 C- L% a" c8 Y
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:+ U/ I1 R7 r( Z; @  f0 t: [
SELECT TRIGGER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS WHERE OWNER = 'DBAUDIT';</P>. S; d, W+ o- p. v/ B" e) H
<P>. Z( M1 z1 t8 e% \4 X! z; q; E- }
取得触发器内容的方法:</P>
. ?1 ]) Y# m! w; I<P>SELECT TRIGGER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>BODY FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS WHERE TRIGGER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME = 'XXX';</P>
* h5 @: i$ O- B3 S<P>取得索引的方法
9 [2 `. j7 K& o1 p存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
% t% L1 }7 M9 l' ]2 O2 Q<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES
' h' d& f: {. M2 A5 ~+ j/ H描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
& P; K& W; }( F- h4 S9 KALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES/ j5 q1 ~* o9 I/ m3 m9 c
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。7 D' G: O% S4 {( j5 q' S
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
7 T) _  u  T* ~+ ]<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>" }; j; F9 q8 _7 b. q
<P>) e8 W$ n% P2 [
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:# e" C2 [7 D( D" h' L
SELECT INDEX<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME,TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES WHERE OWNER = 'DBAUDIT';</P>) D+ m( B* {' {: t3 E
<P># `, v. d, o4 d( g& B; |% v+ T/ L0 d0 e
取得索引相关的列的方法:</P>2 {; s. R" c0 P1 N+ \1 F8 v
<P>SELECT COLUMN<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>IND<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>COLUMNS WHERE INDEX<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME = 'XXX' AND TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OWNER = 'DBAUDIT';</P>8 W9 i. z6 h: x4 {9 ?5 p6 Z2 \
<P>用户% `  E3 h; ~! r/ S
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>
, r) j! E4 m0 @0 u<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS3 j" ~( H. V# W3 Q# p
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。' o! W3 n0 \% f' o& j- C7 ]5 s4 k
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
/ d9 J/ m& z/ Y& y描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。7 n. Q- u" w  _7 R
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>
6 f% M% j. t: a; d<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
: R" s" x) F- ^; B* [<P>
4 C, \4 Y$ S* t" o$ x0 o' _- W因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
) E- L: o; Z3 W$ @$ @7 aSELECT USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>ID, USERNAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS;</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-10 03:16 , Processed in 0.333549 second(s), 52 queries .

回顶部