QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象, `  S& g1 }+ @& L
原作者姓名 Fang</FONT> </P>
& @! l  h6 E2 h4 u/ ]<>SQL SERVER
, Q+ o6 n* P, f5 d取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
- ?# M0 v. X# t/ A- L' C7 ^- w1 \, H系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>9 a/ y6 v6 k( z+ r) f4 R
<>或者</P>% J2 G! W5 \* I' x9 \
<>USE master</P>
: ?* w4 I: y6 F! R<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>+ ~+ Q7 f. ~7 a, ?
<>$ o: c3 S$ {' i$ G2 a4 V" Q
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
7 s7 J* w* |8 a<>取得表的方法' N7 Q) a+ J1 E+ k0 N2 \
系统存储过程</P>' F: V1 x: T/ |# M0 k$ }7 o
<>USE xxx</P>
# i: \& o4 {8 `6 h<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>1 B) n& B+ F) C; P" ?5 v
<>或者</P>
  L0 i. p/ _% |: v/ D" H<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
0 g, s/ R: P3 J$ ?# t2 [1 ~1 U) H% l# d<>USE DBAudit2 N9 ~6 A( F. t( C: V1 m
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>1 C5 ?1 J# P4 [4 r! w) D  M# P
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
# t4 m) K% h+ V( d2 \5 _<>USE DBAudit
) L6 ~' X6 G9 h5 B" ~* ZSELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>$ o  X- _- p# [# J: q9 z/ q
<>或者统一使用:</P>, ?" V8 R" q1 @
<>USE DBAudit</P>
' Y9 [/ k& Y( ?1 P+ ^<>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>) J2 c2 Q: _" g4 F
<>注:</P>
& @4 H4 \$ i" @1 b; B1 u<>sysobjects中type字段类型解释:</P>+ J$ j+ ^) G8 o+ Q2 ?
<>C = CHECK 约束</P>" I; q2 P3 d- d  b) T
<>D = 默认值或 DEFAULT 约束</P>1 r7 P# \$ z! o6 Z1 v
<>F = FOREIGN KEY 约束</P>
/ m9 \: B* W: Y; p<>L = 日志</P>+ O2 ?+ U  G6 [8 Q
<>FN = 标量函数</P>
1 p. `7 W; U5 P. ]- q<>IF = 内嵌表函数</P>
2 s7 N5 y/ r' f+ b# a3 S3 ~1 g<> = 存储过程</P>
0 G1 B2 ^7 }0 r6 P, \7 k<>K = PRIMARY KEY 约束(类型是 K)</P>4 t  U8 r9 z# |8 S- K# q+ C' [
<>RF = 复制筛选存储过程</P>
) B- m2 f' U9 W2 ]4 B' H0 S2 J. H<P>S = 系统表</P>+ M1 v+ D0 }- W& K' H1 z
<P>TF = 表函数</P>  C. Z1 w4 X) h0 P  i
<P>TR = 触发器</P>. d& f& H' b2 c5 t8 n
<P>U = 用户表</P>% {% P# M+ r. h- J6 {3 \
<P>UQ = UNIQUE 约束(类型是 K)</P>) c3 |# L2 B2 p' b) v4 t, q& u
<P>V = 视图</P>
5 s4 m+ q% K' c$ W<P>X = 扩展存储过程</P>% c  f/ h' M; X" ?3 N, K' k# J
<P>取得列的方法
  i! ~2 S0 D4 f2 E8 x+ V系统存储过程</P>$ B0 c1 B  P: B6 e- g  c% W
<P>USE xxxDatabase</P>
1 y' u7 u  o2 A3 B; Q; P6 O; ~<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>
: ^, A6 F6 {. p" \' l<P>或者</P>
% d$ J: e  O$ D# X8 K6 P<P>USE xxxDatabase</P>4 z: M: w' T& K6 R' B
<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>% j6 w% z( N! L+ v% b
<P>这两种方法都可以取得包括视图的列。</P>
6 O4 H0 y7 P6 M<P>取得视图的方法$ ~/ J9 B2 \: f! w, V
系统存储过程</P>/ t( }; P2 D* d
<P>USE xxx</P>, I- A) S% R' }% E
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
* i8 U6 Z7 i* E<P>或者</P>* f5 [& H8 ]+ ]5 D
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>/ k; A; B+ H: t4 n2 j
<P>USE DBAudit</P>
3 {3 x7 Z3 Z; L% 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>7 J9 [. W: v& W/ [2 B& s/ ]
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>
3 V' S5 ~0 d" {0 ?6 Y<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>8 s) y+ `7 q; `% u+ Z: K8 I
<P>取得存储过程的方法
. q+ [. W. O4 S6 _系统存储过程</P>
$ }! j) j! }" @. ^  u<P>USE xxx</P>
& ?9 L* `4 A, y4 D+ D: c  U<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
5 l4 D2 s3 y* G0 ?1 Y) t% Y# f<P>或者</P>6 e, N) C: [; @" q( k
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>
# v5 Q0 f( D: k; Q) a2 L<P>USE DBAudit</P>
4 ~- v- ~% d% g$ ^- E/ 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>! M$ o6 e: ^5 i7 C' O
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
7 `- D$ v, D+ D<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
' d$ A- ~4 \# }+ b% C- u<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
0 s, U- _/ g5 X0 @1 A  g9 ~0 F<P>取得函数的方法
1 Y8 O6 D* C6 P) B0 c系统存储过程</P>6 F5 g; U6 P6 A2 M# ]2 x
<P>USE xxx</P>
) g. w* t2 h7 W/ }: u<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>' S/ P' ]5 s1 d0 P5 G; H
<P>或者</P>
8 N) n2 b* C% _# A<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
+ j5 u& X8 f! w& Z3 K/ p<P>USE DBAudit</P>
# }6 Y( ]+ s/ m& y( Z7 Q  x<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>+ a* h4 N- ]' v& X" N* Z* l
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>
) O7 q$ r, l. X& n<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>9 j/ x+ F' k% g( R
<P>只能获取用户定义的函数内容。</P>
" r" R) z2 N; j" Z<P>取得触发器的方法! ]; g0 S2 Q! @1 H' {- U1 G& D
系统存储过程</P>
8 H( N- ^0 s# L/ _6 x( l, ?5 U; S<P>USE xxx</P>8 h5 ?7 ~2 S2 j4 f* R4 G" p5 z+ X
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>9 K2 C* {! }' {' \3 `
<P>或者</P>
! D4 b9 A: N6 \: u3 K0 B5 L$ }<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>3 N8 [/ j) U, Y
<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>' b# m, _3 \3 q* L
<P>取得索引的方法
, N* a; m+ \; M' P% l$ F" _/ _系统存储过程</P>
2 `: g, T2 H; c6 v7 `<P>USE xxx</P>2 H$ c( q* S% t% J4 \
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>) d* {6 G1 e1 t2 b
<P>用户. K( J$ z) P7 K/ [' u
系统存储过程</P>
2 q$ B$ \6 O* h<P>USE xxx</P>8 ^6 S# o7 U9 l! ^0 k
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>
2 O  p- l; h$ m& }, R, @<P>角色; g: }: v- v# M2 |+ N
系统存储过程</P>2 i$ v& X# s" L8 S) b, d
<P>USE xxx
  `$ c- [$ Q2 z% bEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>
5 g4 Y  C+ ~/ W- b9 a  K! L6 |& O' ?8 }2 a- |" p
<P>ORACLE
) }7 t+ K& ~9 ~' ]2 ?9 S特殊, H/ k5 X9 [% H+ f9 \: Y3 r) K
&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>6 T: e+ w  j( \. o6 r- n
<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>, U' d. D: W" W* u* j$ P/ V* t
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
5 w5 B8 P: o5 n  X<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
; Y/ O( b! N1 c( w% Q. H+ 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>
- }+ E: W1 B" R2 u$ _6 x: {<P>取得表的方法0 s# R1 |5 n1 x6 @" ~  e
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>& L: N1 }0 G0 l6 w- ~* X
<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>
( W1 }) e8 Z6 h2 X& {0 V<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>7 p/ V: V; u/ n
<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>6 _/ f) \1 ?  f1 [2 R( l/ o
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>" p$ P0 L! p9 E# n% ^( W  {
<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>; T$ J* @0 k7 {/ C# ]
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
" Z( ?! U: o1 i  ~<P># F5 d4 w5 w. c, d& m8 E
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
5 p& K/ V! C. _<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
; v; I& S4 W2 c1 C- s<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>8 p5 n% c! i5 X" {, j9 g. t4 B
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>9 a% a) r6 E( y
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
9 u5 {' l2 d' W9 f/ w/ S<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
2 g+ Q- ]6 y4 k3 u<P>+ `5 G+ A3 c3 O5 S. P5 T
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>
, o/ \4 D, Q3 E) u4 N# ~) 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 WHERE OWNER = 'DBAUDIT';</P>( L" z! d1 w% P3 U3 }# @* \% f
<P>取得隶属于指定表空间的表:</P>
& J. z; D8 c0 V& M% \<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>. C0 S8 T: q* l/ V
<P>. Y# g- g" ~; u# [' r$ s8 `$ n
也可以不指定用户名,从而取得所有的表。</P>
6 e0 Q0 h6 q. ^. d3 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>
7 ~* }% |7 g" u7 m/ d6 ]1 B  |4 U<P>取得列的方法
6 B# J2 s" \$ I2 d3 F存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>4 g  `/ h' g; m7 {
<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>COLUMNS5 @3 o5 v8 j: R+ i
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。2 _$ Z9 z9 N2 k
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>COLUMNS2 V/ i6 J+ }8 g! T+ A
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。- e9 [- q) I( S7 A1 |+ r
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% h$ i# |3 D, ~+ b. r- Y
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。+ A+ G% K  ~5 W! 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>
" g4 R! I3 v4 D7 C; p<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>
5 R9 u/ a9 V/ }<P>+ H0 P: r  r, {+ M+ f- C; 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中取得隶属于指定用户的表:
, |; s# ~* S( b3 eSELECT 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>
8 G; G0 h- e, J2 b  @: [+ C" m<P>取得视图的方法
* |: G' U" b9 M% U, w" z% |4 u存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>2 x$ I* U( w: K
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS! W5 u& D2 J3 m
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。
& r- \/ t% z1 W. ~) N3 yALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
5 m, G, ?, g* a# t: _描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
; N' s  e/ `. ~: k" J6 o( PUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
0 ]* [8 k4 b$ S0 u/ B1 z4 Y5 t<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
) ^3 ^# L4 }% q3 G  f$ L+ B( m; I<P>
1 e2 ^( r) A" N7 }5 ^, ~因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:
7 l. N2 v3 z* {7 J8 ^1 G$ ^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>$ m, Z; L. I( ?' @+ P" O
<P>取得存储过程的方法+ r; x0 `/ I( R) ?# u  N
存储系统对象的系统表/视图有:</P>
6 t3 k4 k  Z  |3 l; ^0 L5 v  j<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
1 f3 e. N& i" V8 A9 Q8 Y<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>: ^5 \  `, |: [  _, U& r; t
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS
  ~! i. a- N  E( g描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
0 t4 ?3 d6 ?* ?, u6 TUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>/ H* X4 T) J3 U4 p% e5 n/ x
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>
) [6 l& {+ @3 f: E' W5 ?8 N9 d<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>% M* }+ h  M7 I( r  |0 h  v7 F
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>
1 \5 M; D, o; d  L( u5 X% U0 v<P>
8 T8 x$ r0 e8 i1 R6 q& o对象类型有:</P>
. U! F& J, \) g. y- i2 L<P>CONSUMER GROUP</P>
+ t, `2 N9 }; X8 a; \<P>CONTEXT</P>
( u3 x; S: g& W  j; O8 a8 M! x* u<P>DIRECTORY</P>. u; h" k( L' `* m6 ~/ T; i
<P>FUNCTION</P>( p) O: Z7 j3 v% Q
<P>INDEX</P>
1 w' o' {4 R! }% L" f" k+ F  t4 c<P>INDEX PARTITION</P>; n" o' q  O5 H) M: b5 v
<P>INDEXTYPE</P>
/ ]. O; L, a2 z$ N3 |7 H; r% }, ~+ k<P>JAVA CLASS</P>' l: f7 b+ k, @7 k
<P>JAVA DATA</P>( Z% l+ E2 y; G; R  d# O# z
<P>JAVA RESOURCE</P>
( w! z6 h$ Y, \8 N, o" X6 }- l. g<P>JAVA SOURCE</P>
: q- d( `, V' \* S( v+ J: T9 @<P>LIBRARY</P>. ~" _5 R8 X/ V  O- O
<P>LOB</P>
# |* k) L" ]3 y1 N. I<P>MATERIALIZED VIEW</P>
+ C5 e6 b/ K$ R( W# a4 j<P>OPERATOR</P>
- C6 V) r3 a- G<P>PACKAGE</P>
5 M$ k  b( j% r<P>PACKAGE BODY</P>& l0 E- R; }$ f# Y$ n, p
<P>PROCEDURE</P>
& ^, Y: |* ~% e4 Z<P>QUEUE</P>
* P' S; H, ^: w1 r) i<P>SEQUENCE</P>; G/ ^  S3 a! `9 ]# t. V: _' R9 \/ V
<P>SYNONYM</P>) |. [& V5 }* v4 n
<P>TABLE</P>/ Y4 L+ B& h$ g/ f% U3 j( d
<P>TABLE PARTITION</P>
1 k7 X  G/ j- D0 J% E% \<P>TRIGGER</P>$ y/ y$ x% H8 l6 Y# k
<P>TYPE</P>4 a1 y0 J4 @8 @- I
<P>TYPE BODY</P>$ Q7 ~2 E5 i, ^8 T9 w2 G' j
<P>VIEW</P>
8 g9 ^& z" R) n. k3 P& X<P>" R# w6 v: s/ z& k
因此,取得存储过程可以用:</P>; T; h# b# n9 H2 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>/ Q/ Z5 K7 x, u$ i: |( f
<P>取得隶属于某个用户的存储过程可以用:</P>- ?- L4 y7 X. ~5 ^& t
<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>
- p# F# J' m$ i/ d/ ~: I4 i4 A<P>5 j2 Z* d) R0 t9 u
同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>
, G  \; a8 w# K% p<P>取得存储过程内容的方法
! ~* M% `; [/ H/ _0 z& `对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>
: P; d2 X* [* K# R<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>3 j  J0 R( J$ ~4 r1 i3 @
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>+ N6 P; f, M3 ~# r. t
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE7 |+ z  r8 n9 W* C, {% |( i" D8 p
存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。
, }, o4 s$ t5 _' kUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
+ B7 i0 }! i% d<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>5 F+ n9 ~) C4 G0 [) k
<P>
( O& I2 Z2 Q- m  {! c因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>5 P& Q2 w6 B  v; P9 [7 P
<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>
( T+ _5 S; r$ l; ]<P>取得函数的方法
6 C( p" X$ Z4 F4 O2 }( E4 e同上,取得函数可以用:</P>& r7 z6 j/ W! Q" J/ Z
<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>  e7 g5 Z' K$ d+ W
<P>取得隶属于某个用户的函数可以用:</P>
6 T0 F1 O2 ^6 d" L<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>% h0 f# c. B2 |1 k
<P>7 }+ x' r! A8 P: L& x
取得函数内容可以用:</P>
0 @$ g( i7 x3 ^$ i: H+ M2 B  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>' J, n1 H# A& E. `+ [4 Y1 G
<P>取得触发器的方法4 U; h$ e3 L. H7 g: U+ C
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>/ t) v7 O2 {3 k: K
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS& b* l; \+ {5 _6 p8 Z7 U
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。! c8 R1 @: T. r' S7 R! y
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
7 h' ^% \9 s4 Q7 {0 X3 b( h' u描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。2 y6 T" L4 P/ g" A& Z
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>. |, _, \; P4 Q- _
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>2 X* |9 @& n! _
<P>
9 ^' T: e0 A9 K0 r: Q; L( l因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
0 H1 O8 ]7 h7 P2 B: {; qSELECT 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>2 k) j; b$ _8 A; c
<P>
) W& Y0 p7 X, W" F6 L3 r% a取得触发器内容的方法:</P>
+ e3 j# a8 b0 d. b, t<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>; m* V, A8 [  ]+ E, J7 I& [8 [2 w/ N
<P>取得索引的方法
+ r4 y1 Y7 I7 }) r存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>1 O; X' y& f% J9 ^
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES
5 V% ]% r# V8 o描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
/ s' q! w0 j; f) TALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES
! e* Z+ d  g1 k/ Z% V% ^2 C9 {; A描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。
( y4 t1 ?$ \% x" B4 P" SUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
1 W) ]4 ]5 P) ]4 I* E1 D  q: g; O<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
" a$ Y" K/ \1 n<P>' k0 q8 Q% e" X- L5 c
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:
4 [5 X3 ?- F+ P' B6 t3 fSELECT 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>" u, J, F* {( S: i/ g: {, j) F  i
<P>
% i* c- Q5 y$ z8 o, E! A取得索引相关的列的方法:</P>) H7 `% b% ^4 y5 C/ 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>
$ r5 J, q2 D' B% [<P>用户
$ r% Z3 Y9 \/ F6 O存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>8 X% q/ Q1 l: G- \
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS- w: |& j: c1 T3 [( V, ^9 k; K) o
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。1 E% E; K, w9 A: U6 w
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS! B, X  s1 b/ t2 L# i4 `9 r
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
2 A" {/ a: u7 A7 CUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>
8 j) J3 h  r0 {7 l<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>& N/ g. _' s2 x/ M; Z; n
<P>
7 H- I$ o+ G8 T6 l+ [因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:' }/ v2 z: ~+ }" I
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 09:31 , Processed in 1.030596 second(s), 52 queries .

回顶部