QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
) Z- A9 [4 D- F6 c5 e" K原作者姓名 Fang</FONT> </P>2 D3 [1 H4 ?- i
<>SQL SERVER  ?' W. C$ A0 `+ v4 c/ K. F
取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法! j7 ~. h. n! O* Q9 g7 G
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>
$ ?0 O4 O6 N7 A0 Y3 }! T5 I<>或者</P>! F' Q/ J! ~- b* V4 v9 u8 D2 t
<>USE master</P>
$ m1 [6 R1 j) i) A<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>
3 O) l8 j3 D  S$ Y) N6 {<>
. ?4 Q. N4 r1 K( f1 m- R7 esp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
; L2 {' ?6 Y) X; }  ?9 A3 V* `# \<>取得表的方法3 B. O% [( v; W; b
系统存储过程</P>
9 ?/ q, |+ S/ R" J0 E2 h<>USE xxx</P>
' C! g' R( {2 A# k<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P># |- {+ u' T$ a; }6 @1 b$ K( |0 {
<>或者</P>( j4 m% L1 M0 F% I" f
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>0 l0 F$ I3 [9 \8 G4 l
<>USE DBAudit
, v# l% b# f* U" s5 _SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>- x7 Z4 B% q, R! v
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>/ ?6 M8 r4 X& E
<>USE DBAudit2 p, v7 |, `% r! `7 E( @3 ^7 Z
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
8 F* d4 k; d/ Q3 Z<>或者统一使用:</P>3 n+ G9 M) L1 `8 Y) c# D
<>USE DBAudit</P>
& J: T4 `9 V3 f+ n4 ]. s  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>
/ U8 _7 V0 Y: o) P+ Q) s<>注:</P>' q- s3 a. y3 w6 B) a
<>sysobjects中type字段类型解释:</P>) w9 g' ~( u; ?8 I1 _2 J
<>C = CHECK 约束</P>2 @6 l; @' B8 D
<>D = 默认值或 DEFAULT 约束</P>
% J% ]  h6 _! c, G8 U<>F = FOREIGN KEY 约束</P>! _; k: F5 k5 z- N
<>L = 日志</P>
8 W1 Y+ A& F! @<>FN = 标量函数</P>$ Y, Y$ Q4 {$ E/ N& n. v/ \* d
<>IF = 内嵌表函数</P>
! a) R8 A8 G& j( n6 R% Z- j<> = 存储过程</P>; v+ _) I% f/ m' J( D4 p
<>K = PRIMARY KEY 约束(类型是 K)</P>: |6 u" U# ^' j7 y6 G8 G! m
<>RF = 复制筛选存储过程</P>
, j& [% ]) Q) w" W<P>S = 系统表</P># k' ~2 V  P5 E# b, f" l( A
<P>TF = 表函数</P>' L& {! k, k, P6 f" e' h
<P>TR = 触发器</P>
; N1 z, s: S1 _- f) D<P>U = 用户表</P>
9 H8 X( q. b/ h<P>UQ = UNIQUE 约束(类型是 K)</P>) c- G' o7 G1 E& e# C
<P>V = 视图</P>  ]" B/ W) w1 @" M( a: V9 |
<P>X = 扩展存储过程</P>
9 I$ Z' k- M% D$ d9 E<P>取得列的方法9 r2 h5 f. I3 \5 R$ p+ ?$ F
系统存储过程</P>
4 d0 A4 g7 z; U7 }7 @9 p7 w; {<P>USE xxxDatabase</P>! o' Z6 `* Q2 v" B3 ]
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>: B' R' B: x7 g
<P>或者</P>4 U- `! y! `( w7 S
<P>USE xxxDatabase</P>
# C0 w- D4 w: @<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>
3 y' W  M/ y) ?+ w* [+ [1 Z<P>这两种方法都可以取得包括视图的列。</P>
" [* @  E6 ~6 j<P>取得视图的方法
( ?8 j# v3 K3 f5 m  E2 c& A, @4 Q! e系统存储过程</P>
1 W4 e  q. T' ^<P>USE xxx</P>
" T# r$ F: n: h. n1 a- A* V<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>' L3 L' O; V) q8 Z) I
<P>或者</P>
3 g/ X3 R, H) p! ?/ r<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>3 \/ j" `# V: ^* K$ T9 f
<P>USE DBAudit</P>6 B, \. Z7 V1 \
<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>9 ?* e' |/ I( V- M1 J- E
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>
3 Q$ w. Y" o0 Z<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
; r3 H' y" ^  B: z8 X; v<P>取得存储过程的方法
9 a! l& ]7 V# I; g, p* d2 W系统存储过程</P>: G! I  e( _# V5 ]4 |: X; N# s
<P>USE xxx</P>  L8 K) E( `; {  f: x
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P># p' ?3 @* ^- K* T* o
<P>或者</P>
+ c- ^+ r$ @, o% f2 R; C+ ]. E<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>, h$ i$ Q' W/ t5 _3 z
<P>USE DBAudit</P>  B# R/ V1 L4 v" z# h# u  X) 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>+ j* {$ Q% J1 E3 V0 m! o6 |
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
9 i1 a* k- q0 i  N# N<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
2 z1 z# e) M4 V2 ?6 C* ]+ x<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P># S1 l& a! s- F% }2 u) A) y
<P>取得函数的方法7 x* W' O3 g" b- ^6 m. Z0 ~$ K5 Q
系统存储过程</P>' ~+ f2 D& p; O
<P>USE xxx</P>
/ _2 ^, B! ~- v. M/ n* E1 k$ R<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
9 ]; R# H2 @3 R! g  `! y<P>或者</P>: y5 t4 t. H" P9 V( V' P/ T
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>/ }7 M, g1 d2 ~$ }# R$ X% U4 J# c* B2 w
<P>USE DBAudit</P>
& y& p# p  @4 d* A( H1 c<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># F7 R# b. F7 d; ]$ P$ A9 R  k2 X
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>0 a' n+ Q/ ?. S
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
  l9 E" S& u3 z2 G<P>只能获取用户定义的函数内容。</P>
- h) C6 s2 _& y% E<P>取得触发器的方法
9 C6 P" X& E% W) _& W- T( F2 a8 Z3 z系统存储过程</P>9 K, X0 r* V* I: n5 c9 I- t4 P
<P>USE xxx</P>
. \. q" a  h' p& }- |; L. d<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
6 |( e' q6 G% w, f<P>或者</P>  I/ V3 x" l: l$ d
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>
# e* u6 H9 V: v<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>4 x* ~) F9 |4 J; u! S1 y1 J
<P>取得索引的方法3 H* ^* `3 L7 ?5 }9 j
系统存储过程</P>$ j" t4 \0 [* ]5 b/ t5 {6 E
<P>USE xxx</P>
( W7 K# d2 V& d% u" [<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>
8 z" @; J3 x; T% w7 f; O<P>用户
! w2 H9 u1 C7 E! X) R$ E系统存储过程</P>
' f0 v; B+ d" W) L<P>USE xxx</P>
1 {7 d+ H% e; B3 I3 e<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>
1 ^( K. m# |' s; M8 R4 x<P>角色
' B8 B( m% L$ ?1 B. k8 @2 J系统存储过程</P>
$ g* h  X) _- h9 P<P>USE xxx
+ G" {% m: L6 E' \( `2 @* a+ [  I, FEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>
2 @# b5 k, h0 V6 L7 ]+ X
1 O3 Q9 |4 Q) u<P>ORACLE
4 u0 z# w: u9 L3 O% u特殊
$ A1 S3 }! ~: [3 x) m! V! P$ {&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>- w3 K  x# ^) Q$ Z
<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>; T( {' H" x( v; m1 u& s2 E! ^
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>1 r3 p  E0 [$ U
<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
; b6 P" f; W3 O( E只能由用户指定<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  @, v4 g5 `  e) {<P>取得表的方法4 w7 F+ c( E, l/ ^! t
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>" h3 x# P+ p) O* ~6 ?
<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>  K; u/ ?5 Q( m1 o, N1 l
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>, z/ Z3 P$ d0 [& U
<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>, y* u  S/ r& X; c8 t  O6 ]
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>
: U) C' a. e( \1 _4 f" p6 U: Q6 e7 @<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>, o! d; K1 H# o/ \# N- w
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>; @$ d$ z* {& R- o
<P>7 O8 O$ b- ?: m. y+ K1 Z1 U
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
3 s9 g, G6 t& Q" D<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
* D$ }" m! t1 A' `0 k5 d% F<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>: x. o1 w, I" l+ ~8 l: w5 P
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>
" [  D' J3 h# h& m! C! W<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
1 E8 D5 ]' A) `$ [<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>9 K6 n6 o0 a! Q, i2 \
<P>. ^7 q3 [  u  T1 B2 C
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>
! V, u! G! [6 }* x  m; 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 WHERE OWNER = 'DBAUDIT';</P>) o: r2 A2 i, B! l; M
<P>取得隶属于指定表空间的表:</P>, Q1 V  t0 e( d+ ~, Y
<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>
1 ]' d  B; U, l! Q<P>
+ p8 t! x" U; I也可以不指定用户名,从而取得所有的表。</P>
! H  I$ v+ }4 t* L! X* 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;</P>
7 ^4 R1 g0 W) B2 i$ h, ?3 @4 C<P>取得列的方法# g$ Z4 m9 V# ]
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>& S7 [/ G2 N2 m* s+ \
<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>COLUMNS8 d% W3 E6 @8 x. e7 Z# U
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。: E% `  f/ T; `1 s6 [. c6 f' ]9 a
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
  E' I! c  B* U/ C$ x* p/ ~描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
3 g' u6 \) o$ h/ o( S" m, PUSER<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 c1 {) P9 z6 K" r! h( d
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
: K8 {& S3 a( _) ?; b+ eALL<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>
8 ]! v7 k+ F, R  o0 ~. a<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>
' ]# R! e$ M4 N0 G<P>  g0 l* Y4 _8 O2 d
因此,可以从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中取得隶属于指定用户的表:
% W5 f4 p8 L+ u* ~& t2 WSELECT 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>
3 `0 G' V( w/ q! d1 q7 n5 W<P>取得视图的方法
& |& I1 [( q: w8 G/ A; `存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
7 e! L% r$ c; ^2 `<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
+ `, N  D' M3 n1 h. Z7 F) R描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。
. p( Z/ _! Z) G! U; ^4 KALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
% i2 v9 ?, K# y3 _+ i  }描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
( z+ B/ l5 N4 ~3 T0 q3 s& O  B+ W9 bUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
7 E* O/ Q8 V. X$ a0 t6 o<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>6 l) O: Z; x2 T
<P>" O; H( @2 K# g) A4 w* P
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:9 h1 ]' A2 y- H- z; j
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>
$ t! u; V1 |( u# Q6 K<P>取得存储过程的方法
) q# k' `0 H7 O$ c; a9 M3 i$ g存储系统对象的系统表/视图有:</P>% u" \4 {+ V4 L" Z" |/ R
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
4 z7 t7 I# i4 T& ], _- `<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P># X% d) g5 m6 l6 |  x5 `
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS5 w- T4 Y6 @! h( t9 n/ i1 |9 h, V
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。/ O6 D7 X3 v- N8 N
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>$ |; b( w* }7 a% ~
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>9 D( q& n, F1 V8 R0 P
<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
1 \+ g0 y( _6 w6 p<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>8 w8 Q' S9 x$ L  V% k# ^. Q9 P1 m
<P>' s0 H+ t9 d- d4 \4 @& P% Y( X
对象类型有:</P>
5 h7 m1 y  n; q: }  @% X3 {0 k8 t<P>CONSUMER GROUP</P>5 E; G* n4 V" S3 H+ \
<P>CONTEXT</P>
: ~6 ]: K0 g" u8 @# a3 B% a<P>DIRECTORY</P>, @- k( `& F  U9 E6 s- o4 ]
<P>FUNCTION</P>
7 D( @8 u/ {$ E9 ?4 k<P>INDEX</P>5 d% A  K% }" a& H& v( g$ y! f9 N& @1 `' Z
<P>INDEX PARTITION</P>
$ E0 T) Y+ p) W<P>INDEXTYPE</P>1 d) _7 X; M9 T8 \: C1 k
<P>JAVA CLASS</P>
- V- G+ P; W! c5 [; p9 h6 H<P>JAVA DATA</P>
3 i( v  \' N  H% E+ S; \<P>JAVA RESOURCE</P>: ?8 ]: P( E/ A# D, Q3 w; y
<P>JAVA SOURCE</P>4 I$ I8 ~$ e! A* v
<P>LIBRARY</P>! {: F; A; \) M5 ?
<P>LOB</P>% d: l: p+ p/ g$ G# f
<P>MATERIALIZED VIEW</P>
+ m  e0 ~, u+ ]2 X' c+ f<P>OPERATOR</P>1 `. L' `, r  W/ p( g
<P>PACKAGE</P>
/ R# y( C# k: M: m" m$ @% E<P>PACKAGE BODY</P>4 K3 _7 Z; M. e5 Q" \1 T7 l
<P>PROCEDURE</P>8 X8 L9 \; E. m# R
<P>QUEUE</P>
% s: [/ W3 z( N; P" z) a<P>SEQUENCE</P>1 Y+ C2 j) n/ A" d2 J5 F; w! D( H6 |
<P>SYNONYM</P>
4 e+ x# Q: i9 r+ F; e" u5 k<P>TABLE</P>- D2 |* ^% b+ B) P# z9 Z# r- S7 J$ m/ `
<P>TABLE PARTITION</P>
' z0 n' ~) Q5 `; {<P>TRIGGER</P>6 @1 B$ t' ?3 R! O; O( A' c
<P>TYPE</P>
! I2 V# Y( o- Z6 R, c  {# ?& i3 [3 [<P>TYPE BODY</P>
+ B! R3 E( s' u+ m3 r) e& q; P<P>VIEW</P>
! D# _) F& h' u1 S0 u<P>
# d9 |( Q2 A1 d3 l  Q" s因此,取得存储过程可以用:</P>1 p0 Q( B/ k/ C( f2 a; t, e
<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>: ?7 q/ A! ~7 M, K
<P>取得隶属于某个用户的存储过程可以用:</P>0 v# @7 @- c1 x) f7 B4 f# m- E' A
<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'PROCEDURE' AND OWNER = ‘DBAUDIT';</P>& F  a$ n3 E- {1 X5 h7 Z/ l
<P>1 @9 O& |; |% E3 ]8 m) ^- P
同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>: n4 P2 F, Y' H+ k( F4 l
<P>取得存储过程内容的方法
2 j# d! g; y. D2 z4 b1 |对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P># |/ e+ B8 U7 @
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>1 w* c" h+ ^% \3 _4 i2 z$ v
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
+ B: {0 ?6 I) q/ ~9 B, H2 x* F<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE, i7 ^( p4 i0 p! t& S
存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。7 ~4 H8 ~" @( G$ O
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>$ t7 c  v# u+ V  L9 |' a3 {/ B
<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
& ?$ p8 F* b% f* ~) p$ L<P>9 k; w& ?2 T& p) {" }
因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>( l' S& A; A& d" T
<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>
& j" I6 ]7 {: u, y<P>取得函数的方法
( d5 _: I) h* ^/ X/ `- z同上,取得函数可以用:</P>
% G9 S, t% k5 L" u2 a7 O<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'FUNCTION';</P>% S% A" Q* E( i6 X& j0 S; N
<P>取得隶属于某个用户的函数可以用:</P>( Q; m( X/ Y  e  V
<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 R  F" Q1 M. a
<P>
; F0 i. ^6 x+ l& s/ F" _1 e取得函数内容可以用:</P>
" R: n9 E6 h5 y% K& E/ T1 V<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>
2 @3 `1 R! r$ W<P>取得触发器的方法* p( z, h, ~$ i' ]
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>
4 ~0 a7 _3 P2 a1 r5 k6 F<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS- l& j+ |8 j  N2 {% X/ Y# M
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。2 i- M) p- C9 ]/ \1 L1 q
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
: I% ^2 q. z9 p  s描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。
: J7 J! T( X/ Q( V- e5 nUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>9 }( C2 z+ c) A1 a5 Y
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>
" H1 F/ \% _/ s" G0 ~2 I<P>
- ^* ?% M8 }' F7 l& _& l因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
: _: k- \1 X- Z3 }0 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>
" u3 M! K5 u& Y$ c& S7 q) a<P>+ U/ V1 n% q6 W$ C* z
取得触发器内容的方法:</P>' [' u& N9 c3 p. t& f' U! X
<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>
+ z1 v8 ]% K/ b. z* ~; F<P>取得索引的方法8 g9 c* A) T" U2 x
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>: t% ?, u6 A7 X6 v5 L- L8 I
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES) s& I  e! y% a1 B
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。% [" @8 z1 k( d$ H8 Z) T
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES
) H7 j( e- E8 n4 ]: {: j2 n描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。( c0 [9 U: J( A; C! u
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
" ?' X! K- Q4 }9 H& o' h  i1 R* g<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
( v" ]; i0 D" C: ~/ N% v; c: y<P>
& f* e) t' r, s5 o- w因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:
, m5 h& z6 S) z' ]2 r7 MSELECT 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>
  `1 `: \: H4 a5 V1 l) i<P>; g" M# }+ u6 E* J7 `- e
取得索引相关的列的方法:</P>0 m& ]; |" b) i/ F  a, I
<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>) [; J4 s4 }$ V$ a
<P>用户
0 I0 J3 A/ _' {, F! |3 [, D存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>( o( u% g: v3 k; y" y! B2 u+ b
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS& W" i/ m: Z$ \' `: `
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
0 f1 K5 M, E, @: rALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
: Z3 a8 e5 c; n9 s7 t描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
5 V! Z0 A- _/ b* O, KUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>' q& q, m# G6 D- t% K% J
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
- }5 w# S0 Z( ~& E. T" K- t<P>
  j' U- l. S" }5 m因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
5 T! \+ l) G# Q* C. U9 w* Y9 [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-14 19:19 , Processed in 0.488889 second(s), 52 queries .

回顶部