QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
" {4 ~. ]) }4 b/ Y9 s0 P4 V1 g3 c原作者姓名 Fang</FONT> </P>" m5 |( D4 O- ?& M5 v/ X
<>SQL SERVER; a7 u& z" v4 x$ n: ]* y
取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法3 v7 s* f9 v: Y. o$ h' j
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>0 ]$ A4 R  Y1 l; U6 u' d: a. |1 T# o
<>或者</P>
. M6 [3 @- u1 G8 ^' `$ V<>USE master</P>
1 S# B+ p) r3 K. }1 Z9 o! L8 v8 @7 k/ E<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>
2 l8 r  O, P+ y9 Y& J$ f<>
( ^) u- s1 d: H7 [3 J+ H! q! Msp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
2 F& f( s6 \7 A' g<>取得表的方法2 k3 U+ c7 V  a8 o
系统存储过程</P>
# h& w5 C- m3 K$ n& k<>USE xxx</P>" @5 z: @! O8 S2 y# A5 i: [. b
<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>6 z3 S) x/ R4 T, C, N
<>或者</P>
. ^! O+ D  {( ^( f; ?( h# [" c5 W<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>" t9 k" J, c7 t2 U* }
<>USE DBAudit
3 K# v* k, o4 X5 vSELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>/ b4 t. o5 Y' K2 W& J1 g
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>& I, `- j5 t7 _4 h% B0 L  Q+ A7 G7 F
<>USE DBAudit4 r5 U' I  \- d+ |8 Q9 I
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
$ L# y  N8 j; _, c<>或者统一使用:</P>
9 Z* r  E; H/ X* m* x7 L5 D<>USE DBAudit</P>0 ~+ ~, }6 F* `  o' r" h  S3 q9 {) a
<>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>
2 l3 ~* m% \+ d6 }& o<>注:</P>& h  R, {/ S# u) V, T: a
<>sysobjects中type字段类型解释:</P>/ J3 ?7 F% f2 ^0 p6 e/ Q8 ?, v$ s
<>C = CHECK 约束</P>
( V/ {  r7 q6 }- q3 }# k<>D = 默认值或 DEFAULT 约束</P>
; C* B0 h2 Q* G<>F = FOREIGN KEY 约束</P>
' M3 o+ e3 U0 X9 d6 {<>L = 日志</P>$ }/ h" ~: f7 h
<>FN = 标量函数</P>
! x. n2 o. g( ~" F<>IF = 内嵌表函数</P>5 U$ d, ?5 q' V% C. F- p" r
<> = 存储过程</P>. ~* @" w" x" b5 ^& J, c
<>K = PRIMARY KEY 约束(类型是 K)</P>
! ~2 N1 H! F; O0 ~4 H<>RF = 复制筛选存储过程</P>) B$ u4 z% D* q. L
<P>S = 系统表</P>: J3 `5 Z! T9 k( N  J
<P>TF = 表函数</P>
% f: i# k! z& b, P<P>TR = 触发器</P>
. {# S/ V% M: K9 g, D4 n<P>U = 用户表</P>
/ S/ v6 \, l0 X6 T4 n8 C<P>UQ = UNIQUE 约束(类型是 K)</P>
1 C' q3 {% _/ e* i<P>V = 视图</P>! Q- f$ }( n! O1 r! Q
<P>X = 扩展存储过程</P>) k2 B  i& `- e; C: m( m- C
<P>取得列的方法* H' F' p4 q4 P$ l
系统存储过程</P>
" ?* d! Z# |  m5 S<P>USE xxxDatabase</P>5 I9 {0 T8 B  ~( \9 ~2 e
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>, A5 @  Z% C8 v* j  j
<P>或者</P>6 a+ {6 [, g- F$ @  e( Y8 C
<P>USE xxxDatabase</P>9 E+ O9 L3 t2 m
<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>
" p0 L8 F$ [  b7 z<P>这两种方法都可以取得包括视图的列。</P>0 e7 G! g9 ?9 @& Z& m! A
<P>取得视图的方法* x, K/ ~4 r: w% b# j. e
系统存储过程</P>
' b3 T# p; V5 s0 ^' O<P>USE xxx</P>/ d- D6 h. l2 W: U
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>1 U4 w' G: R% p6 i' j; k
<P>或者</P>6 O$ \# B9 X8 ^( _6 D- o, u* X
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>
, T, A+ B3 V4 r<P>USE DBAudit</P>0 w0 ^" k+ R& Y1 k7 z
<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>
& m/ O& q8 q! }. a3 T  x* X/ f<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>' _0 O4 c: @/ j: f+ u1 w
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>9 X/ d' ~5 e) i: U! X- h9 i6 t
<P>取得存储过程的方法7 S, K- S$ w( A2 X. ]
系统存储过程</P>2 L+ h" j1 O4 p+ j( Y3 u
<P>USE xxx</P>
  i0 D5 q4 N+ c& X. \5 B* l<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>" A/ K+ t, r. q- j5 z; ?
<P>或者</P># U4 g2 k: V0 _
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>
: |5 A* q8 f/ O* d3 b% A7 B3 T<P>USE DBAudit</P>' w+ D. d1 J5 D
<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>. `: x+ O( R' f& K
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
) v1 c9 b4 V- A" ~  Q" F, F* U4 x- w+ i<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>& A8 S% }* e# B. e/ @5 i4 C
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
8 _' F9 v' s1 M" x( Z<P>取得函数的方法3 G. I9 P5 X# h5 `/ W
系统存储过程</P>
6 R2 C6 A" i& r5 r* Y$ g  @<P>USE xxx</P>8 [5 \4 A- V! N4 r$ D3 u
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
3 j0 Y; I; X( M$ J8 z* y9 P; W. n2 V<P>或者</P>& k3 K4 H" |% C$ z# Y, D
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
( e# K! _; y/ t  s0 [" M; d<P>USE DBAudit</P>
5 c. t8 D; q5 q) g, p8 h' Y" q<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>
5 v$ z4 \/ k3 |<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>3 f' j( V# x( s" p2 ^2 G" r2 Q) d! }
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
+ ]- ?0 O5 M3 n9 |/ k& j' ?" \<P>只能获取用户定义的函数内容。</P>' F( p8 T! p! J
<P>取得触发器的方法- z9 x/ @) r  X/ }' P
系统存储过程</P>
# B: m7 b* ?9 j% o6 W5 \<P>USE xxx</P>& U. O" ^8 T4 Y$ p
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>1 B3 i7 Z+ i7 v* h
<P>或者</P>( c. ~; H' d" c3 O/ d
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>. G! y/ e) ]( L
<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>
# l2 N, F  w, V) F<P>取得索引的方法' u* Z7 a, C! \4 g, F* j- n
系统存储过程</P>% y5 ^; y1 z6 I: n
<P>USE xxx</P>
* q4 Q8 m# V. E0 Q) i<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>
& z- d9 K) X: A1 ^- |<P>用户
! s% v0 T! i4 ~  Q  @系统存储过程</P>
( w3 \6 O5 s) ~<P>USE xxx</P>6 |/ C" r7 H: T& e
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>
( d/ ?7 c6 n1 C5 @3 S" H<P>角色
( h' I( T( I( p! p, N5 p9 p系统存储过程</P>
8 I% x; a4 t  V/ O; D<P>USE xxx
1 i$ ~2 Y+ ?0 @+ ^) X' R* u0 ~$ T/ mEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>' }5 q: p6 W/ X5 z% k

9 U, _4 J1 |( G  {* ?$ u- t<P>ORACLE
/ t  K0 h% v+ S. l4 b- F/ D0 R- U特殊
6 R& ^: o8 y% E/ b& |7 G" ?- }0 h&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>
+ N/ n- |! [$ N" Q& k1 b<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>
* v& m# k: z8 U% Z<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>( B. m$ l9 P  X
<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法1 g) m/ j2 O4 |* _6 o5 h
只能由用户指定<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>
) A# I& `7 |& G  n<P>取得表的方法  k* U) h' @1 y: T5 X2 X% F/ ^# ^
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>7 K. U) k! g& s) k* [
<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>
# @( p( @& a+ ?+ d3 ~- o<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>) J% z  L* F9 `3 C# w0 E
<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>
7 O' l7 W0 t4 [) C. l<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>
; n) \: r' @* ?0 m0 X, a# m<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 `# F. x9 u% B9 q) n2 F<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
" R; S# _" T+ H6 ]. P1 A1 I) }<P>
$ X/ s  Q" _! B5 M6 {DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
% v$ i& S: h' g<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
1 u, b8 p! b4 W' @+ j: B<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>2 a( A1 r, x) M$ @) Q' S" v
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>
+ n. x; f: G3 `) ~6 D, J1 C+ z<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>0 \4 O" C+ P2 G  {% M8 q2 ?
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
# K# \: _# u! T8 W. F1 ?  Y' H<P>8 N& G/ p8 N8 l% c& _
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>* n4 R+ K1 x' t* F' y' V
<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>
  T2 ~) K7 h4 `. W  F- |) }<P>取得隶属于指定表空间的表:</P>6 k* r6 [' ?$ w; e5 N4 k- 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 TABLESPACE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME = 'DBAUDIT';</P>2 ^7 ]8 K) ]! S9 P; K+ e
<P>: k" ^% i( X( U
也可以不指定用户名,从而取得所有的表。</P>0 m* ~. `4 v9 t" X( P5 Q/ P3 Q
<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>
6 n& ?8 U5 p3 Y<P>取得列的方法
& y* T% x, p7 K; R: X+ d# a) q存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>$ x* ~0 {1 H* P
<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
( q- [/ @: l) l3 a描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。5 c+ e. L3 X) q; p+ t* D2 Y+ S; x
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
" _! l9 X3 q1 b. d) ~/ b3 U描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。- r8 {0 d7 q! R8 }' {/ |
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>COLUMNS9 U! y6 w) O% V6 ~4 b
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
* P8 l/ H2 t: f* d+ 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>. Z' j  L: i5 _( s1 T( n" l
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>
; I0 j8 W( Q" r. x# Q<P>$ H" A' J6 o, z* a# s
因此,可以从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中取得隶属于指定用户的表:* c2 k7 @7 n: q4 v% {1 i6 J3 D
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>4 Y: C9 _/ T: n* a7 [
<P>取得视图的方法
. x$ G8 r7 f- u. _! z; j+ L  A  _存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
. L  k( m7 v( y  ^% s5 P<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS* Q6 e* s! V2 b; r  }/ Z2 L
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。' }" G- v, ?" ]- g5 B% q, A+ V+ r
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS8 X" }, V4 n" e' X  m7 l
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
; l- N- y- h+ i' G# mUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
: _  X7 C- ^0 X6 @8 B. H) C  K<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>" B2 W5 I' ?0 Z: r; R
<P>0 Q1 w; O  Q7 P) W1 s1 W4 ^
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:/ W- t, N5 Y% d# ~6 f7 ~" `
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 g8 M& m7 ]1 }- h4 W% e$ H<P>取得存储过程的方法( i( _# Z7 c2 |, _: m# v9 t+ x! j
存储系统对象的系统表/视图有:</P>
. s. y. K6 X1 @3 {' H, S1 f<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>% ?8 m& R" |2 U, y
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>
/ m3 I# j! d6 n8 y8 [! U<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS" K$ N$ Q  q  n9 g
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
; O/ n$ _. \% L8 X$ I) [6 sUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
! S' v+ r4 u5 y5 n<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>
8 x  J- }+ h' |. q' O9 _<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
% v2 Z% T  D: t& ~<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>
+ ]% S; v" f& R1 p3 P9 u% }; h<P>
7 `  R' s; v/ D1 T对象类型有:</P>6 m/ {) v0 p: J0 t% Y/ c1 `7 }
<P>CONSUMER GROUP</P>9 \4 y1 m1 m: r' l. Y1 Z$ S
<P>CONTEXT</P>9 t' U0 u" _1 S+ r; N9 f! W
<P>DIRECTORY</P>
% ^' S) E. y0 d0 i8 b9 {9 i<P>FUNCTION</P>& E# g3 a' V5 t7 P" \. m
<P>INDEX</P>" t$ \6 m1 Y7 v
<P>INDEX PARTITION</P>
# {  J% x3 t9 z  n- [5 c$ K5 z9 g( M: M<P>INDEXTYPE</P>
* b2 P' L( r: d<P>JAVA CLASS</P>
& c) r" R) U2 r& o. o7 y' }<P>JAVA DATA</P>. r2 s) @* f  j( f2 ?
<P>JAVA RESOURCE</P>
# }3 s; y0 i7 h<P>JAVA SOURCE</P>
! ]* d' ]( P# V<P>LIBRARY</P>$ a1 S  ?4 l# N' \, ~2 s
<P>LOB</P>
; q5 H2 N' l4 A' j( M) W; ]<P>MATERIALIZED VIEW</P>
, O6 K2 C7 ]# y+ J* u4 m<P>OPERATOR</P>
8 S' J1 L( t( ^' O6 }2 a) v0 i% z<P>PACKAGE</P>, U  t0 e8 s2 w- Z0 ]
<P>PACKAGE BODY</P>
0 y! O; u9 x9 k# M  X4 `. Z<P>PROCEDURE</P>; I  B. @5 T3 A) x) G. q
<P>QUEUE</P>. @0 C! I9 v+ r8 Z0 r
<P>SEQUENCE</P>
" ]+ J/ u5 Q' I9 R+ h# e<P>SYNONYM</P>
2 h, k5 H. u4 I, |$ V<P>TABLE</P>" _: K7 H0 [# m0 p6 X* S2 S
<P>TABLE PARTITION</P>& X6 {# c, @- _9 P4 f) o
<P>TRIGGER</P>
4 g" Q7 ]  `. c5 v2 z, ]9 m<P>TYPE</P>
, R0 r0 t3 m. T9 Q6 b6 U: l5 r<P>TYPE BODY</P>
, W$ R  ~  T7 u3 k<P>VIEW</P>
7 X: |) q9 w4 }' w) T+ M, g1 O<P>9 o: d' U; b/ j) x4 ]$ U) R7 H- L  w
因此,取得存储过程可以用:</P>% M3 {: G- a; B
<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>9 E) `) h; P7 y) w, B1 h$ m
<P>取得隶属于某个用户的存储过程可以用:</P>( ^+ S) I" t/ G, D' v6 u1 q6 U
<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>- x2 d( H% o0 ]/ P9 n/ v
<P>
# @1 @* _- }" e/ @4 C. U同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>
3 m- ~- ^4 |. J# \1 c4 O0 s; ~$ @<P>取得存储过程内容的方法
. H  u+ l1 |" @4 m3 s对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>/ N/ A$ ]+ f5 K2 b5 ?
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
0 y9 ^) D7 ~9 \$ Q! W% K6 r/ h$ c/ l<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>6 m2 P2 R) q% X3 ^& c% a
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
9 ], C# r0 [; k1 D( y$ T; C( ?存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。
5 o" }) ]. ^' P* B1 ?; Y. |USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
" V! ?* ~/ A# e- A; e8 R/ z% x<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>( N( w! g5 w6 x: L. k! f1 ]
<P>
1 u; E" X( L3 ~8 X" W6 W; B因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>
6 i  E: z0 f" d* E4 y0 h) M1 |<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>
% G4 \3 T+ j' Q% w; B<P>取得函数的方法9 Q3 ]% ^. U) s1 f) I) j
同上,取得函数可以用:</P># G" h# @7 X( 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';</P>
0 A9 M" l; L, K3 I' P1 A<P>取得隶属于某个用户的函数可以用:</P>
" o6 m! j& c' P" E% G# v+ a<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>
, o1 Z/ F+ i1 Y( x9 @5 @<P>
1 u% l! M  N7 v( }& `8 B* k/ X; k取得函数内容可以用:</P>
) l; j$ g  ?& Z* z  Q<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>/ r8 m, Y8 ]/ L$ F5 V$ _4 s6 T
<P>取得触发器的方法" G# `2 x7 R, J5 k4 [3 [  ?* L
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>
' z/ r9 B" \% y<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS
: h% F" l& A! W- |( d描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。
3 {' E9 P( Q5 LALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
# R: ?: W- e2 j1 @  Q9 f描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。/ F5 z! G& F2 H
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>2 g3 n/ o! e2 J# i
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>
* A2 Q5 f( u2 E7 j7 L<P>; C4 H+ u' B; B
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
8 j" j! j0 c: {$ pSELECT 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>
1 Z! {: q6 X! n9 U1 C4 p+ j<P>* ~+ d+ G9 ?/ [) W/ u
取得触发器内容的方法:</P>
1 s  z  K1 ?6 h! Q% Z<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 k$ h. F/ d' J& O3 |
<P>取得索引的方法: A! ]. M( }7 ]$ B  W
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>: g  R) \* |: E4 K
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES4 l8 k, e( w6 a3 V
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
: _4 E) z4 E0 B9 J$ VALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES0 Z2 P7 c8 c8 f9 M+ a
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。( M% u3 \7 V& `0 |1 e* I. _
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
! w* V1 z& q3 d" z<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>3 L! ?& V" ^) @  g5 e
<P>
& H- U: f6 ^6 L; c5 b因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:
4 U. @+ Z8 o+ R' z1 R5 j2 l$ v. @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>3 Q$ z; p7 B' R2 \
<P>7 l- Z0 W# B$ z1 C" Z* `& Q
取得索引相关的列的方法:</P>
( T" _! d2 N+ f<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>0 a6 f4 r3 b& Q9 Y
<P>用户
( S; d2 E9 i3 l4 F# _+ S存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>' |, I  z# ^3 P4 Z
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
% |  F+ @" A" x" q" R: P描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。# A* d7 m! Y2 A( d
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS* a2 n1 \* m5 d& B: O
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。" J, L1 F7 V& m8 K" I1 u% J# E
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>. b  k4 U) g) j0 \6 }
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
' ~, L8 F' F1 f& D9 q6 O<P>: R& u* W6 Q: H4 e: f
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
1 [6 j! a/ e) o0 f) BSELECT 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-8-23 06:04 , Processed in 0.412079 second(s), 52 queries .

回顶部