QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2665|回复: 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 l) h1 x1 j6 T- U" y  k! r( q8 H
原作者姓名 Fang</FONT> </P>1 \* H- B8 s0 \9 ]* g1 [; Z, S; J
<>SQL SERVER
5 r( c# I8 w8 ?) M0 L2 W- h取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法3 d( P# I2 t* T: W! \; V3 Z
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>
( \5 D# w9 t- b0 H; S<>或者</P>4 U; O! i" }6 F% V- ^: U, W9 [
<>USE master</P>
4 D) ^" K: O9 i0 g* B+ ]: ^' f+ L9 t<>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& h8 R6 C. _; l
<>3 a$ s5 t& J4 q1 I1 t4 b# T
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
, K$ X# k% k( U9 N/ K+ c# z( c<>取得表的方法
$ Z' H# d( ?- k0 _4 ?& o系统存储过程</P>: I7 E* |6 c( k+ B8 F8 W
<>USE xxx</P># |5 l5 d8 D+ I" \
<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>: a* D. E! c  l/ k4 [
<>或者</P>
9 f6 }3 Q. o: f8 T8 }9 i<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>4 W. Q: G8 O: q5 m# M$ S% ~* s
<>USE DBAudit
& {. d+ t% ^: Y) l1 Y, {SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>
/ D: g; y7 C$ e1 n* B<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>9 B- ?9 O( ]! t0 P% P- l
<>USE DBAudit9 x6 d% g: @  I5 Z! ~: b
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
- `3 t+ g  S9 c<>或者统一使用:</P>
1 r5 ^7 O7 w. `. B<>USE DBAudit</P>; t9 U; Q" x; X& O1 f
<>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>4 u% b3 {/ Q$ S) u7 q
<>注:</P>& }& C" w- P, `- G3 `
<>sysobjects中type字段类型解释:</P>" z1 ^! a1 D2 p* j" v: r/ A1 I" N. B
<>C = CHECK 约束</P>7 k0 [' ^( \2 Z
<>D = 默认值或 DEFAULT 约束</P>9 n6 U7 y/ i3 n4 ^% X  T  I
<>F = FOREIGN KEY 约束</P>
2 m3 @" z* S* X2 J/ l' r* A<>L = 日志</P>
. L4 S4 A* b; ~# x+ \8 a6 j# L<>FN = 标量函数</P>
$ k5 o9 s9 A+ U( ]- ]' B( g<>IF = 内嵌表函数</P>
, J+ d; ^* j% ]<> = 存储过程</P>
7 K" `3 ]9 r7 J3 O3 j<>K = PRIMARY KEY 约束(类型是 K)</P>
  @' r) j7 |  h( k1 z7 j<>RF = 复制筛选存储过程</P>
  G0 ^; p* ?5 S, y' P" v) ~<P>S = 系统表</P>
8 H6 D( L: V9 L* V: Z7 ?* V8 X<P>TF = 表函数</P>0 j% X$ t6 t0 p
<P>TR = 触发器</P># F7 _; _4 L9 n% i. r" V
<P>U = 用户表</P>/ ]% x+ W: j4 @7 I) o! U. U" y
<P>UQ = UNIQUE 约束(类型是 K)</P>/ m" x- A5 Q% V* w/ `
<P>V = 视图</P>
5 F/ j$ K! }* r4 k<P>X = 扩展存储过程</P>5 F3 z2 m% ~/ G5 Y5 y! I
<P>取得列的方法
" c* ]0 N8 g+ a9 a0 A/ r系统存储过程</P>5 Q5 s  h4 z! p1 ]! Q+ C; ^
<P>USE xxxDatabase</P>
# P) v5 B, H" c" _6 U<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>
% ^; e$ E$ Y3 u, f& ~3 T8 I<P>或者</P>9 m# j6 J* u/ t+ l/ Z
<P>USE xxxDatabase</P>* F: z1 [/ C% H) O5 R/ s) J8 U' r
<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>
( \7 ~$ f* }! w  R0 O* H. ?<P>这两种方法都可以取得包括视图的列。</P>7 y, _7 D' p0 ^; a- d1 j2 h
<P>取得视图的方法
2 n/ l% x2 S! \2 D2 {系统存储过程</P>. K2 X/ w2 |! G2 F9 ~  Y
<P>USE xxx</P>/ q$ ?& `0 G5 B' v9 q# W
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
+ Z1 G1 G5 m% Z! O8 q+ n<P>或者</P>( t, X# A7 r) {8 m% ?
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>4 {0 M$ s+ C9 Z, b% z$ r# S
<P>USE DBAudit</P>
$ [6 h9 ^1 ?1 B7 \/ V* A<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>8 `$ P  s1 x/ ]& h5 y0 @
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>/ P1 h- v" z( ]8 L- F9 j
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
8 y' ~- C' w7 n/ a4 |<P>取得存储过程的方法
* Y; H2 P3 _$ ^# h9 Z系统存储过程</P>% L& i; \& c2 w+ F9 f  T* ]& |/ ^
<P>USE xxx</P>
) G0 S2 f# x" K" g* e- x  p" j<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
" i/ o% O( c' B9 o$ a% m6 \<P>或者</P>
$ y: }, p( f" w; N; j<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>2 u1 C9 _0 [$ e
<P>USE DBAudit</P>
, Z6 G! v: i$ t  a" _/ T<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>
2 A' ]( k' q5 ?<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
- x, j, Z$ L% E! t<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>3 g* R1 _3 x' j' @' B7 Q
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
. {9 e8 R$ i, l9 z' s<P>取得函数的方法
" k0 v3 N" R9 g% a& [8 x, ?' b系统存储过程</P>) `# m& r! k% o2 q' k4 s. z2 y1 {
<P>USE xxx</P>2 y( J/ d8 i% N- b% S
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
! Q1 K% Y# k' g; b: \<P>或者</P>
% z4 y7 c- V& K: {0 K0 M<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
  E) @$ J) Z9 H- S' H/ ]: k! ^<P>USE DBAudit</P>$ j* g( M  |$ x( [$ u
<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>
$ d# k4 F) h: j! h  R* V; V- w  L<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>* Z6 x  l1 w9 y( M( n3 @
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
5 f) n( o. `) v# \5 X<P>只能获取用户定义的函数内容。</P>
, ^& m8 a1 M% q* F* P<P>取得触发器的方法% h8 q% J7 r9 e8 W, g" l
系统存储过程</P>$ o6 `4 |$ B( u& E8 I7 J# ~0 a# z
<P>USE xxx</P>
: j8 m3 A; u/ J3 p: z( @( A<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
. z- ]) v. J" L. b<P>或者</P>+ Z" d0 M) S( }4 {7 o$ m
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P># {& w7 K3 N+ b5 E7 n6 F1 H5 f: x2 W
<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>
  x7 s' k8 _) k7 F# T. F) s' z<P>取得索引的方法
% b: H: H! g2 t+ T8 H系统存储过程</P>
( i; L4 `; m1 S# f: e1 m+ ~+ p<P>USE xxx</P>, w0 T* f/ q6 S0 [* U% h7 B: g
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>
2 |2 S2 O- n6 V$ l# \% z<P>用户
8 @" z. P' c! _" b系统存储过程</P>8 I+ S0 \/ e: p) @  J
<P>USE xxx</P>6 u: p: a- ~7 m
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>
( ]% ?( Z0 z3 X8 r  k* t( Z9 i7 @<P>角色3 X& P' G5 G6 ^3 @# ^' @) w
系统存储过程</P>
6 Q' k7 }+ k* I) a<P>USE xxx
8 ~6 p, l4 c7 i% ~3 b/ p" b% h6 TEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>% {6 k/ U- W  `) F/ D1 e6 t

3 X$ Q7 q4 Z* |/ F  C; O. Q' J# \<P>ORACLE3 \- h3 v6 F3 u" U
特殊
& V0 @" [$ W) R' }4 l% {$ z&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>5 @( V( H; G1 |( }8 F6 g
<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>
& f$ g# L7 K- u/ s9 B8 P' {! u<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
/ _, W- l8 B1 n  X2 h<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法2 s5 }! o; K4 k7 C
只能由用户指定<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>9 g/ P, n# R* a( n
<P>取得表的方法" a' h5 N" D% o% M$ G
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>. i# r. n9 ?6 h
<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>, m, x  E4 L* h( ~
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>; M9 G" x0 C( A. j* j
<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 v/ g  x' T' N- Q- }<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>$ L  Z5 Z. |' k, X0 F1 O- t
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES</P>& Z8 v% F& T2 |+ r- w- P
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
5 b! k- a; w8 i! p+ A) G<P>* N6 u$ c" `$ g/ e8 M% r
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>1 b6 `% a7 |0 c. m, |7 `3 Y# o1 M7 J
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>3 H  y4 h% J* n; }9 B
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
! V, A) z7 B5 u/ C6 i<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>
; d! b& e6 p! v( U# z5 P<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
1 a; d5 o; p- t. j<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>: W4 m3 I  n7 D$ P$ P" A
<P>- C7 |( P: S& l  O$ B
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>
7 B* b) J) Q4 ^0 a5 Z+ w9 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 WHERE OWNER = 'DBAUDIT';</P>6 [& A$ E% A4 \0 q" f; ~  D  H7 g9 D! E
<P>取得隶属于指定表空间的表:</P># Y4 a6 M* }1 y& `; r' }& w3 h3 U
<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>: ]( o' e% e! ~
<P>
" T/ G4 Y/ w3 p& S' L4 j; S也可以不指定用户名,从而取得所有的表。</P>
* n9 S) j8 J* v9 g& |<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>* g. T" g0 w. Q; t
<P>取得列的方法/ Z( w- u" Z; n& }
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>3 U; i6 @9 W) O0 _; Z1 K% h
<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
: ^- P: G* ]8 L描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。' K! s4 `5 E( Z1 ?, y& m2 M' 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>COLUMNS
( f' J6 [- P/ W+ W9 i描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
/ z& L5 m; L4 o. yUSER<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' {( N1 u( ]9 X2 @( r& n
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
1 k2 B: q, ]8 D8 Q' N7 b6 {" wALL<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>* r# V% W7 l/ Y: e: a3 c
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>
& z; A: @+ ]. B7 t6 ^  @<P>
1 l- c, w/ `/ {+ F. z5 d/ 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>COLUMNS中取得隶属于指定用户的表:
5 g' l: n' L* |4 x, m+ ^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>+ Q9 X2 z& s' Y! v0 B
<P>取得视图的方法& v! G4 h6 V6 e) k: k2 T8 b3 h
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
4 X: ?2 \7 G4 C6 t/ }<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS7 m2 U) S5 S5 p# u7 {5 I
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。) c0 _  @, Y1 p. S6 B+ D0 Z
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS- b3 F8 G, u, H3 m
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。( V! g1 ?0 g8 o1 q
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>+ K9 d8 v; |3 d1 ]) `: L9 ^
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
3 e; v) x3 }- P# H$ r8 r0 D6 @<P>4 a7 w4 |, k8 \
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:2 ?! o& r. Q+ |! N2 `
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>
7 U4 j- ]3 b. ]* x<P>取得存储过程的方法
+ P1 Z% t( i4 c2 L. \' D* y7 y, M存储系统对象的系统表/视图有:</P>; }' Q5 Q3 \+ ]7 y
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>! O$ w( V7 i7 J, ]/ M5 K
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>' N0 w' T! |7 O' y- P
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS7 }) V4 J1 t( ?: j
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。- K3 N3 F9 i( K  T9 o; ?, d
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>& _6 _: z; X* d* }" f2 T
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>
& y! I/ g& b% A1 E$ Q! L<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>: D6 E' t7 f; [7 c  u
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>2 r6 K# Z' P' _4 i5 v1 f
<P>
3 v, Y0 _7 g' {. Y对象类型有:</P>
, N9 K, J% K  H4 C. R0 y<P>CONSUMER GROUP</P>
( f  m, a: u7 [6 A9 b<P>CONTEXT</P>
6 _9 x2 T& {  ^# b  e<P>DIRECTORY</P>
: F, W: v+ V1 m7 b+ O, p; [- `, T<P>FUNCTION</P>
( i  B1 I1 ^  E<P>INDEX</P>
% j4 C) I7 z2 t2 H  }& S<P>INDEX PARTITION</P>" Q; W' t& `/ W
<P>INDEXTYPE</P>/ y* G0 V; ]$ n, Y( k5 j
<P>JAVA CLASS</P>
- A' V8 K  d5 O; b<P>JAVA DATA</P>
$ a, O- z1 x2 a& w<P>JAVA RESOURCE</P>
+ w; J. j0 \3 a<P>JAVA SOURCE</P>
0 ~' T1 r+ ]1 e3 `# J<P>LIBRARY</P>
* T( x% i- V5 T<P>LOB</P>! V* q. B8 S' [% _3 k
<P>MATERIALIZED VIEW</P>4 d1 j- L3 A6 ?
<P>OPERATOR</P>
+ ?. l0 k4 t" G. ]0 U<P>PACKAGE</P>: V7 W5 Q1 F8 `' O
<P>PACKAGE BODY</P>
# T2 X7 @0 X: x1 c. c- x& P<P>PROCEDURE</P>, p" q+ ]; ~4 V$ Q) \# O, Q
<P>QUEUE</P>
* ^* c$ Y1 o2 P% G<P>SEQUENCE</P>
( A) q3 ^3 f& e8 B' m<P>SYNONYM</P>$ V, D; z8 ]% W, H
<P>TABLE</P>$ O5 m9 \4 z0 B8 b; d# R
<P>TABLE PARTITION</P>
0 U% n# y! G9 K5 l( H' b<P>TRIGGER</P>0 m0 [2 h$ w" j7 t  e, y
<P>TYPE</P>* l0 l- z8 `$ g" c+ ?- O
<P>TYPE BODY</P>
# {% F1 i' B% p8 i<P>VIEW</P>( ~7 P  v3 V: B% w- T
<P>
0 u* H& i& U9 ^! G  z% Z因此,取得存储过程可以用:</P>
( H- f8 n1 q' a  C7 [+ 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 = 'PROCEDURE';</P>
! B7 ^% z% M2 F" E( t4 C2 `<P>取得隶属于某个用户的存储过程可以用:</P>
; D, c$ g  P6 P# X# @  p<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'PROCEDURE' AND OWNER = ‘DBAUDIT';</P>
2 Y& w& ?: y* |; `<P>
+ ?: x/ G( U/ ?$ u% p同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>
; j4 A& N. u: V0 l<P>取得存储过程内容的方法$ s2 [& g+ Y' e4 h, {$ h4 t! s# d* f
对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>
2 f8 s5 B: f% X) E: `<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>0 F+ H, O" i6 q: b3 M
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>6 A2 q1 t$ ]% ^( e$ ?. U
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE: Q" \# G! b! u8 t5 f9 k
存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。' I6 Y' z7 ^% F( @4 Q0 w
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>6 c1 o$ I0 z* y7 h; V( z" T% G
<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>* }2 D( u4 g, k
<P>
4 Y0 c9 Y$ p) l+ ~2 m6 O% _因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>
& Y# W2 g; l; v& ^( Y0 o<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>
' ?+ |7 r9 N) {/ Z; W<P>取得函数的方法
9 f3 h4 ?, i9 l: n: Z同上,取得函数可以用:</P>9 k" O0 ~7 G" P! i: 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';</P>
- [/ X. J, o5 }0 C8 ~- ^' k<P>取得隶属于某个用户的函数可以用:</P>6 ]% v" q( ~( 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 = 'FUNCTION' AND OWNER = 'DBAUDIT';</P>- M9 b+ s8 ~7 \/ B
<P>
4 N+ h* J1 ~8 D3 I& l3 {  I取得函数内容可以用:</P>
* j0 n% N( D+ Y4 N8 A) a6 d<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>! ~! I8 U' N: J
<P>取得触发器的方法
2 x, @7 y+ ~6 v. Q# T4 N$ z存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>% m. n! w% t7 Q
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS- d( g$ f2 ]2 X% F9 |1 {
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。5 N2 j2 d* V1 r4 R, n6 k& u4 y3 n
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS2 x& Q/ `% |6 \! W" v, n9 c
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。' V* B$ j7 H: @' v$ V' W
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>
+ j5 v; c4 E3 M5 G+ y: d& w<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>' L9 F; ]/ F% [4 z3 o
<P>
$ `4 @0 k( y; H7 j. j5 f# {1 e因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:# c% F: f6 F2 p* Y/ ]
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>1 S( B9 n; ]! w
<P>4 P! |6 p& c; e/ j
取得触发器内容的方法:</P>6 @0 @" f$ u+ [3 o& _
<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>
  k8 N1 t% r. e. ~8 D; T6 @) c<P>取得索引的方法) H( l# [6 o$ x
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
8 t' u3 p" \0 U9 C5 ]! B  @4 g/ C<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES
( g5 D2 G" n9 H8 I% N0 g1 U描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
, I! \9 Z% d( T- O2 [! {' W& nALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES
* c. `3 k% ~) Y4 o; K, g- P描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。6 Y* s4 c; I2 G7 z1 r2 H
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>0 j- s$ Q4 r  ^# G! D6 [
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
0 F+ d5 |& X! y- k# ]4 b& L<P>
1 g* k0 a: v- |- y因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:
6 {* }. d: |- SSELECT 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>7 n1 M' c$ P7 q: q( A
<P>
; E' Y( J6 B# I6 Q- |! h; z$ a取得索引相关的列的方法:</P>
" M& `1 ]5 p" _. ^<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>; {6 p- b% n- {4 `
<P>用户
" t7 M( M+ F; N& V8 T$ O$ o- i( r存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>4 f% H. k7 j" O6 y
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS) ^7 `8 l3 i* X) Q7 g& R. i
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
' x4 D$ I  I4 J/ B) S& mALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS  [& a0 d: \  V) z7 u
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。5 a) U3 A7 l9 Q
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>* q7 a/ z4 X8 f5 q
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
* s% w3 K; w' w2 ^; d3 B% C<P>, g3 ?* \' w: L
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:! A, K  `; Q$ v/ i2 j, x
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-8-8 23:09 , Processed in 4.427580 second(s), 52 queries .

回顶部