QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
7 f6 w+ I6 j3 Q" ~* r7 R原作者姓名 Fang</FONT> </P>& o) @/ L8 t! B/ Q8 ^' j
<>SQL SERVER+ V# a9 n, l& C$ W* @
取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法5 Z* A0 m% x; j0 O  G% v0 `
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>+ h0 Q3 B5 w/ O
<>或者</P>$ A3 Q% ]0 _5 R$ f3 k  v
<>USE master</P>1 `, p6 ^: {& E" F, ~
<>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( T7 G0 S# v; ^) R9 I0 u. E
<># d4 L! c/ O/ ~: x
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
9 ~7 S5 }- K2 k3 B6 {<>取得表的方法& L" J: `9 x/ ^0 h
系统存储过程</P>$ C8 k1 Z0 w( U0 u2 O7 O
<>USE xxx</P>7 V0 m/ x: S0 s* T5 A/ Q- ]
<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>+ N( `3 |0 ]5 X) W, G0 a
<>或者</P>
  U1 v+ l2 }7 W+ G, ^/ p. P<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
1 g/ D, m  x) D( ?9 c' ?<>USE DBAudit
4 \' j/ B& c* ~6 S6 s7 q) z  @SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>- ]4 b; T  t& C& x. }
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
9 q: `0 z4 a, F2 q<>USE DBAudit
6 A! A7 }% S: r' w( t8 NSELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
8 [$ \# v& n/ s9 W! P2 z<>或者统一使用:</P>7 t9 T0 H$ W6 T/ q! u. C. M
<>USE DBAudit</P>
* N2 i0 X5 h% M; s$ ~8 E! V- S<>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>
5 T; t1 N2 \1 Y! G<>注:</P>
. {( q2 M$ L/ q1 I! T* g: Y<>sysobjects中type字段类型解释:</P>) E. e0 E" U$ [9 V
<>C = CHECK 约束</P>
. k) p( y. h5 C; F2 q2 J5 t<>D = 默认值或 DEFAULT 约束</P>
0 x8 ^4 c" w9 R' _<>F = FOREIGN KEY 约束</P>& G& A$ z7 s* Y; I9 M( ^
<>L = 日志</P>
) O; |8 f, {, S( C8 R0 |8 e<>FN = 标量函数</P>& V/ T+ e: f7 ?2 p1 A
<>IF = 内嵌表函数</P>
6 O8 C; l; s* O% h+ ~/ _<> = 存储过程</P>
& s, B6 {: Q+ _+ U" m" }9 Z6 |<>K = PRIMARY KEY 约束(类型是 K)</P># X% ]1 h3 B. l* \
<>RF = 复制筛选存储过程</P>
; U- w2 m0 W5 r) ~* |( `6 `5 ^<P>S = 系统表</P>/ y  }# N, N; ^. e: {) r& c
<P>TF = 表函数</P>  S  N; E* k- \& f5 `8 @( @
<P>TR = 触发器</P>  ^! X/ o1 t; p% X1 \& H: z' x, w
<P>U = 用户表</P>! u6 o0 b; I' ^" ], P9 v4 [: }
<P>UQ = UNIQUE 约束(类型是 K)</P>* B4 o* c! d5 r- B
<P>V = 视图</P>
8 z7 Z; o- k+ @/ X. [<P>X = 扩展存储过程</P>
4 z8 d$ r0 y+ e) m2 Z<P>取得列的方法) Z+ k2 G6 i6 p/ U) ?& U
系统存储过程</P>" p, l5 \7 R- Z# X! O
<P>USE xxxDatabase</P>+ }4 K: i$ M5 ^6 S- \. V
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>
3 ]: ?3 b8 Z( u3 _1 q& M<P>或者</P>1 x7 n( ]# f, W- k6 P( Q4 v
<P>USE xxxDatabase</P>; n3 w/ I, b- c, X' f2 _' y
<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>; t- N/ }8 ^' n7 T+ x0 b* L
<P>这两种方法都可以取得包括视图的列。</P>( e! \( t4 F5 K! ]" a+ |
<P>取得视图的方法
! i: |. a% \  {& m( g  G系统存储过程</P>: U3 G2 Q, c% Z0 q; H
<P>USE xxx</P>
2 L1 m+ l& Y& ~) S2 J<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>: I# I! `$ F, M
<P>或者</P>
6 @) X3 B7 I* P7 S, l1 K<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>
6 R. e* ^2 R3 H/ J0 j" _<P>USE DBAudit</P># a) M3 e" V7 B! c8 {" R6 Y
<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>! T- p0 `; E! B) D* q
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>
" @, z+ a; k; f0 r<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>; \/ |9 Y+ m$ m# b8 I1 t
<P>取得存储过程的方法& q5 i; J/ G# P! v5 W  t: K
系统存储过程</P>9 M( n: n- {7 f+ r: Z+ D
<P>USE xxx</P>% Q4 Y* Q! U5 V
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>1 X" H, M( q3 Q( X2 d. d8 f5 k
<P>或者</P>
7 u( q. U/ f, Y9 e' t# R<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>% }2 |4 S3 {  _9 B: [" ?
<P>USE DBAudit</P>1 G. T! @" X) Q
<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>' s6 P$ N0 K0 B9 V
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
. A& c4 B& A7 [: \" [3 S# t- ]<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
& P% K& t9 z; v$ Y  R8 I<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
- W" o- P/ g2 z. b4 w5 d% u<P>取得函数的方法5 A3 M' \8 m, b' f: S
系统存储过程</P>+ i/ S! r$ j) _8 U
<P>USE xxx</P>4 O8 V1 _% j2 B6 T8 A+ ^2 f3 R
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
) @) {" d( K' ~! k: D4 K0 g2 ~<P>或者</P>. d* p* z8 f9 p
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>- v7 W, |9 k$ \
<P>USE DBAudit</P>
; G8 f6 P# L' e8 m  Q* O8 Y<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>6 i% P. C1 P7 Y  v2 E; e7 s
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>3 T7 Z! k  n! `$ K3 x
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
0 }0 y6 ]6 H, a<P>只能获取用户定义的函数内容。</P>; k" `  z- [! i& V8 I
<P>取得触发器的方法: d* U2 A1 h: y' h9 s! h; F2 a' f
系统存储过程</P>
  F+ s8 }5 ^% I8 z8 b+ O<P>USE xxx</P>0 X5 L- `; T3 \
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
1 P8 N  g( g9 i<P>或者</P>6 E! {( D: c4 L0 G' T7 }" t
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>! D6 w; A; a( P
<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>
- }3 M' g: V/ |<P>取得索引的方法
& D* }! h5 B2 L, B, H系统存储过程</P># r- x/ m# G/ ~$ b. p! K
<P>USE xxx</P>
3 D" A4 P* C; u<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>& Q- l' g1 w3 @
<P>用户; o. |9 u9 M! k5 j9 G5 u7 B+ x
系统存储过程</P>+ ?" A# p- t$ w$ ], G3 O
<P>USE xxx</P>* `7 n8 T6 \2 M  h( r$ L; {
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>
7 [  I  W# M9 e4 \5 R5 C8 g; G( i% I<P>角色
; G! W) P! e: e8 o$ w& k' t8 i系统存储过程</P>
0 A- b9 g' O0 L<P>USE xxx& R/ V9 a1 a% Q3 M9 y
EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>' z# m- J2 b2 F" S+ d

7 F  r& Z+ u( R  ~2 S+ ^<P>ORACLE( J$ P% t6 r& ~. m3 q# E: I
特殊
6 G7 \4 j; h8 H&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>
$ I1 X2 F6 U0 K6 g<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>3 x: N& E. B3 @) _
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
5 E3 U* z7 I! h<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
, R+ F4 j8 Z2 @" a! f只能由用户指定<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>, D$ m" d- W0 x' v, g5 o5 A0 S
<P>取得表的方法
/ J- b2 }/ `' I存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>
+ U% z1 a5 I6 V- G4 l. `) d1 A<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>  t0 W. v3 _1 O2 n$ P& L
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>
: o' H1 A4 r/ G3 p) Y& Y<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>
4 _" j. t7 V+ e8 C0 p4 y<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>, u( B0 E' a% L" i
<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>2 E( e7 o; G/ q8 H$ f
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
, g& }2 E# q+ X( f- F) N3 R<P>2 R# k: H0 P" E# e0 S
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>* ]* @( c. F# m( G( o; S; W  x
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>7 q1 H: ]6 Y! B; p, C4 J8 X0 S
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>) T) Z3 B- ^- V  w2 ^9 d
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>) _0 T, F% d. M" `  E  B. D
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
3 o# D/ |- |: ]( F. J<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>8 {7 `5 S7 }- f8 R
<P>
( t* A/ _; J4 v1 m" F4 _6 c/ k因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>) E; ^9 F7 O: \2 R
<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>" _+ D* [( p! _  }3 n# n6 r, m# m
<P>取得隶属于指定表空间的表:</P>
! N7 L2 E& ^) M3 e, ^' g: w<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>
/ W) |# w( A9 q8 k8 X* f<P># f9 Q9 M1 O4 u& T' [
也可以不指定用户名,从而取得所有的表。</P>+ y. U. J6 |% E+ `2 T
<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>" \- e2 k8 W, c+ F
<P>取得列的方法* k3 W9 R- {% {
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>% b& r% }6 a+ 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
0 I& p, g+ X" z描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。
$ X3 [3 B, w0 A- f- @5 L& t) {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>COLUMNS9 N7 p3 d* M4 g, T( s& h0 {: t
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
0 t$ @" x/ Y, |& B, |" }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( W( t, ?6 W& y* x# j) r$ E
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。: y" u8 u3 H3 N
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>( S' v5 V: K; S: }" T6 I
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>$ c7 f" I% B9 `' `
<P>
% z; m4 E$ K5 C& J因此,可以从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中取得隶属于指定用户的表:2 \6 o) w, b& y
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>% Q3 m1 T5 Q  A% C% E% w: P; Y
<P>取得视图的方法3 K; t, F& u: \* G2 j8 ^
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>% r. i# I5 k1 |2 _0 F6 E! \
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
. `3 ^8 ]4 \6 C9 N7 l5 Z2 _描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。; q# w& W: s' r3 c; i& a; G
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
8 z" F& ]# I3 K) A' M描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。- @6 x) ]/ L  N+ Y8 N
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>8 v7 ?) n% b- L6 k$ o: R
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>2 Y( V' k$ u3 O; G- y8 i$ P
<P># n3 P! j/ n" ]
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:
3 p( \1 R- S3 fSELECT 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>. C. q2 V4 y9 \" t, ~
<P>取得存储过程的方法
7 u- x5 w; ^4 K! `7 ~& U存储系统对象的系统表/视图有:</P>
$ o1 T( Q' @: x/ F4 L* R<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
, R" s9 {9 X% L, t( C<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>
4 O4 W6 b! h! o, m<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS! x  c/ ?$ e$ a4 j. g2 \
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
. V$ E6 d* k  l/ YUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>& G: A6 B/ U. G5 g6 F- A3 x0 Q
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>
, h% E1 H& {# i. c  h2 j( I<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>& p" \: q+ E& Y- u6 _" e
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>5 N1 f- x/ [1 p' d* _
<P>
' u. B/ y: w4 k" W对象类型有:</P>+ |7 v$ U' ^$ u# a& Z+ B, R5 y5 Z" L! V
<P>CONSUMER GROUP</P>
3 G6 T" P& x, ?( o9 |<P>CONTEXT</P>5 ~- J4 W, J1 A- x' |
<P>DIRECTORY</P>3 a: D& V% y- w2 p* E# E; A6 P
<P>FUNCTION</P>7 I' y2 v0 G& |" O. F5 I. Y
<P>INDEX</P>4 `. |1 k; x7 l7 z
<P>INDEX PARTITION</P>
( F+ [& h# s2 f. V<P>INDEXTYPE</P>
0 @& u( p9 u  t& W' w* n) J! j1 g<P>JAVA CLASS</P>0 j" `" ]' d2 l, o& L4 p* f) Y6 G
<P>JAVA DATA</P>1 Z- `% Z! B- L+ D2 @0 n6 t5 z
<P>JAVA RESOURCE</P>/ {+ X* y, |* H3 C
<P>JAVA SOURCE</P>0 `8 w0 b7 |. ?7 y4 ^3 [
<P>LIBRARY</P>" o/ K5 q# K0 e% o! J+ C
<P>LOB</P>
/ s9 |: @3 J8 P( O- |; |0 U5 I<P>MATERIALIZED VIEW</P>+ Y4 r  W$ H+ x& K. z( m
<P>OPERATOR</P>; u) ^" Y2 ]% V
<P>PACKAGE</P>; e) w" S& j1 @3 K. c: J; |
<P>PACKAGE BODY</P>
, S  d% E1 T3 g, p! l7 w- v6 N<P>PROCEDURE</P>7 N! H+ M; e( K- c6 l
<P>QUEUE</P>7 z' c; z  Z6 e$ K5 m
<P>SEQUENCE</P>
  e6 _2 e. M" P5 }( U) X% q<P>SYNONYM</P>" N% y! s' [# ~
<P>TABLE</P>
% d- ~' {% B3 z* c" V9 I( i<P>TABLE PARTITION</P>, m: [6 A) D8 f1 r8 M" i% p7 I% k
<P>TRIGGER</P>1 }& u+ Q9 J& }8 ?
<P>TYPE</P>
* z6 F! @( Y$ X; f" F<P>TYPE BODY</P>7 k6 W6 r, v) f0 ^. `0 P( s
<P>VIEW</P>& h# |8 h8 s1 P. l7 U3 |3 P
<P>
* r- A/ q) X0 |因此,取得存储过程可以用:</P>  R7 i; ?5 z- v. c  _3 j
<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>
  o" r0 ~) X; x5 j/ \<P>取得隶属于某个用户的存储过程可以用:</P>% ~2 s; ?! A- c5 N0 F/ ^
<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>
  N4 E$ s# a/ W3 C0 p( |' N<P>
+ _3 X: H' R0 O* }同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>, O; _. _2 E4 I5 ^  @
<P>取得存储过程内容的方法7 L6 h! U2 I8 W# _% H
对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>
& _! I4 s9 f& F0 G" `) H0 S<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>: X& a6 f2 h! i
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
' K' `6 L4 U4 I: j<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
2 j, ~' n! d6 r- [/ _% t; h2 |存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。$ w# O* U: n# `5 y' K
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>* V/ Y0 W- i: ]- E+ q
<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
0 {" [/ R0 L: G# y<P>7 k- \7 X1 h9 B. [2 G8 x+ l% M
因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>$ W( B9 R) R& \: k9 {0 r& x5 L
<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>. s% R6 t( Z+ `/ r, O
<P>取得函数的方法
3 h( |* O& L/ I2 s) V同上,取得函数可以用:</P>3 D' t4 J2 _+ i! J! o4 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';</P>. Y, @# T, W4 `* Z
<P>取得隶属于某个用户的函数可以用:</P>
( g/ O. }/ C* h2 o<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>
0 c- f* R0 Z6 K' n+ `  i<P>; E* M8 f: R. B) Z) j5 d
取得函数内容可以用:</P>5 j4 n& r7 h  i; Z9 M+ B0 a6 H, w
<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>+ P' G' o8 l8 b. n8 @5 B( M, |
<P>取得触发器的方法
( \2 `1 d- w3 o, F# V存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>
) }+ D. ~/ e6 P' K1 Y<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS- D- J, P. C/ G
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。- s4 j  f. |; r$ n
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS( B! y- j: T) Q1 Q
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。1 {% j7 h4 O: G+ D$ \/ z/ @
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>: W6 _3 [1 Y2 [9 g1 i
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>2 x5 X! ~  b# q2 d- b8 k+ k- g
<P>6 K; g; _( Z1 g- a
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:) L6 T- s% c0 |6 ?4 h
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>/ B  m; y! e8 I, p; e
<P>
% R+ T. d3 @% T8 w# X/ i' ^: m+ L取得触发器内容的方法:</P>% F6 ^- @4 V7 R7 \
<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>& U  V( d3 {$ w( F! J
<P>取得索引的方法9 n1 M5 x9 A4 B# _) Y4 F6 o
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
- r. ]* c6 L; Q- N4 Q; V; Y& k<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES
2 z8 |$ Z" K3 b, G% V9 k描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。4 d9 |2 o6 S6 U$ I4 o
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES
; S/ c1 O5 E& H6 D' k描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。2 b- F; L4 j- n9 z+ v
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
& u# N% S4 k. T5 G  B; G8 T$ A) G4 q<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>$ }8 V" @2 E& }( g. d1 \! `4 H) a
<P>
) V5 z$ e9 r5 V5 z+ _( _5 O' _/ L/ @因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:
0 ?. P/ d3 f# @# U" S. USELECT 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>$ G1 M; t4 R9 R! N7 B; j
<P>  |: P7 J% v9 b) d/ h1 _( c" E# m
取得索引相关的列的方法:</P>
. {! [8 n& R! x  L$ _, n/ }* X$ W( \<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 c$ g1 D# a2 l- }7 Y5 t<P>用户
6 V# d! [* P$ _! z" w2 @存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>
, E' ], K4 ~) u& ]<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
+ O; w- ?5 {9 J; z) ]: I6 b描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
; |! H* G' v& b, B( VALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
* D' ]) j) L3 [1 Y, _: Q. j描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
7 l- o/ E4 _1 B( N5 s, D% p! @USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>
3 I4 n1 s3 Y3 i% c; X* T8 F<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
+ d$ x2 l  ]( `8 X<P>) ?# D% g+ o- u$ o' M- |& P
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
  M) K' m' L+ t+ Z0 b% E8 G4 O0 y- VSELECT 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 09:39 , Processed in 1.678571 second(s), 52 queries .

回顶部