QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象5 b1 A4 ~& ~7 E6 K1 B
原作者姓名 Fang</FONT> </P>9 W3 `- S  D  [6 r. g
<>SQL SERVER
/ B+ f% w6 H0 x9 _取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法* i. _/ U5 a5 }
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>
7 l5 R. J9 ?8 K! y<>或者</P>
2 Q0 h! c; b) l( e6 T: @: A3 Q<>USE master</P>7 A$ R; o& i: M* A3 ]7 M
<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>
% T! f- I: q" n. ^' }. o* S<>5 \1 |6 P0 t- e2 z+ \* X
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
+ k6 x  k5 }+ {( b1 H<>取得表的方法1 r, N4 x% U% s! A8 S- k1 X
系统存储过程</P>$ g0 A, t' U* u, x/ e
<>USE xxx</P>
3 O1 d: t9 F- l! @; j+ W6 y+ L<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>" x4 g* v4 a, L" j% N
<>或者</P>' P! ?! X  T7 T# p4 ^
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
6 B9 Z5 H3 N" w& z8 y<>USE DBAudit
) {5 _2 q: L& J, e* Z. {% w! E6 g* zSELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>
) l+ k* b) b& ~; k/ z<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
0 a& Z) T2 ?  V+ v1 {1 ^<>USE DBAudit
4 U+ \: t$ ~- z! BSELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
, H, X4 E: B( h/ q6 G: M<>或者统一使用:</P>! W- M: P( k$ J, F; H' s" V5 g/ S
<>USE DBAudit</P>" k5 c* }$ i( D3 b4 m1 u' ~: I
<>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>  U3 Y2 J' |+ M  q- l/ l' J" J9 o& \
<>注:</P>
. [4 I7 `$ n% \1 f9 [. s6 \<>sysobjects中type字段类型解释:</P>
7 U4 c" G% l& V1 a4 x<>C = CHECK 约束</P>
# K& w1 i' j. J/ _5 Q' u7 i: z<>D = 默认值或 DEFAULT 约束</P>
) i& J& _6 v% v% q1 c4 Q<>F = FOREIGN KEY 约束</P>/ Z& G" t& v/ g4 t
<>L = 日志</P>
2 ~+ U+ P6 }! j4 T+ N# s<>FN = 标量函数</P>
4 n3 ?( u8 C  D& T<>IF = 内嵌表函数</P>
* D7 l! X6 E& {9 ]. o1 V<> = 存储过程</P>0 ^" l# U5 [, s6 |& x" a
<>K = PRIMARY KEY 约束(类型是 K)</P>! P3 L9 I( }, A" r' K
<>RF = 复制筛选存储过程</P>; _9 v4 x" P7 R, f+ m) j% E- ]7 }! h
<P>S = 系统表</P>
! X; p, N" {1 C0 ]0 e( y- a* e/ i* D<P>TF = 表函数</P>& ^9 f+ I+ ^9 _- s6 K
<P>TR = 触发器</P>
4 E1 W* q3 z4 Y% L9 H<P>U = 用户表</P>
. p) M! t. H: z- ]7 p<P>UQ = UNIQUE 约束(类型是 K)</P>
! d1 _: a9 `6 t4 r<P>V = 视图</P>
8 l7 ~; {* o1 m1 @9 n<P>X = 扩展存储过程</P>9 }  p  n0 a; C: ]; _! C
<P>取得列的方法
# f( l- m4 R2 D( @' {" `系统存储过程</P>
7 i4 U2 U' a$ S! E8 \, X& K% e<P>USE xxxDatabase</P>1 Q4 K( e5 d* f  y$ B% e+ Y* c/ @" O
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>. {: }8 ^$ \2 H$ F, V3 L5 e1 m
<P>或者</P>
/ |. L- y/ O% P5 l) D5 o9 `0 u6 `9 k<P>USE xxxDatabase</P>- O; P; R% m) W1 j. \* i7 q
<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>
0 `' E( J( b9 ~0 b/ a7 d<P>这两种方法都可以取得包括视图的列。</P>. e5 I7 w& c& V0 X  a7 F
<P>取得视图的方法
& \2 ^* X$ P3 s4 U$ U) ^; y4 u) m系统存储过程</P>' r- _, E* M% A2 G1 G
<P>USE xxx</P>
+ c$ Z, m; q/ Y' E+ ?) Y4 n<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
9 O( \8 R) D: n5 y<P>或者</P>  x. _2 y1 |, b4 D
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>5 y7 f! Y9 Q  H$ a$ I
<P>USE DBAudit</P>
# t/ L" d7 T6 @+ J<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>& p; w$ P. F: e. K# E- z
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>& q1 l0 s0 y$ E" W  Y1 b) d/ O4 b
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>  V* D1 D, q% ~+ y
<P>取得存储过程的方法; d- T$ d3 O1 x1 o1 X, m
系统存储过程</P>
2 j$ A6 ]& ]8 U5 [- h7 K* B( y7 B<P>USE xxx</P># F; W. U- H; W& M
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>, v. B- v* j- I, X, L* @! F
<P>或者</P>
, n2 E/ e/ ?2 F* Q1 @/ u, U, x( i<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>
+ I) v# j- w+ v<P>USE DBAudit</P>: e' d+ b& u! G4 `/ {# [& U. |8 B: M
<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& m5 b0 P/ Z9 U
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
3 A; ?; P; V" I# }<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>, `6 T' S/ n: _( g5 U
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>( ]( ]! O3 a/ M2 c
<P>取得函数的方法
+ S) z7 r9 j! Z1 U7 ]. y& [+ c5 ~系统存储过程</P>1 D- Z0 [0 L9 Q! C  T0 n: ]% Y( A
<P>USE xxx</P>
. B$ B' c0 P7 m' ^9 N<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
, x8 `+ q6 h- k+ A<P>或者</P># ?$ \* t. a5 V. n( H4 p$ \& z
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>" u9 D) i  V8 E. L9 ]- D
<P>USE DBAudit</P>
8 N1 x2 ^2 ~3 p$ 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>
2 h1 v2 K- h) x8 G<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>* Y% U- a5 p& n
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
$ V% G0 H- a2 |' W<P>只能获取用户定义的函数内容。</P>
3 ]3 y8 q3 ~0 z<P>取得触发器的方法
7 v- ]2 S* r2 G6 }) @系统存储过程</P>' G+ _) l# \, I) m+ i4 @7 X+ J- X
<P>USE xxx</P>
: d' e* B3 Q4 u+ l( B<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
+ |0 W7 R  \9 r4 [4 h<P>或者</P>) g9 f" x0 C) h
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>4 W! t2 S/ y' Y$ o4 J. b- a* q/ u
<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>
# f- u# G9 ]' s! `/ ]( l4 P<P>取得索引的方法% V+ {1 x  a' z, r4 b
系统存储过程</P>
0 c  j% \% N2 A1 T8 B+ m8 u* J0 V) Q2 k<P>USE xxx</P>9 I9 o1 w3 T- J9 `+ t+ r! M; B4 S
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>) t  V9 a8 \! T7 k4 R( X9 i
<P>用户
# C7 h* ]: Z" H, j" c系统存储过程</P>3 c$ M9 p2 b, o: C% V  Q  m
<P>USE xxx</P>8 M' O; J' a, m4 O0 X: a5 T3 Y$ |
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>0 `8 [6 O7 n  [. x& p' ?* z
<P>角色
0 y2 u; _# Q" E* R( I  X系统存储过程</P>$ }/ R1 \0 i2 h0 F: V/ w6 R
<P>USE xxx
+ A3 o* t9 X! Y6 l! V. MEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>+ Y$ c" C5 G2 o' R# `& p* t

6 s& ]$ U4 O; Y3 {* U, m<P>ORACLE; {. Y+ W0 [4 F( r
特殊
! w) [0 x; Z2 J&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>
2 x4 c: y$ i, ]4 _9 \* N8 L# D<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>9 r2 s$ c, [% z9 q/ L
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>" n2 ~. d+ n+ d; `2 r
<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
+ U" L- e0 C; K) y$ y4 M只能由用户指定<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>
; L+ {5 G- N  x<P>取得表的方法
; F& ?# m5 a/ Z& L4 d* a# D存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>
' U3 L% c5 T/ ^" U! ^( j<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>
* t7 B6 O' q# G; u) H! g# G; ]<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>1 z7 n9 w% m' Q- v7 A( R
<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>, E8 o+ o* R# e
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>, K9 A$ Z9 `( Q+ S( I) A* M, o( C. i
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES</P>
7 j% {1 A  p' A6 [( L4 z& H5 y<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
& J0 P# J& y% E! A' U* E<P>) J" t3 ]1 z8 I3 J9 c" K2 E
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
; M/ g5 \: B# h# u! d( B- ?/ v<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
% r  h; X% O6 T" l6 e<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>" `* I% n- w, ~4 U4 v/ V) n6 c4 p
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>$ ]& Y+ j* t& B( w) V& ]# P( D" u
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>5 Q  w, A, z5 v6 }
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
  D* r# }  b. \( t7 y7 g/ T<P>  H7 l* J" ^( N. O6 x& g
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>+ n8 t9 [. m; M- q% }! M* C* I! 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>
/ B" J/ b( r, }<P>取得隶属于指定表空间的表:</P>+ N; _  G! d7 p* P2 H- X
<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>
# E3 u9 o8 P0 d. s" [; Q) t9 |6 u. ]2 O<P>+ I9 v5 l4 N9 k" q
也可以不指定用户名,从而取得所有的表。</P>5 V# m  W2 S. ^! K- i- F: [
<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>
+ o3 X" f1 S- s. z7 ~/ p  Q<P>取得列的方法) p+ a1 {) p$ Z( H
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>
% n( g$ C5 ]/ `( W# o% i<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
$ o2 Z1 ~) b8 M$ }描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。' V& n0 [" f. ^: ^( o
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$ o: s- i4 l! x/ a' M+ @9 ~8 d
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
2 ?" x1 _3 D2 f% ~! zUSER<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
, {: M9 y. ]- I3 f描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
- m/ Z% B( G4 r/ _  r9 VALL<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>/ c+ z% ?- q6 U
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>3 L3 m, \2 v0 \9 P" U
<P>
- W* J( e5 N: \+ o因此,可以从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中取得隶属于指定用户的表:
  \# G/ M7 G+ A- u1 z# H2 e7 zSELECT 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>
) b' C- ]; d* C( k<P>取得视图的方法6 Z( L: b+ ?( @2 \
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>  ~# r' O& I" ]3 w* M  g2 e5 Y
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
9 K! y  d2 h  u, b0 _9 O描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。
+ x7 _0 W6 t( Z, JALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
/ b( ^2 K5 ?) ]+ ~; {* R7 @/ A/ F描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
" S5 U% U9 R0 S3 r9 ?- hUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
0 B3 @3 A8 I" H6 Y<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>" X0 b- D6 c! M& V
<P>
( p5 [% }* {: V( I因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:  F- A/ d$ ~3 M; A# |- h! Z: F" w
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>
1 u' ~/ H' w6 \# E. ]<P>取得存储过程的方法
% K  V$ p" z, T9 B5 v% m3 ~2 R存储系统对象的系统表/视图有:</P>5 U3 U4 A% z1 ^1 P
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
; R0 P7 h2 S" r+ M0 @, v<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>
/ v) e7 K  z$ X+ Z- O<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS1 r; q6 K" ~: D, v/ {9 O) q( L4 e
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。$ q1 N7 @! j% ]1 G0 f! L
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
/ ]" `. H# X! s! o) h# C<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>/ q, |' O# t$ L$ b' _; O+ B. c" n
<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
7 |% i$ O1 z3 U$ t$ R* C; c8 E+ a<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>
9 n+ v1 m3 f- D0 l6 ]" _5 E$ n- B<P>* w* R. |  K- a  m1 d! ~! x
对象类型有:</P>
1 i. y# S8 u  g' X<P>CONSUMER GROUP</P>
' \0 U/ h2 T) a4 c  T<P>CONTEXT</P>
  B& O. J- j2 j1 a) o<P>DIRECTORY</P>9 c, m/ U. s# \2 m1 R, P3 c
<P>FUNCTION</P>) y7 \+ d, b8 ]" J3 L/ C) O
<P>INDEX</P>
" f/ t5 N# w% F8 ~7 `( C4 Y<P>INDEX PARTITION</P>; Y4 j6 N9 X7 C
<P>INDEXTYPE</P>
/ C% s- x, e7 K* u<P>JAVA CLASS</P>5 H) F; o. d9 q% v6 A6 R: O& K  G
<P>JAVA DATA</P>
: ^, h9 y* z% j0 U+ D<P>JAVA RESOURCE</P>7 p/ o% h7 b9 ?5 R8 a+ a6 I+ B
<P>JAVA SOURCE</P>- I; d7 R5 X5 ^
<P>LIBRARY</P>- i# Z7 _! E8 o
<P>LOB</P>& ?4 r, p  @. V. ]' s9 }( P4 ^1 n' T
<P>MATERIALIZED VIEW</P>
/ G9 N, a7 X8 K: B9 ^0 L<P>OPERATOR</P>
! T/ a- }! G0 j0 U) N<P>PACKAGE</P>: V, X1 z: A( K- ^1 T
<P>PACKAGE BODY</P>
- H  V; S$ F8 @<P>PROCEDURE</P>
( ?) [# ^0 A. w+ f3 K<P>QUEUE</P>9 K) i2 X& k! F
<P>SEQUENCE</P>
9 H" m) [( G/ j" S9 C7 _' i. k<P>SYNONYM</P>
7 u# k; L! q* b% q5 a<P>TABLE</P>
" c3 Z* B4 f) `<P>TABLE PARTITION</P>
' z/ l/ t8 t0 t: L; ]5 V% K  l9 f) G5 S<P>TRIGGER</P>
3 ~$ Z6 g1 a+ ~: Q& Y+ c<P>TYPE</P>( i% w: f: d- C+ T" e2 f
<P>TYPE BODY</P>
: Z" k4 U/ e* q8 U* f: a<P>VIEW</P>) G4 y( O7 I$ O/ P/ i$ g$ G: N
<P>6 u5 e+ x- n+ P9 @/ U  w
因此,取得存储过程可以用:</P>3 Z; y7 t, `+ @4 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';</P>* F; b+ t+ B" s$ v
<P>取得隶属于某个用户的存储过程可以用:</P>* l% J, |* |5 m# E7 F# Y
<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>
, n3 E; |) f  y6 C" x<P>
* E0 n+ m9 l: ]) j) i$ H同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>0 i- y4 l$ f2 J
<P>取得存储过程内容的方法* p! u0 e/ z) r  Q, u
对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>& o8 W3 @5 z. L$ k: A4 T
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
9 }0 Y0 w: M* G# E. y& O, O7 h<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>* `4 ~, M$ g; j" h5 o1 i$ t
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE2 H' G6 [: b% N. i# V; [" X" j( Z. e
存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。
0 }! U; i& T: {USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
& m; k7 |% d, n) l/ G( g' |% t<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
* y7 g% K/ S4 G; k; G6 ?4 w<P>! ~( {8 l* Y& `+ A
因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>8 N; i7 t# }% p" q$ c
<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>4 |7 Q9 C4 {/ X$ x, l7 H8 B
<P>取得函数的方法
  n/ t6 K" \% R& D# ?" h同上,取得函数可以用:</P>
0 X0 N$ l7 N* i' q+ k! k$ 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>5 j: {/ F& S1 y7 ]6 W
<P>取得隶属于某个用户的函数可以用:</P>' W; J: Q% [, q1 Y
<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>
" w5 E  h' U; d7 \<P>
# R) l( {3 W1 u7 p取得函数内容可以用:</P>
" {" _  b- ]* a$ h/ `5 c9 r<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>
+ e8 a# x% B; T/ z& |3 B) {) L<P>取得触发器的方法8 i1 _! g8 E+ N/ k2 I% P
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>
' H6 G1 \* u+ X<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS/ I+ O) H6 I( b2 p1 \4 N4 S9 j% p
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。
# ?. A6 x2 P+ |% j2 M3 T4 RALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
+ l; _! z4 v' k/ Z' }描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。
1 b8 m. f* {) ]( U: BUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>$ r" \7 b( j. W% r1 x6 h
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>
3 Y7 p1 H! h0 o9 Q6 j<P>4 r/ p) J. ^, U, ]6 Q( a; u4 E7 V
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
/ ?& n! |% @# ]7 L' B# G4 Y# m* jSELECT 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>3 S1 g0 n* A+ `4 k
<P>2 {% ]# j: l  k8 D- X- Y
取得触发器内容的方法:</P>
- X) M) p) s7 Y- z7 I<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>5 N  _3 u8 B7 U7 A9 Q  s
<P>取得索引的方法( Z; e5 E7 a5 J) |
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
9 X+ s- |8 O/ h8 b- e; d& g<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES
3 s  D- ~" j% _- o- [描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
8 ?9 n2 j# K3 @# I9 a. jALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES) v6 b4 ^' Z2 P- y1 b' `" Y7 x
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。3 f# ~9 d8 c- ~3 Y: \& Z! |1 a
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>' V& @: S) I9 L3 ?, N; Z2 S
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
$ G4 I' c( d1 @% S8 n+ n* `<P>
; B; V$ I! _- u4 z+ ?1 ?因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:
9 e5 B  }6 f8 W% OSELECT 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>4 |* q* G% Y" @) A
<P>
# Y0 N+ r/ ~+ s9 E- [取得索引相关的列的方法:</P>. N, v- _6 @3 R$ F$ B, B" ~7 X
<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>$ X7 i( s( m9 R" L. M
<P>用户8 F- p- w( a. F" r( D0 k- ?1 c
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>& W7 D' _3 E7 {: j
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
8 @0 {, o7 \( O1 n; c描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。" [: w: Y% Y8 M8 `
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS8 _+ R/ f* q  ]% W' S
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。# S; {* Y5 O" n6 P
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>
( e4 |- P. W" D7 t  W# q! P<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>) c2 @, r: r) i& `1 x0 r
<P>
4 a% j% C1 X# M8 f1 E因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
* L. P5 X% |* w" `- Q$ jSELECT 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-9 00:37 , Processed in 0.587180 second(s), 51 queries .

回顶部