QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
- Y7 h# L% d6 T7 M1 N7 x原作者姓名 Fang</FONT> </P>
$ z5 O! @$ ~$ n* ~4 ^- e<>SQL SERVER
" q# @/ l3 K. X: X' ^. |9 j. C取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法, R% g% V1 E7 h0 A# p
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>
7 @; l. Q. w; ~& d, ~" I<>或者</P>- w0 x) ?, d. g5 s8 {2 Q0 c) |. p8 `
<>USE master</P>5 H! j8 E* h1 l
<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>' n+ q3 Y3 [, e3 I* S
<>9 s1 F# K0 }3 O4 C$ |
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>6 R% A# `# J& g+ Z% ?
<>取得表的方法. f0 Y5 o0 q( n; E
系统存储过程</P>
1 L( L! H# N' w2 S- s<>USE xxx</P>
9 L9 v0 r0 ~, \. E- u<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>5 r/ @: p0 ~+ t( l2 I7 y3 H$ W
<>或者</P>; Z. s. U2 G/ D1 k; M# K' k, H
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
6 A) X  `& X' \* I1 E/ K<>USE DBAudit' B0 B+ O! t! W7 O$ t- d/ p/ T$ \
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>( ]) H6 S+ B+ v. N0 g# n  k- _
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
- E& ^$ z2 T/ N! R, Z<>USE DBAudit+ Y- Q. Q; t, d' S$ v) [$ J# ~
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
, Q8 g- {+ d( P2 l; h<>或者统一使用:</P>
, }9 Q1 w2 h0 p9 v: J8 U) M  ^<>USE DBAudit</P>) \2 z  X8 P% Q0 X4 J8 _, U1 f, n1 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>
+ Y( o7 K7 a& T* _<>注:</P>9 \0 D8 R. P" x, ]7 n2 r% q* C
<>sysobjects中type字段类型解释:</P>
6 i9 U8 {5 }3 N<>C = CHECK 约束</P>
3 x* ?( M  o2 d6 p; l5 ?. W<>D = 默认值或 DEFAULT 约束</P>
* p/ S0 s/ q: b4 ?<>F = FOREIGN KEY 约束</P>$ n8 s: e2 _4 @& H: m
<>L = 日志</P>: ]; _5 S2 d7 ^) {
<>FN = 标量函数</P>0 n3 d( G9 O* U/ V$ t. y+ g% y
<>IF = 内嵌表函数</P>- t1 z0 C/ U. s0 x4 ~# D& W* _/ t9 Y, n
<> = 存储过程</P>2 [- _3 {) y  l5 N" m6 J  V' U
<>K = PRIMARY KEY 约束(类型是 K)</P>
3 b( V% [/ [0 n<>RF = 复制筛选存储过程</P>8 }* c! O9 a; c2 ], N* \( r
<P>S = 系统表</P>
6 ], G3 y7 \, @4 k) M  L7 ]9 K' l<P>TF = 表函数</P>
4 z' t2 ^" ?% A" ?" s/ H( c<P>TR = 触发器</P>! \; }& Z, E9 Y5 t$ y4 [& m- q9 t
<P>U = 用户表</P>
' A$ }$ `- f3 Z# b  k<P>UQ = UNIQUE 约束(类型是 K)</P>
7 Q9 p7 C, B. @8 s) m<P>V = 视图</P>
" x/ {6 e8 {9 s7 k<P>X = 扩展存储过程</P>& g% z' W# b5 D% c
<P>取得列的方法
; q- s4 A: t8 g3 M4 J& b5 B系统存储过程</P>
! c8 C: a* E, c8 C+ D<P>USE xxxDatabase</P>
) Q: Y5 c: p! q2 v0 _7 V0 ~<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>
! i: C" g2 E! I<P>或者</P>
+ @# y" c, T: N+ e" o<P>USE xxxDatabase</P>/ g0 N7 U; ^5 }/ c2 y
<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>
  z) M* t. j# ^2 g* q( l8 Q9 f  f<P>这两种方法都可以取得包括视图的列。</P>1 ^. j3 t3 w# ?6 K' \8 W" e- N: e
<P>取得视图的方法6 W/ j: _' R( k0 q0 _
系统存储过程</P>3 M2 ^8 {9 j4 G0 _6 N1 G; b
<P>USE xxx</P>8 a  I/ a% T6 b2 Q& z( T4 p
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
8 H' x. `+ f) X9 T<P>或者</P>5 K( h$ M2 K7 I. l/ z7 x% {! g9 U
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>5 }' M6 w( g$ q3 \7 X' `7 o
<P>USE DBAudit</P>" O8 ?) x7 L) C& O& F
<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>( @( e: t! I0 F6 E# d+ V/ ?/ j. u0 S
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>
& X4 o4 y% N; o) o# `<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P># i1 O2 U! K% X8 ^
<P>取得存储过程的方法
4 e0 j& `! _2 e# N系统存储过程</P>
4 R+ d9 B0 A( k: U" ~& b0 O<P>USE xxx</P>
' x  o; I! w9 I9 C6 E- g<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
6 u: `1 L, W3 @$ I* Y/ W1 L7 m<P>或者</P>. d) J2 M: n* F5 J& W, v. X: d
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>
0 k" R7 [% K" s! C+ D<P>USE DBAudit</P>
: Y/ t' @! D4 V+ o! R* ^<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>+ R1 l, a( I( l# R8 ?* ?7 P9 s, U
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>+ s( S5 a' ~8 x
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>7 M. o, R; x- g# d; _" l. _
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
, i8 k. e$ X( s# G<P>取得函数的方法- e/ N' `1 R5 v1 L/ `! z
系统存储过程</P>8 c, `0 P4 @5 g; b. C
<P>USE xxx</P>
+ u) C/ f% K0 M$ L) i5 G( ?<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>( W. f+ Z9 r; O0 r
<P>或者</P>8 P1 V: l3 Q' D- O  {+ m" o
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
) ^6 T9 C, `0 V! J0 |<P>USE DBAudit</P>  c* {& U9 `; q
<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>" y/ T  C. B$ z
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>( o5 p0 ~# K1 E9 Z
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>( {( r/ r3 f* Y$ V! N) P" |
<P>只能获取用户定义的函数内容。</P>; t# \/ g* [* G7 o
<P>取得触发器的方法2 X( b5 ^" _4 ^! ~& c& A3 a6 A3 F. F
系统存储过程</P>$ ?" _/ C9 ^2 z; F" U- V) G7 X
<P>USE xxx</P>
& g( w$ }4 D' R4 F3 D<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
2 W( U! m$ w* S4 W1 f  ^& f<P>或者</P>- v' Y: Y( Q2 A4 u- S, T3 I6 E" B
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>3 ]; j( l6 J% e+ g) r% p( {
<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>% s, V3 _4 T+ q' b
<P>取得索引的方法6 t0 m  {  C, d# k# ]$ W
系统存储过程</P>
7 u* ?& b4 \/ T& v. a. y: b<P>USE xxx</P>( L9 p% Z0 X/ o7 A$ Y# ~
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>
, d- \5 y# C! R  ^1 ^<P>用户
$ S+ i9 X% _' P& h1 o8 e* C系统存储过程</P>
9 H2 s6 o4 _8 W+ h* E! w<P>USE xxx</P>
/ {6 h; d2 T9 c2 \( z, P! o<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>
# Y9 v/ `4 `4 J<P>角色
/ M6 t" f) r9 E* v, U' t系统存储过程</P>
0 D- u# A( |9 F+ @<P>USE xxx) h, K* s, t$ ^9 N, ?& S
EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>
# D9 u8 }7 E$ m, n1 N( J- n+ G) K# V5 i! U' _
<P>ORACLE
9 w8 D" h$ g- S5 `9 L8 P7 V1 l) r特殊
' a0 b, {; J6 Q( r) D&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>
8 c& }  M  Z# Y1 x5 n; H  ~& W: l<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>
7 }2 v3 C; a% V, V- h<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>% {; A; m# u4 J
<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法& \' ]; v: V$ q' `; o
只能由用户指定<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 R6 g' T1 k- W# T5 Q- G5 U
<P>取得表的方法! E9 t. C3 f; P( }, k2 |
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>6 }7 J( z0 s2 C" n7 ]
<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>! q) m7 S" q# o6 q: m
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>1 d' T' J/ G. [- F9 ]
<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>
2 K. r! `$ O3 e- d) c; |7 S<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>9 I6 x5 n" u; e
<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>( C8 [$ f3 i& q, G+ {- I$ C1 x
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>+ ^3 U' P% `% A) d
<P>- c% `' ^* y! Q9 G* {
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>: ~+ C+ ~3 u' ?8 _/ k  v+ L
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
4 C1 g6 z1 r4 U  {0 X) s  J1 m<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>" K7 b8 Z' ]9 i& W. \5 X4 u
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>
9 z% Q4 ?5 |. ^3 L<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
9 ?$ M! m  p( M# [" h' h+ ?<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
; t! P7 p4 ?/ o<P>6 X6 s# {' s1 d  {& S  a, P  w( m- A
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>  n5 p: w# p* ~7 O: \$ o& K3 o  C% R
<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>
5 @( u- A. E! [! P<P>取得隶属于指定表空间的表:</P>0 p* Y* @! U% B3 v1 m/ B
<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>. C9 [0 w) F& p& I$ M4 s% _
<P>' R+ ]- r9 L5 m
也可以不指定用户名,从而取得所有的表。</P>; r# v  B# s: c9 O* g2 R# C" 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>+ I3 }  v: e+ X% O9 L! Y
<P>取得列的方法$ ~' q+ Q, a) L! a
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>  t; B7 {/ c) D$ y" r* G* W
<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
5 g, e) }6 b7 r* v& ^) R' V描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。) g9 P2 U& U6 M- @) A7 B7 h! 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
7 g. q$ @9 X; X$ a' @% I. d# @描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。; Z$ m% i- {  P# z/ K
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" p: d8 B. A! F
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
$ Z% K5 s! x* U2 uALL<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>$ R0 |  u/ e% S7 R
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>
6 m) b/ o3 j  o# i* G4 g1 h" [4 Q<P>1 ^0 d) B4 A7 C, S, C# d8 ?! P
因此,可以从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 w9 Z4 d, F0 n! M& E  X# B8 g
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>& t* q( l; }4 D* s9 \$ t
<P>取得视图的方法9 k& A0 ~; z/ E
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
" c# p6 J" ~$ ]! d4 H: c. G<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS2 M. }+ B- O  N! Z4 N
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。) S. Q$ E# K4 P0 x9 P) i2 ~2 W
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
6 O/ o& u  P+ g4 {$ I描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
. F4 h. X: m" ]" c& C" O) [1 JUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
& @3 D6 k, {1 [- J" q) x* f  e0 [<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>2 T5 P- e% l2 E8 E. K
<P>
. v( a8 z% _) `4 h因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:/ O! G- k3 n9 O. l& z3 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>
9 P" b3 }5 l, x* }& i) h9 e" V0 M<P>取得存储过程的方法
# B( z- \( U7 i; U+ e" G存储系统对象的系统表/视图有:</P>
- }3 d" O6 C- ]* b9 v<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
+ D( y- N  e0 L. \# Q<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>
0 ]1 ^3 L2 r) s" q! W  N7 X<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS
. E9 t7 W& r# _% O5 C  p描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
; r0 f. V) X2 d1 t% rUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>9 @/ q" o2 G- p' X0 r4 {
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>7 I+ ]" m& |: l5 n
<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
3 a  |' {$ s. n* @* ?<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>
. u' P3 V; g) S1 a( B: K) I6 _% ?; I<P>1 z% h& A* a' P9 L2 r# _
对象类型有:</P># S+ I) a, Y5 p* W( o! P; ~
<P>CONSUMER GROUP</P>
7 j  L- F$ N4 b* D! Y2 f, Y<P>CONTEXT</P>
5 A5 V# Z$ [" V/ T<P>DIRECTORY</P>
  C  V: Y$ ^5 o: w<P>FUNCTION</P>) s5 B& c9 l6 a) T
<P>INDEX</P>
( q0 v$ m* _. v0 A<P>INDEX PARTITION</P>
5 O7 j9 P; |$ y<P>INDEXTYPE</P>$ k1 G! d1 w; W  Y# ^2 G4 f" P
<P>JAVA CLASS</P>8 }8 i; g" g6 _, C
<P>JAVA DATA</P>8 w8 ^/ i7 Q* w# b1 V1 w; s
<P>JAVA RESOURCE</P>
! [* P' n" D3 {2 w9 ?! m<P>JAVA SOURCE</P>
- T' d3 H: B9 g% Y: ?) |4 n9 j<P>LIBRARY</P>
3 [9 V. l& z  s# Y. Y, I% h<P>LOB</P>  P! R' Z* _; N5 X1 T- a, o
<P>MATERIALIZED VIEW</P>+ C" i9 t  L( N% M( C
<P>OPERATOR</P>
4 Z$ u4 D5 |- B; q7 Y$ h! V<P>PACKAGE</P>5 U; [. Z- s& h) s% `  K( b4 f+ P0 t
<P>PACKAGE BODY</P>6 g* W2 f* Z7 A- T9 T. ^
<P>PROCEDURE</P>2 B6 g  Q( W/ d& {
<P>QUEUE</P>1 H8 Q$ A4 u1 n9 M
<P>SEQUENCE</P>$ l, m( u3 y, [4 a% i- }3 m
<P>SYNONYM</P>
( V$ C7 h( `; e; v1 R6 r<P>TABLE</P>
3 S/ q, `- Y3 A0 P( C9 I( o1 S<P>TABLE PARTITION</P>4 k$ c0 H! O" @1 q' ~0 ^) P
<P>TRIGGER</P>
7 l7 ?0 j+ w- T+ c, r6 q  ]<P>TYPE</P>
1 [  L) h$ T2 i8 h<P>TYPE BODY</P>6 b+ A" Y6 V! Z% `9 [
<P>VIEW</P>
, C, r" q3 Q) L1 w) h<P>
$ C4 t8 R& L8 k因此,取得存储过程可以用:</P>9 ~; f  Z, I$ Q
<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>9 ~0 f6 w+ P" ^" L3 l$ }
<P>取得隶属于某个用户的存储过程可以用:</P>
; q/ |: B9 ^4 T<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'PROCEDURE' AND OWNER = ‘DBAUDIT';</P>
5 q% z% X4 G: y$ A<P>" {* t6 v4 Z; t: {: M
同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>* \. T1 i) S1 [- G
<P>取得存储过程内容的方法
0 H& o* q3 W; k对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>0 j- E9 s" p' c
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>( c/ r7 ?! u( c' F  V/ \+ o; a/ c3 x
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
. ]/ T* r7 ?) n0 i7 @9 ^3 [<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
6 \8 ?9 T. g' D6 t+ v& g存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。1 ?9 D# D, p! A7 m  ^% R5 _% g
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>' H/ f( R% r; C( a" L) h7 \
<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
4 o1 U: _( c# `  L, o<P>) w- z' m4 ]. i  z: K( Y( O; K
因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>% x3 n7 g0 f4 V, H
<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>' u% c6 D2 T/ Q% q7 M( i
<P>取得函数的方法
# [6 X. U; ~$ g2 i  G9 K( ~同上,取得函数可以用:</P>: Y- Q; t" v: {6 j) c; Q
<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>" u$ \* s' t- ^8 t
<P>取得隶属于某个用户的函数可以用:</P>
9 w0 G- u) @! z3 C7 `* ~, F4 K  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 = 'FUNCTION' AND OWNER = 'DBAUDIT';</P>9 {9 {: i% q$ J6 U7 ]* n* b
<P>+ Z- u. G4 Y5 p% i* b  q# G; }
取得函数内容可以用:</P>
" O* t* c4 g9 h( X: @. u<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>
. x6 H; _+ P& r& U( @6 G<P>取得触发器的方法
# m  [1 H% K+ s  B' M; g存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>7 }9 T1 V# ?+ u9 e
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS( u- z! V: S! O2 O% V' D2 V
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。0 S4 P4 T8 y3 s' z, G: w
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
- Q2 T' F/ i# ~+ x描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。* Y% c# t/ }6 @  ~( |
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>
# R: m0 g1 U; l0 E- [* R<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>. D  o$ g+ c- V
<P>
& r( u& e4 k9 K因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
4 m* G0 g! g1 R2 r5 ^  @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 U% S- U$ |% ~5 e; |
<P>4 g) w1 c0 C7 H2 y  ?
取得触发器内容的方法:</P>0 l9 t/ K. G& E( I1 F/ M; 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>. L3 U" r9 x6 y) X8 p4 s) P
<P>取得索引的方法4 D. [% g1 N/ J: a
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
! x/ R: B3 @1 J2 i  [% r# H# q<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES8 _+ n9 ?8 \7 f5 p" X
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。/ g. g- e0 r! o; a! O
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES+ a& c: Y0 h( e* |2 q, J
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。
2 W5 D6 d! ~# DUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>$ e" |7 z6 }1 I7 O" G0 `) _4 ^
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
* B1 W" N- Y7 J" R- ?<P>
8 ~* I( Q6 {% e3 Z6 r4 D1 ?* K6 S因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:  s' V8 g  v5 D$ B2 O/ v
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>, F4 z' g5 {7 W
<P>1 _* R: s# q9 g" k9 L
取得索引相关的列的方法:</P>! T8 ~* L3 R$ r( }
<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>
; I6 L, ]. {) n7 S0 A- y# t' K<P>用户
9 O: F) C+ j" E; M- Z存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>5 \3 x$ `, l7 |) S  F3 c) C
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
" T- Z" e  D, h描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。4 @# R$ B. Z) M! V! E$ S4 u
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
2 y6 k1 t- k7 t) h. `$ @描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
' N% M# Y4 Z5 _  O" n% tUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>
" `$ z( G" d) a, v) Y<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
* O2 [/ f4 ~* ^! f! n# M+ ^# m( k$ R<P>5 x# L3 H# g4 Z: b
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
1 r9 Q0 {8 X" i  b  }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-4-10 06:58 , Processed in 0.545914 second(s), 51 queries .

回顶部