QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象. B( r# p$ T& H
原作者姓名 Fang</FONT> </P>) G6 A% V2 z+ ~% ]% H
<>SQL SERVER
: `5 j: |9 Z  [取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法, f6 J! N, h% K+ \( v- _2 _" Z
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>
: _" U) r% C9 p/ E- }5 S<>或者</P>
, Q# T  X- B$ z# w+ p<>USE master</P>0 A  ~) t' ^6 J& A" t% Z( R+ d
<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>- F* l/ [* h. n! y: m& H( J
<>
/ r% o" c2 A, A6 M) |. ~  vsp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>! F+ @4 H/ c# X& c. H6 y. G
<>取得表的方法8 P/ A3 q7 d' b- B
系统存储过程</P>( s8 p& t* w3 l7 |
<>USE xxx</P>! S3 U$ D* P9 i" W
<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
/ p: Y. e* E- k* x: i0 [<>或者</P>, T( a9 F% h5 o7 x2 R8 l8 I
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
5 {5 m4 g3 A8 a* T+ ]0 ?* m<>USE DBAudit6 t# W2 Q3 Z, \0 [; y
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>
+ w! c  h" q4 W) g1 c<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
9 ~9 k: {! f& N; G) C( H2 M1 g# I<>USE DBAudit  U5 Q- l& I) a& ]/ N( {7 p
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
% W) _% F1 d- z5 k& c1 _<>或者统一使用:</P>
/ n6 r" k* m% ]3 T2 _! c- M0 }<>USE DBAudit</P>4 p6 U5 D/ S4 k3 b& N
<>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>3 A' [% M* h. u! `/ e3 N) x
<>注:</P>5 ?; g% v, j" u- P2 a
<>sysobjects中type字段类型解释:</P>; ], z1 r* v3 V5 x3 C
<>C = CHECK 约束</P>. I) v4 S6 q1 b0 P. N
<>D = 默认值或 DEFAULT 约束</P>+ G% x+ c: I# ]/ P! d5 i2 l. e
<>F = FOREIGN KEY 约束</P>% s! }9 f+ q) B& m2 Q( ?% b6 @
<>L = 日志</P>8 N! O1 _+ D0 x, B
<>FN = 标量函数</P>
* D/ P8 f* y+ n<>IF = 内嵌表函数</P>5 s7 u+ f+ |/ Q4 C' X" c  P0 A
<> = 存储过程</P>. x7 z, R1 j: z6 A' X
<>K = PRIMARY KEY 约束(类型是 K)</P>
2 \3 W1 N/ X/ a* R<>RF = 复制筛选存储过程</P>
' z3 m% b; P* n# Q<P>S = 系统表</P>
4 Z$ z) c3 I  i  _<P>TF = 表函数</P>
3 W/ q7 s& C% Y5 S<P>TR = 触发器</P>3 D9 `$ q& y* `/ }' J/ s
<P>U = 用户表</P># D7 c0 F5 i5 _/ v; ~# C. d
<P>UQ = UNIQUE 约束(类型是 K)</P>
7 W$ i" f1 B) S0 V: y7 @9 `) y6 l<P>V = 视图</P>
+ R/ t& P% f5 p<P>X = 扩展存储过程</P>: p! d- A1 X; ]6 F
<P>取得列的方法: ^' A5 ?" N8 F
系统存储过程</P>3 v+ I0 F& i0 Q! Y  p# ?
<P>USE xxxDatabase</P>. i, i9 Q, A3 I, V7 d
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>% G& B% l4 v3 h7 t  ^
<P>或者</P>5 o# j+ Q$ V# K: N
<P>USE xxxDatabase</P>
) v: I$ ]" o, k<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>. u" Y7 K0 q+ ~9 s/ m3 R
<P>这两种方法都可以取得包括视图的列。</P>9 }3 Z- e, s  H6 z
<P>取得视图的方法. p5 h2 Q% v2 `3 R5 S
系统存储过程</P>
/ A/ A  J. X' {<P>USE xxx</P>
0 X/ x9 ^/ K* ]+ p7 N<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
+ {; L, c( ?7 R5 d' _9 I2 m<P>或者</P>
# V2 W! ]* R7 J) E<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>5 w9 Q+ L7 F/ l2 _0 Z
<P>USE DBAudit</P>  I" v3 m, J6 {4 h& P" T5 ?
<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>6 w$ q  ?2 Z2 s: w& y' Q8 [
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>9 p/ H: S" l6 K7 r( s
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>( N# S( L; i8 ~: C$ `: M: E* j
<P>取得存储过程的方法7 ?7 G+ _  D+ n% A# Y0 I( Y6 `; n
系统存储过程</P>
# |. Q" D4 j; @- y<P>USE xxx</P>
* z9 `$ l4 p3 ]! d! _+ ]<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
% `; y& O0 |# A, o<P>或者</P>5 |' a) a4 `5 S( D( x3 B
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>  K4 ]/ ?$ c$ {# b' p
<P>USE DBAudit</P>! E( n" e& S4 g2 C5 o/ c
<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>0 O  @+ Y" s- {8 i0 J
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>/ `: _0 R7 v' }5 |* U0 V) }
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>' y! }6 i5 p5 G% V) N# f
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
% r& x' e: {7 {0 G1 [9 S<P>取得函数的方法7 g( U1 B+ h( G1 f# I. D+ h
系统存储过程</P>. P$ [) s1 C5 x. r" }/ Y
<P>USE xxx</P>
% A, E8 Y- R: X2 b4 V<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
. ^0 K" ?& k0 s( Y& O, \( D/ M<P>或者</P>" p; O  Q; m( p( F2 f
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
+ ]7 ^2 `0 P( m3 a% Z; l9 `<P>USE DBAudit</P>
- C+ ]  ]0 }, S: d<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>
! J; U( C( \8 j  a3 a, ?<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>5 L9 G4 d5 `* ]) I4 {. ~& S
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>& [: F5 z' S8 w* k+ l0 ?2 x, j8 d
<P>只能获取用户定义的函数内容。</P>
; g; f2 G' p8 ?* U& F* M<P>取得触发器的方法
- R; d2 ]" ]1 `# `6 ~/ J+ Z; `* w系统存储过程</P>
0 d* Z' l2 d: r<P>USE xxx</P>
# Y8 L7 y' `2 X: S# G+ ~1 ?4 z<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
4 \. E: U. U: G) s/ k' B) o2 x<P>或者</P>
5 [& r7 X3 O$ c<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>1 U' M3 d4 e  q- k& b
<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>  A) V% f+ j/ E, Q3 }3 j& r8 l; B
<P>取得索引的方法
; |: J9 Y, k& A9 d- q. m系统存储过程</P>
: J6 n+ ?2 ?5 O  v6 x; @: u% k<P>USE xxx</P>0 o! Y+ t0 ]& W+ \/ d  k
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>; |8 J/ H" N% v; N6 {9 ^, E( m
<P>用户% J+ w7 ]7 {1 J( }
系统存储过程</P>
2 ]$ d. }. h/ j, A<P>USE xxx</P>
' `4 h8 G" j5 z/ n1 j6 H6 F2 k<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>8 R$ L; O# D! y+ Z
<P>角色
" _, N7 Q' L# D9 ^' |! M: p( w系统存储过程</P>4 b( K# r: b( r2 A; X
<P>USE xxx/ I; ^# ?/ t0 l; A1 ?% K9 p+ o; }
EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>
/ u5 J0 }+ N* o! D  d. t
4 L4 y; A6 l( u: \$ S$ `" S# u7 [<P>ORACLE
! P# z% Y+ x  z特殊
8 H1 B  ~; x8 t% R. n&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>
- C8 u. j9 T. B) [% U! A<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>
6 s6 T- F+ G# P$ k<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
) u0 j% ^5 M; Q# o<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
! f- X! X$ s$ s只能由用户指定<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>3 V( p9 r. s3 d# g$ P
<P>取得表的方法. u: `: b! }  c$ F( Q. p
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>% h7 X: V$ S( A, e" H: \( t
<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>, X7 ^0 C8 [$ z2 f' y
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>2 Q( N1 B' D/ z9 L
<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 K4 a7 f0 _; x<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>! E9 K: o6 E) r* b% z
<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>
/ W$ F7 k4 U& Z& L) Q+ W<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>1 l1 w; u6 [" T% B% f
<P>. W3 O8 A5 Y; [6 Q5 C/ _3 y5 Y3 y3 w- x" b
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>9 n) N/ f) w$ H, g
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
! l, P7 B# A; ?; J<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
! @9 ]9 i# {; n( H3 _<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>
: b* G0 M, ?7 Z+ Q2 f" T4 \. W0 W<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>7 R- e. r7 V/ P' z; J3 ^+ _! a' y
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>) |, G5 F  p- i0 K. W( }
<P>
: d; V2 T* ~  M因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>1 h+ D$ g1 K3 H' N7 `
<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>
' V5 [. D  x! h& G& g* N. V- `<P>取得隶属于指定表空间的表:</P>
2 c) }5 W0 w7 J7 ^$ ~$ E" ~+ Q/ O; N<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>
7 G- ~* O, }; W7 u& w8 \<P>
4 k! O! C- f3 s也可以不指定用户名,从而取得所有的表。</P>
4 v9 a0 ~( f. ?5 k  j<P>SELECT TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES;</P>
4 W1 O9 f8 ?  u- O% t<P>取得列的方法2 ^0 o- c8 f8 E% |! ~8 C6 L0 \8 b
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>
: U0 R/ [9 {2 r! {7 d, G, C<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
* g7 @" ^# A. N描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。8 z" n( L2 ?! O9 A9 {/ [9 u
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
7 ^6 Q0 f: I# L! }9 q: X描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。' F" r$ G% W1 r" Q0 e1 f/ @8 E
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
% B) F7 d) p% X* O6 X$ s* _- x描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
& G9 o' T! g! J/ j" _! k% v( CALL<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>5 o* Q& ^: J! x5 d3 p" F5 M
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>0 ]/ t% `  e* c
<P>- S' C& o) R$ ~6 n7 c5 |( ?
因此,可以从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中取得隶属于指定用户的表:) g9 r1 V# n4 Y1 f, p: u1 r
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>
$ M; U1 a# z* e4 O<P>取得视图的方法
( E+ F% ?( m. T! \存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
0 F* V( @6 E9 F1 \, P( E/ X0 C4 b<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS8 I! Y! r# z% \
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。
( r- {- H2 r: m6 Z! D, ?ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS' ?$ C; H9 o$ C4 U# P2 y5 O' [! N
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。6 s. i" ^4 }6 a' |- s7 y
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
( d# Z2 J4 ]6 f( D& D<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>7 U8 @/ |/ i. y. B2 ^" O
<P>
+ ~! s1 i) T" V! C因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:
8 G/ S2 C- B& d/ X$ w' }3 ASELECT 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>9 M: f9 y3 Y# _  X: D( C4 N
<P>取得存储过程的方法
0 s1 p5 V& _, l存储系统对象的系统表/视图有:</P>/ d$ @. m" D! Q- H, g
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>. e" {3 p( N1 u+ r
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>
8 w& \  K+ @9 v<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS
. i& d: G: O7 I4 p描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。" p( l, S" |' ~- B* w3 t  K
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
! u/ d9 P8 X, U/ w2 W<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>7 G( k( y' w; M& V; e0 P
<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>- `" j  n' Q9 u( w, h
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>' q9 N9 _4 x/ @) f, h/ z3 k
<P>: @! f; H! `9 Q4 T! ]' J* f
对象类型有:</P>* Y! ?5 i# p0 x4 S2 i
<P>CONSUMER GROUP</P>1 S( a7 o; n% Q, c
<P>CONTEXT</P>4 }. W. e" ~: |2 V1 S2 A& i
<P>DIRECTORY</P>! J+ }) O4 O, W
<P>FUNCTION</P>
; J, H( v! c. E7 k8 ^) e/ ?<P>INDEX</P>
6 @& Y1 f9 R* u5 w% F<P>INDEX PARTITION</P>
9 d! R, T5 W( ]2 T<P>INDEXTYPE</P>7 {4 V  h3 r& J1 S# M& \
<P>JAVA CLASS</P>9 Z4 ?0 z# ?! i
<P>JAVA DATA</P>  X4 l8 m% h$ Z6 u
<P>JAVA RESOURCE</P>
2 f: i' D9 [% v) |% ]) v8 g; E<P>JAVA SOURCE</P>
' A" z/ b* ]8 m! b: l2 c) e<P>LIBRARY</P>
( i! y" Q& ~6 t- x3 R<P>LOB</P>0 E5 Y" N6 N4 K: U
<P>MATERIALIZED VIEW</P>7 ]& i3 g' i, y3 F. k
<P>OPERATOR</P>
7 |# i% r$ i4 }3 Q% U4 G<P>PACKAGE</P>1 l$ s, @" s8 x. p% _$ W
<P>PACKAGE BODY</P>
5 @' C3 B* H: J! N$ d2 G0 w<P>PROCEDURE</P>
3 V& H+ `5 N& k; Y2 J: h8 J/ p3 P* Q: F<P>QUEUE</P>  s1 l: R/ \  }- m
<P>SEQUENCE</P>
1 n2 ~6 t5 Y4 w# |9 h<P>SYNONYM</P>
5 \: w% h& Q& r9 p4 q<P>TABLE</P>1 Y4 G# {! }2 P/ ^5 h
<P>TABLE PARTITION</P># q! k+ Y8 R# C* ^# `) f
<P>TRIGGER</P>
, v. F% _3 w7 r* k<P>TYPE</P>
: U& n  Z! T+ \<P>TYPE BODY</P>
! w; U1 b( R8 p6 G7 c<P>VIEW</P>+ |4 \) ]4 K2 w
<P>
& M& V2 P' q! z/ ?! _因此,取得存储过程可以用:</P>
% v: F8 F. T( \1 t/ D, D: I& I<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>
5 j; G# u* Y5 \8 z: `* B# v% X5 D- @<P>取得隶属于某个用户的存储过程可以用:</P>
$ d0 ^2 r) A7 j% V: ~) \& 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' AND OWNER = ‘DBAUDIT';</P>
' I* H3 h5 Q4 X+ U* J! `* [* U<P>
+ U: f: k7 r; U同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>
+ _" c6 V- l0 w/ g<P>取得存储过程内容的方法
( s+ k- k- y& [/ K6 E9 z对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>& y( c4 j3 f; J1 l; B1 h1 w/ |' @
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
+ i3 ^' i6 U" J0 l, v$ }9 c<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
; @6 }( P2 q& T5 s<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE. S# H! b: [- u8 k& N
存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。& s) d) U: p, L6 \+ i4 c8 J
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
0 o5 ^2 z! s# L% h  [2 E<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
& v% N6 \" g! N& o<P>2 U  q/ T' N) H% p3 \
因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>
8 w  Z( G1 L8 B6 g: h6 J<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>$ m/ ?4 b/ K8 S$ l/ L2 w
<P>取得函数的方法' h& ~7 A) _& S
同上,取得函数可以用:</P>- c9 o7 I6 e0 ^  t, S
<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>
9 P0 z$ W  [' N$ {/ H. w- |<P>取得隶属于某个用户的函数可以用:</P>' b; {' _8 t( \1 K! ]6 O7 ~
<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>, }& \+ B3 y$ A) Z+ |$ W+ b
<P>
- f0 }8 ]# Q* C  P7 z) w0 T取得函数内容可以用:</P>
6 {6 l5 C$ a3 k% B' l5 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>
! f( L9 U+ B! p# |; E) j<P>取得触发器的方法. L5 w0 A! s- G; h$ G/ D
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>
# t' _! c% _, G2 e<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS
. @) U- F8 r, h! |  V" g  i: {* P描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。& G6 E% o+ `7 K# U/ n6 y* I
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
; D; w3 R3 L  f, A" V. p( {1 v描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。
7 j1 d8 N! a  D/ m! `USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>8 Y7 V9 M8 k: v9 G, v: B
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>. c! n  G- S; J
<P>3 Q* w2 O1 S) F6 K' I* [) H6 h
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:3 r+ e$ j7 V& k& x- m, R2 N3 a7 ?  ]
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>8 X  k# |# D* A( g1 x2 g
<P>
6 \8 X. a% B4 c, ?取得触发器内容的方法:</P>, d; \6 x) k7 i: f; l
<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>( N6 \8 j1 U( A4 w+ V+ J
<P>取得索引的方法( z- Z2 }; o8 G" [0 l) P
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>2 l* t" n. `) q3 c- z7 e
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES
. f1 {' z5 [$ U9 t/ }! K# t描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
- A  R5 |& t. J$ s" g$ [2 {; aALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES
2 N2 f( _! A8 s' V! f' N- |描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。
( D3 G9 Y3 P3 Q+ t2 b+ OUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
9 T7 U3 ~7 i: U! ~  m' K5 M<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
, n! G" G7 A" W$ K<P>
" E/ ^1 n' n" i: l  ^因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:' M3 U  i  t* `* |4 S. S9 G" I  |4 p- ?
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>
; P8 z% Q- m6 Q, z4 `<P>
5 r5 W! {+ @; T% Q# Y2 M% a取得索引相关的列的方法:</P>
7 U; y- @; G1 |  z8 y4 x, q. ^  C( 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>4 F% t: I+ C- [& b: L, d+ W# P
<P>用户2 l5 Y7 W' J3 |
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>
1 T/ \2 @/ |9 n  w$ d$ K<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS7 T  h; I. k% r- {* m/ ~6 _* Q
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
. {: [* ^+ {/ n4 @3 GALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS* d- s3 ]/ n9 r3 N0 z' G
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
& v- c/ L  G+ i0 }- ^$ h1 S" MUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>+ w$ ?$ B2 I- _/ {4 _5 M' V4 N
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>5 d$ o/ ]8 l0 U0 _. ~5 \& X9 R
<P>4 P* E& ~. G0 ]0 I8 l
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:6 T7 _, o7 ~8 q
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-6-12 05:13 , Processed in 0.437319 second(s), 52 queries .

回顶部