QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
9 o- I( M" p* |原作者姓名 Fang</FONT> </P>
9 T% I5 S3 o) d0 u2 ~# Q<>SQL SERVER4 B& |. z" ^* K6 c
取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
7 T0 `. h0 L/ x2 ~# ]系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>: D  G) Z+ b! S' z; _& W
<>或者</P>
' B$ h( F" q, l  R( f<>USE master</P>
  V6 S& `" @' @<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>
/ v% H& f4 |; N  \/ B6 r0 e<>
# ?: D/ x7 j- [sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
% \3 K3 g  o' U; `1 r<>取得表的方法
! l2 _0 o# d+ X6 y* B% ]! h系统存储过程</P>; q+ R- C& L; V) g0 k2 y
<>USE xxx</P>
8 s7 j; ?1 G. @9 D) T! V& X<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>9 W3 f, a2 e, A! W3 t
<>或者</P>
) r9 W, i1 M( G1 X/ m0 B$ ^1 U5 ]  K<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>8 N1 B1 N' n+ p4 H3 B3 H( e
<>USE DBAudit; i0 c. ?7 {3 `
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P># g' F! B  i. f3 w( e3 x9 S, q
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
" q) @0 p+ t3 o) K1 f, }- G<>USE DBAudit
6 z4 q% O0 j5 @' I+ Q/ ESELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
2 m  k# w! I2 v- c4 m5 i/ f4 r<>或者统一使用:</P>+ n- g- _  y; c5 K4 p
<>USE DBAudit</P>. m  K0 p  R9 v: Y8 r3 B
<>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>
" d& B( I9 i* h4 ^* H6 M<>注:</P>
! |. M) q& Q0 _6 u' R" |( v+ l8 o<>sysobjects中type字段类型解释:</P>; v6 i  V7 I& l( P
<>C = CHECK 约束</P>
. |' |$ N9 x, ^6 v1 i+ B<>D = 默认值或 DEFAULT 约束</P>
% y% m  ?* M. i; R<>F = FOREIGN KEY 约束</P>% Z: u& a) M8 y/ h2 [0 K: u- f% @" r
<>L = 日志</P>
7 q. q4 b8 j" q% E- Y<>FN = 标量函数</P>
3 V" c! J1 m4 @3 k- z5 u6 `<>IF = 内嵌表函数</P>% J5 O" K+ \5 ?" l1 e9 F) X
<> = 存储过程</P>
  `5 d4 u& M& K( l5 v<>K = PRIMARY KEY 约束(类型是 K)</P>
" Z$ t" w' A( G9 b9 G. @% @<>RF = 复制筛选存储过程</P>
. p, r6 x' w. ]) t) h<P>S = 系统表</P>
- s. c9 V$ P& ^2 y6 C<P>TF = 表函数</P>- `; k+ T/ U6 g
<P>TR = 触发器</P>* I# G. S' i3 z- C" X! K
<P>U = 用户表</P>
2 f: p; D0 E, N7 T9 R$ m- ]' U<P>UQ = UNIQUE 约束(类型是 K)</P>- p4 d- K5 h  }3 K5 q5 {$ Y4 K3 k
<P>V = 视图</P>1 @& a8 Y% \: c! p
<P>X = 扩展存储过程</P>8 W4 ?* `( ?8 [+ N5 n
<P>取得列的方法% A5 i/ x+ A7 \( ?5 [. X
系统存储过程</P>7 Q; Z0 W4 O, x
<P>USE xxxDatabase</P>) D+ r0 s6 u5 A
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>
8 D0 J6 M1 O' _  g3 H/ U<P>或者</P>
  z. y+ C. |2 u7 c  t  Z<P>USE xxxDatabase</P>
/ @7 f1 N2 O* k  \! }  o4 A<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>
% j' ^; v6 j, X% ?/ z<P>这两种方法都可以取得包括视图的列。</P>, k% q, D8 f( I
<P>取得视图的方法9 K( B# M8 y1 J/ E' a; Y* u
系统存储过程</P>
/ x, \. Y# E. {# }7 J5 d( Y<P>USE xxx</P>: ?$ a5 S0 K! m* N. Y
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
) o+ d& H9 h3 W4 `5 i9 y+ y<P>或者</P>
' _. n5 Q8 m( h! e/ S<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>
3 q- o" d; [- i7 a1 F7 M<P>USE DBAudit</P>
- a/ P$ a! m$ l<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>
1 ^1 ~- ~! ?  R8 W0 G6 A<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>
' Q+ a; O0 {- ?; H+ M# u/ [6 s<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
% m( C$ n  {# |+ h2 C<P>取得存储过程的方法  F- N, j! I9 T: W1 c
系统存储过程</P>+ I$ `2 l! y1 Q/ B+ V1 W
<P>USE xxx</P>6 w; J, [" T6 a" x) ^0 M* A+ Q
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
& G; Z  m! t% q. `! M; r) ?# O<P>或者</P>
, u& ^- c* o4 p. ~0 j. K<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>$ c: I: L! D0 C) Z$ d# |, Q! K
<P>USE DBAudit</P>
8 K; g7 e/ U* Z$ o+ i. {8 u<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>
( [4 C" P3 f& N' Y<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>0 \9 `7 @- y4 o: K0 P  c1 E7 i; g
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>: G4 B. N, A: S
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
+ J5 O0 B, E: s* R<P>取得函数的方法3 J1 g/ w! M3 j$ Q& X6 c* ]) g# X3 ^
系统存储过程</P># u- h7 i% v* C. m
<P>USE xxx</P>. O! k( ]. v& w0 Z
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>" T7 ~% t: E" X
<P>或者</P>' R! K4 P- C2 B; a1 {
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>! t1 Y6 i5 ?) d8 Y
<P>USE DBAudit</P>
3 r% n& H) U) n<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>
8 k! n3 ^/ W) |- s4 j. {<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>
+ {* {5 _  A, Z<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>8 ]1 ?& U0 j5 u& \1 I/ j6 j
<P>只能获取用户定义的函数内容。</P>% [0 a9 D4 w7 f" P  g# L1 k+ Q
<P>取得触发器的方法* U$ L4 b. d: ?/ d2 [. i; }
系统存储过程</P>
9 b/ @2 a4 `% `1 m<P>USE xxx</P>
' p( a7 V- H' |8 m<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>8 P0 _! q/ X7 _4 {
<P>或者</P>
9 j0 @& x- @+ q<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>
1 U  M* b' N2 S9 A5 ~<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>
* r3 v) y2 D2 G: N4 S7 x" ?<P>取得索引的方法) a, G5 j: K( K7 v* c% v3 o- m8 |
系统存储过程</P>/ C8 S$ `$ {9 \0 ]
<P>USE xxx</P>
$ K) p% A" l; r<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P># b) H) D4 h9 Z' l* R
<P>用户; l% _0 s6 w( L% d
系统存储过程</P>! v9 w$ b% {5 Z: ]
<P>USE xxx</P>; ~9 @  D" o8 M( z
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>+ B* V9 u- @/ h8 c1 ?3 V! w5 r
<P>角色
$ N- p# t! s, I9 M# R. A$ o3 J系统存储过程</P>2 u! H1 X( n9 d0 }" Z+ h8 i2 G
<P>USE xxx
% m, T  p7 ], [9 ~+ C: o! nEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>
' G/ Q9 t# e; X) w, h# n, C' y* i4 L- x/ C9 g2 Z6 ]
<P>ORACLE) J% S: z, J" J: f: z7 S  q2 U2 w7 J
特殊' u0 B1 ~/ Q5 ~' C7 c
&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>
: h/ _& q" g1 \6 ?1 T( a/ X2 y. `<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>& _- L0 B4 U. n( x4 f" B* N
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
8 E+ ]" J' N  L# u3 |" [# w' u<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法- V& i) Z7 I  h  {4 }3 n" D
只能由用户指定<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>
& R+ P" d9 J! U; w<P>取得表的方法
4 O3 B9 b6 R/ \' t6 Z7 k! {存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>
; g7 Z! Z# o7 s" _: D: @& c, H$ l<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>/ \; R$ ?. E+ a
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>8 F% P  B% A9 K' \4 B
<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>
1 F7 {5 B5 T2 A4 Q, J: D. g+ j: _<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>
" q) S" W0 _  e0 j  F3 F% ^0 h<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>
( Y* Z, w# i5 m1 I1 t- Q  I<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
" y, h1 S* R+ W- R: x<P>4 \0 E' D0 P0 s4 m5 O
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>* l/ Y$ D/ U- F; U) H
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
- Q/ O  {. E4 O9 p$ M% x<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
+ b9 b0 B0 w3 X3 S1 [- I/ r<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>5 B& J0 p( E8 r. J7 d
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
2 L( k! s: M( V! }! Q<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>, F; q5 @4 u! K$ \: H! U& s, t
<P>
) i5 n6 |. Y5 N- w4 A因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>
; }5 d" Z' L- Y+ A/ j5 c<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>
8 r6 Q7 ?; `- y1 Z+ I( C<P>取得隶属于指定表空间的表:</P>
( o* p' C7 h. \& p' y1 h, j<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>
, A8 ~3 T. a5 Q, m( ~: u' D<P>$ J3 K9 k* i# f) T' x  }
也可以不指定用户名,从而取得所有的表。</P>
! p! q& k# R+ C. b9 E/ |  Z<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>* `* s0 n% k% @. t; q4 I' z
<P>取得列的方法
5 X" n4 H+ t; w: F$ X$ a存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>
, |! d4 a* _# O, d: t# u' s5 R<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
# r* g; K8 ]$ G! t描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。8 f6 _6 _  p4 ~% m- b% C5 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>COLUMNS
8 U  H  W& C0 ]6 ]8 H" h" w7 w; W描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。3 ]$ n0 \& M" D6 g2 i/ J# m
USER<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/ L! s" l! f8 s7 L" W+ a
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
  ?9 b( d5 C% a0 o+ tALL<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>
1 r6 j( J* Z9 D, G# a# p% `<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>5 l7 Q& O+ u5 h+ w# \9 G9 b
<P>8 [$ v2 P$ |' c+ Z- v! I
因此,可以从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中取得隶属于指定用户的表:& A! Q7 A* [+ _+ \
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>7 ]7 V  p) A+ d, l% F1 o9 U
<P>取得视图的方法3 S( c7 K# U" [0 l+ i
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
: |. K" u( g* |<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
' h) x4 C6 {# G  ], _* ?3 n: F描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。
6 e+ S" c4 N: h0 R5 ?/ ^ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
9 H9 H( I9 `$ o& a描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
* A3 f, x# l6 vUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>$ m( d3 R% x/ v! F) S
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
9 S) N" m8 _5 ?3 i2 u! {<P>+ M2 z0 m  L# x. S9 _' ~: B* A
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:$ t2 S9 {: [# S3 p6 u6 j; C
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 c4 D$ c/ }& F0 D5 l/ P8 W/ z
<P>取得存储过程的方法% B/ Q: `: _* f8 ?/ c6 g
存储系统对象的系统表/视图有:</P>
' K) z% {, o( }8 V' O<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
" d# X, Z$ `! Q3 G* `! Q$ K! C/ l  P<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>9 V# E; i% h& m1 L0 j
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS
3 Q0 K/ X7 L2 n; d3 t描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
) A) `8 c4 `, qUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
2 q2 {; V# V& X( @<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>
7 Z/ g/ v; I; t- Q<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>, ?# o6 G* y! @+ v
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>7 {# w9 u5 O7 G' [$ w9 F  J* |
<P>
; V1 A$ G' A+ P' f7 f对象类型有:</P>0 g: u* n) [/ G# |: B4 \
<P>CONSUMER GROUP</P>
1 q% Q5 m0 Q$ V<P>CONTEXT</P>
* R- Z* ~% Y6 s! ]! d! E0 K& C* p: Q<P>DIRECTORY</P>, a. d# b$ T- s# D$ D
<P>FUNCTION</P>
( ]: D* v0 U/ k% H<P>INDEX</P>
. t/ n, u+ {7 B5 M4 y<P>INDEX PARTITION</P>' T% d1 }4 H: x& ^- q
<P>INDEXTYPE</P>
* v7 _. q. N( f<P>JAVA CLASS</P>
6 B9 c& c' U' w3 `7 q<P>JAVA DATA</P>. M! [" P% m. F
<P>JAVA RESOURCE</P>/ B8 F7 O, v+ O- g" j
<P>JAVA SOURCE</P>6 \$ z5 E/ T6 @
<P>LIBRARY</P>0 }* F* M4 J$ T8 H) I: ?! n. e9 s9 z
<P>LOB</P>
% l$ ?+ G/ l1 `' w+ i- _9 k<P>MATERIALIZED VIEW</P>$ M/ A" p: h0 i6 W
<P>OPERATOR</P>% V4 y3 _$ E! L5 K+ L: b$ y
<P>PACKAGE</P>
# ]' P( ~# y& V8 u' x% D<P>PACKAGE BODY</P>6 l' i& j$ {. m
<P>PROCEDURE</P>
* }, f7 C; H4 W  A<P>QUEUE</P>
1 R2 S0 m$ x' e. c0 N! B<P>SEQUENCE</P>9 O) w  I4 Z$ x* r$ m, _3 _% x
<P>SYNONYM</P>0 B) u% J# T- p3 @. h1 ?- E, C" l
<P>TABLE</P>8 u% v) R8 \, Y3 C! s& p* [% X
<P>TABLE PARTITION</P>
; i% a. ~! O' e<P>TRIGGER</P>; r9 S& ?* Q0 _2 Z
<P>TYPE</P>
) W$ @2 [1 t3 j. M<P>TYPE BODY</P>
' [# Z% f, I$ O/ C' j- O2 }<P>VIEW</P>
; {+ y* s8 _4 u) L0 v, j$ N<P>
) J- Z. i& ?' _因此,取得存储过程可以用:</P>
) B$ h6 o9 a: X- l  \" F2 K) {<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>( a1 \3 B( d3 S, J
<P>取得隶属于某个用户的存储过程可以用:</P>! d/ q$ A5 N$ }7 d- E6 O2 C
<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>7 t9 F2 e0 @* C8 S. \) U( q
<P>
$ p3 J" M; t) r+ K. G$ p同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>2 Q! {$ Y! ?3 v
<P>取得存储过程内容的方法5 \6 K: n, K8 O5 R. s- p: q
对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>
/ u9 p7 @6 Q) _; K  u0 D<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
( N) M( s- o/ Z7 k2 X0 M<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
9 ^+ E! x* P2 n1 J<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
% n3 c3 d, d/ i) ~存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。
# i! S9 [1 h/ H3 \7 `. T0 OUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>, V+ N3 |: [. k- M& d
<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
# S; d" p3 A- H. ^" r" m% D<P>9 R. n3 ^  p* n6 Z
因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>6 p$ b2 ]7 F: _
<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>' Z. G' w" A0 n- ], D, x
<P>取得函数的方法1 P. a' j3 q5 o0 P$ t
同上,取得函数可以用:</P>8 F& `6 e2 D* G
<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>
3 W# V( z4 G% ~7 G! c$ x<P>取得隶属于某个用户的函数可以用:</P>0 q5 `' {/ f, h
<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>; P% J" ~8 U  u- m' r7 Q
<P>/ {, ^  k1 \+ H2 R- D
取得函数内容可以用:</P>" J8 {0 G# w/ u. n5 T- V' Z8 e
<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>
0 Z% h/ Q, `- M; K! ?) q<P>取得触发器的方法1 a) k5 f1 {7 R
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>6 E: u! _  h' I+ p1 F6 ^; s5 D9 _
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS
3 E8 ?% C4 _/ a; G. b2 P描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。3 k5 q" a$ H; o
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS3 H& x) `9 `5 v1 v/ O
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。
- z7 g  ~. N: e0 g) K+ d' c7 rUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>( H: x- x$ M( k, [
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>
+ b& x: T9 K7 a/ {8 F5 p<P>
/ L5 A% v$ J( w9 ]$ c0 [因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:& Z/ Q( K3 V8 v8 n* Z
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># U' A3 J" ]* V8 }. O+ J
<P>+ o" V1 F* r7 E+ ?% c
取得触发器内容的方法:</P>
2 ]6 B1 b* m0 y, \6 {<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>
1 T! E$ v/ n- [+ L<P>取得索引的方法# |- r3 |/ r- P# S, S) m
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
) J5 J. m" k# E<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES# |' a' K6 g9 H8 ^% L. `
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
- v% l% ~- f- K+ l. |  TALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES0 F; c4 J0 z. A
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。! C3 ^$ l9 k* s! }4 \2 B' }; s' F
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>  i+ ~/ s, C5 B
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>' H0 ~  x) z& `3 O
<P>
9 o4 G" c5 W! s3 n0 ]. Y0 I$ x) l因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:& d. B% c/ j& E: i0 P. B6 E' k" U" ^
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>
4 G6 p0 z4 R6 h<P>$ a0 q" t6 g3 Y9 T2 ?
取得索引相关的列的方法:</P>
" ~: B' C; [5 M9 N) q<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>
+ Q; p% c; [+ k! H9 t  B8 A<P>用户
* g$ U: F) l  @: ~. b存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>. j0 M6 {% d& C/ ?+ w( d6 e
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
# t( [! r9 K- Z5 Q" d描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。0 y- T/ B2 C' U( A. `1 q
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
4 X2 l2 @/ F0 M9 ^" D' E描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
' F* ?8 e5 `  _& aUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>1 S: ]  M* ]& A* @- ], }7 {
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
  h; y1 |& S% o<P>7 J0 I  K6 D0 X9 m/ \& N
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
+ ~' q: Q# a% b& `SELECT 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-10-8 05:36 , Processed in 0.686377 second(s), 52 queries .

回顶部