QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
& O* |+ l' E% ?原作者姓名 Fang</FONT> </P>
  N( p( O' F1 x' h" i<>SQL SERVER
7 |: u1 W# k: E, _( c8 p取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
1 T; v. U  C, o+ W4 k! `系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>
8 P% H5 T. O/ Z<>或者</P>
0 D0 ^, t/ _8 Q. g<>USE master</P>
, E+ v6 A% R2 k- o: }* D* b<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>
. G1 _4 k5 B7 c# [5 L# w: t7 ^<>. l# T, r, f/ {! {5 i- `
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P># M/ A2 i" D9 s  Y5 [
<>取得表的方法
8 r5 K5 F; G$ E( l$ ~系统存储过程</P>
) A& N6 F% p; p7 q2 V2 _<>USE xxx</P>
4 U& U0 I/ N: p+ s8 w( [9 L<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
; G  u) E% V; J" D; [  m<>或者</P>
3 c( |8 M( S7 [5 j<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>! j- a' W6 G) H
<>USE DBAudit3 y( g$ A& P7 m; b% S
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>
" l6 J. R7 d4 B+ A<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>/ V( o; y$ O8 k. f1 Y
<>USE DBAudit/ L4 d6 _& W+ A: X/ N+ q' I
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
* e  S5 f! ~; L0 {<>或者统一使用:</P>: u# o6 u- x3 Q
<>USE DBAudit</P>
  h2 K  x! m0 ~0 o) f0 a% w1 @<>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 `7 W' P7 @. j7 J
<>注:</P>
3 F" g) H" [2 b) w! i<>sysobjects中type字段类型解释:</P>
0 V' |) o* y, w* S<>C = CHECK 约束</P>2 N3 l! P" I6 r- W  |1 x
<>D = 默认值或 DEFAULT 约束</P>
, I8 \* m# v  h* E3 w( C, k* Z<>F = FOREIGN KEY 约束</P>0 |& C  Y4 ?6 T
<>L = 日志</P>
7 Z2 \9 R6 L8 B- Y3 V<>FN = 标量函数</P>
; Y4 o; J" w5 U3 X6 d8 T3 a<>IF = 内嵌表函数</P>
# W: {' @% t# k2 \( z; P8 w<> = 存储过程</P>% O- H% Y/ H: w( r, f9 r7 t, I
<>K = PRIMARY KEY 约束(类型是 K)</P>% e4 r: g+ H7 ]
<>RF = 复制筛选存储过程</P>
7 A2 f/ ~& T- ?1 [( @& R<P>S = 系统表</P>
9 y5 N9 @' ^$ C$ J2 I- ]<P>TF = 表函数</P>
# d* q$ {$ _: c0 Z( ]0 H+ h* G- t<P>TR = 触发器</P>$ W; u5 b" j9 i! j% a4 ]
<P>U = 用户表</P>
* t6 _* f6 |7 R<P>UQ = UNIQUE 约束(类型是 K)</P>, Y: l' j& l" l& s4 g
<P>V = 视图</P>
* |8 L; U! ]' d' `# W<P>X = 扩展存储过程</P>
+ h- g) x' |6 _  O  D5 o( n+ d: r<P>取得列的方法5 J8 l$ `( R+ p- D
系统存储过程</P>
: j% C2 r$ `8 i% b<P>USE xxxDatabase</P>
( Y2 Q5 K- m5 q9 a! v- S<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>
* |, r6 f/ T" R- P; D<P>或者</P>
. ], f; o% v3 U9 V/ u& B<P>USE xxxDatabase</P>& R1 Z# g2 u% M* F/ Y: C" R
<P>SELECT syscolumns.name AS name, systypes.name AS type FROM syscolumns LEFT JOIN systypes ON syscolumns.xtype = systypes.xtype WHERE syscolumns.id = xxxTableId</P>$ }$ b+ A* D1 q9 m! |
<P>这两种方法都可以取得包括视图的列。</P>  g0 Y2 f8 _7 ?  ^" N  ^
<P>取得视图的方法
% Q; Q  H# G8 X6 T/ w系统存储过程</P>
$ R# x; ]; S9 |+ ?: c<P>USE xxx</P>/ {  b- r1 Y8 N8 I* a6 r1 M
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>: o& w6 `; W+ d3 I! F. @
<P>或者</P>" V5 f0 Z. ~  j5 w
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>
3 N0 t( E) u/ G' U7 G6 r' X' d<P>USE DBAudit</P>" c- |, H. Q+ T% m- 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>
5 b8 u/ r7 O. V$ M<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>4 z) G/ t4 \" U/ D5 q
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>3 c9 I3 U" Z: G5 U4 k
<P>取得存储过程的方法2 o- Z# j3 I1 Y& Y; m; C
系统存储过程</P>
, M' \( ?) x5 y- q. y' u( Q<P>USE xxx</P>: g) d& V5 [6 s8 B
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>/ ^$ ?" ]1 E3 @& f- c# V- k$ V
<P>或者</P>! Y1 I( B/ q+ t: I+ S& y/ r2 m4 L
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>' W+ r5 D3 m+ _+ S, E8 C
<P>USE DBAudit</P>2 z  r3 ]9 v# _; G  \
<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>6 @1 ?6 B5 _( ?0 u  N! b
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
  b- f! [3 D' \1 [* z- {$ w<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>- i; e$ t9 l  j- y
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
* ]* o2 y2 S5 v/ t3 r4 n<P>取得函数的方法
8 H7 R$ a& \. B" r系统存储过程</P>/ A! K9 M) w$ H
<P>USE xxx</P>' _& [9 A% w0 v, S( \, B: ?
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>* w5 |, `2 d( q
<P>或者</P>
% Q7 b$ S# l, U' H; k<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
3 N) U' |/ [3 @, ?& c; P9 X<P>USE DBAudit</P>
! s7 F8 C* y% Y: g& y<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>4 s8 a% Y( }; p! u9 G7 z0 n
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>
" m; G1 j2 S; F) F3 d<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
: ^2 P# A+ C  F" F" C9 X: M# b0 e<P>只能获取用户定义的函数内容。</P>
$ g$ a7 [/ N0 T, \  U2 }' D$ U<P>取得触发器的方法$ x& K! N- d" C1 b3 @
系统存储过程</P>) F+ |3 Q1 q7 D* o6 j7 d. [
<P>USE xxx</P>6 _) i+ H2 g" U7 b2 ^
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>+ R# |( x! ~) m' i. w) T
<P>或者</P>
$ Z! y1 E8 Q% N/ a. I* m<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>3 U# S. K  [# [
<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>
7 z9 b8 w0 t1 T5 D: c# Y5 o<P>取得索引的方法% m6 b0 U3 T+ V2 f( t& z
系统存储过程</P>
0 L: y+ a) ^" A- C: a<P>USE xxx</P>
1 r) r' S3 ~) {) Q4 H; C: f<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>
6 }. f/ H# G# d$ X8 D" a9 f5 X6 a<P>用户- P* U9 ]- R, o. a% ]% Z
系统存储过程</P>: R; O2 K+ T, S5 _3 T4 ]$ B
<P>USE xxx</P>
7 l. [0 p7 i2 X' B  G& I<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>
( S- @# L9 f1 z: Z4 e<P>角色" b7 ?; a) H7 ?
系统存储过程</P>
  V+ j( V+ i9 P; K) i7 Y' {# d<P>USE xxx5 T  H2 v- N' \" j
EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>
: p) r9 A! b8 z  z, U) z- @7 r' }! Z0 e  J; Z; W
<P>ORACLE
  Z2 T; G  C. g. g: q: M) e特殊
& f4 A6 Z8 e: |3 w&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>/ D0 x: G8 d6 G5 k
<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>& @; i9 w3 y/ x8 }# v9 }+ X
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
" _- a7 O9 B: D( C' V7 K& n* e% a5 [6 I<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
1 g4 i- j2 [" I: \/ z$ k8 j! Y只能由用户指定<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>' ~2 A, D9 L+ }8 s0 p5 F
<P>取得表的方法
; ?9 u: E: `6 Z! n6 x9 a' W% {存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>
( Y+ q/ x' B" M7 e<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>
  [  W1 ?2 T0 L* _1 V1 V' r<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>; {8 O9 y, _4 G1 X0 E) \0 X/ ]+ ?
<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>
, Q. n" n* k' }5 m6 S$ |<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>
0 ], {/ N+ |) m+ T2 V5 q' z% L2 O<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>
, v4 c: B. h, A5 V, l& M<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
. D, P2 V8 I( ^& f$ ^2 d8 v<P>
& E/ J9 ]" w6 G! p' z, x3 CDBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
) h, P4 Q; @/ N, G) F* k<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>. \! ~( V) ]2 K# c1 u% P
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
/ t% A+ L9 ?0 E( x' N2 v1 w# C<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>( y0 x! F1 b6 h( w. ?$ Z
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>1 V2 T" Y' {$ S0 V" H4 Z
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
: C" p& b; S4 m. G9 ~- o# u6 b; o<P>  h- L4 D% r+ z
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>( I7 t2 c, V) c* F8 q
<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>+ c8 c5 R' M1 S: f6 r9 u
<P>取得隶属于指定表空间的表:</P>9 |. [! a7 O" N- J, z  p8 }" T- s+ C* z
<P>SELECT TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES WHERE TABLESPACE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME = 'DBAUDIT';</P>4 ^; W9 M" Q, p& ~9 R  ^
<P>
( [) c& u/ r3 C* Y0 m9 ?5 V: b6 c也可以不指定用户名,从而取得所有的表。</P>+ _2 Y9 s7 y: D7 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;</P>
9 }0 ^; Y! ^3 q1 r<P>取得列的方法' Y4 s/ A9 F3 G% f0 ~# x  x
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>
2 r2 z/ W; t3 ?9 k, O7 ^5 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>COLUMNS3 Y' m7 @4 M& _% q0 F; c6 s
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。  L3 T3 G5 e( i
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
- p$ k% x) n  S! Y+ `3 }7 d: F描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
0 u$ L! m5 U9 o1 q- |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
  M+ m9 h9 E& Y! }$ I2 Z# V8 j6 V描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。0 D4 {. ?* h& Q; c
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>COLS</P>+ ^3 v9 u% D, c  z/ s$ M% f- G
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>" [; o9 n0 a( K) S9 Y
<P>
. r! \" l* k6 q1 [因此,可以从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中取得隶属于指定用户的表:, a4 b! a; ~) w" U& W' N: O3 v
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>$ E7 R1 {0 L, W' [
<P>取得视图的方法0 ^8 D" ]: Z; _$ {- K- X5 v
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
% \7 E* G3 v. o3 {* L% q<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS, p* ?1 v, c$ J5 U$ K1 p( o
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。
4 ~1 l9 o: y7 e+ H( Q( gALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
9 U0 b: \% Y* K& z- I* i- [5 o描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
  @1 |0 K2 q- h  @- MUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>/ V2 l. y; [' r* C0 t( |5 m
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
7 b7 P' `5 d# R% P<P>3 {7 C& _+ O- J; j
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:  L2 V4 x! q8 d4 D
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>+ R2 d* N6 l- ^  Z
<P>取得存储过程的方法
3 s+ C2 p7 m  V存储系统对象的系统表/视图有:</P>
% v; l6 X) L- X<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
8 L0 k7 F8 d6 l<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>
; ~9 S$ ^  Q" R: ^, T<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS. K( k1 b- J: [/ D. {& x6 Z" r
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
+ z+ q( O) s0 iUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>" Y* d7 g( _4 Y& q4 p
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>" j" s! W1 E/ P$ ~1 D& V' N
<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>$ [% R& w# [& I7 h
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>
! W$ R+ V- _. N3 H6 Y; s6 E8 A! W<P>
; Z1 p- w  v' h对象类型有:</P>/ ]5 T2 q8 X; V' r% T. ?
<P>CONSUMER GROUP</P>
% g  z3 v  e8 s) C<P>CONTEXT</P>
  v3 U( T" I# W, b<P>DIRECTORY</P>
$ N' t9 V. s8 G8 f# [<P>FUNCTION</P>; m: l% X! H% I; T
<P>INDEX</P>1 v5 M8 q% o, P# j" ~
<P>INDEX PARTITION</P>: O. e* i* V. g: ^
<P>INDEXTYPE</P>
! X+ H0 `7 u0 G) U& H/ S<P>JAVA CLASS</P>2 Y+ C2 o& h! p) A' S5 y9 C; h
<P>JAVA DATA</P>
; h4 E  j  Y# B+ p7 V<P>JAVA RESOURCE</P>( r5 \: L! G7 f- ~9 X( w
<P>JAVA SOURCE</P>" O& O$ ?- s6 `2 a4 d0 Q3 t
<P>LIBRARY</P>: d( ], D5 p& Q# L7 c0 L0 {# q
<P>LOB</P>
. ^+ d) [" _& |4 F, F% {8 g3 i<P>MATERIALIZED VIEW</P>
% I0 j# B0 e" b  ~6 g<P>OPERATOR</P>
; R9 y* Z+ W( Q6 \<P>PACKAGE</P>
3 @5 ^2 K6 i- P+ D4 U4 F% ^0 \<P>PACKAGE BODY</P>
& Z6 R  P6 i  P2 G1 _% Q<P>PROCEDURE</P>. y6 k2 O* K  S8 A
<P>QUEUE</P>
, y$ x( |0 }% k9 U0 h$ @$ H5 j<P>SEQUENCE</P>, R- G7 [. a& h6 ~3 P
<P>SYNONYM</P>7 b3 L" _, F7 C
<P>TABLE</P>
5 k4 Z0 f, c( T4 _9 c# B" ^0 s<P>TABLE PARTITION</P>
0 X! K/ @% U0 s2 t+ t* [* ^<P>TRIGGER</P>2 h% N' r$ \8 q. n. r; p
<P>TYPE</P>
! v' X& ]: B, _( c8 T<P>TYPE BODY</P>7 U5 B0 ]& a% F  i; J: w' Z) i( _6 I
<P>VIEW</P>5 J3 r: V3 Q, m4 i  K8 V$ ?
<P>
/ B4 b6 K. v9 {9 s' Z1 \: @因此,取得存储过程可以用:</P>
; a; A1 |) v5 [! F7 |( S; j# C<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>
  w. M* A1 X3 f<P>取得隶属于某个用户的存储过程可以用:</P>1 d; M5 A1 |- d6 U
<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>$ k1 a& v/ a# b9 ?3 v
<P>* S; T' W3 U! N% ]7 @  @( C
同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>
* B4 K- I" p  x5 Y1 n" s7 p<P>取得存储过程内容的方法/ {4 _/ o. f. s8 v: x; C6 C
对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>
- t' U7 H8 Q" I3 ]: k<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
3 n/ F' ?- ], T, v, \4 k<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>  D2 D) D! B+ ?& b
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE0 r* ?& z4 a6 S; t6 ~6 ]
存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。0 h) ~! P" ~" H* i
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>1 O" @& v$ {$ @+ V) ?2 c! C5 ?& U
<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
" v8 J5 x0 L1 t  V; V+ a3 U8 L* y<P>
' |# w0 f" w2 ~6 ^9 [" X9 D- ~因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>7 z, I+ v# d1 K5 x( @
<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>
+ H8 M( f1 G. @" o2 R<P>取得函数的方法& M1 L/ O" b0 ?; |; g
同上,取得函数可以用:</P>2 C, \2 O6 j3 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';</P>
  p1 O& y7 {5 j, `; C<P>取得隶属于某个用户的函数可以用:</P>$ h* |8 n0 Y5 d' p, J" b2 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 = 'FUNCTION' AND OWNER = 'DBAUDIT';</P>
$ Q0 b; T* h! u8 Q+ |' O6 d<P>& ^. c, F9 r6 r- B3 s8 x
取得函数内容可以用:</P>
. Z0 |( H8 p1 r; Z: H! H, G<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 `6 w) C1 k2 x8 a/ c& P<P>取得触发器的方法+ C( n2 r. s1 _& U, k$ G& r
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>& b, m4 u& o- S5 b6 I1 U5 [; {0 j
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS' l0 S$ u0 e- x
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。0 I" J" |+ s( N8 h9 x$ v, X: @
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS* \, N0 u+ o4 g4 w' s  \0 g
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。
/ A1 ~; P- [* _' j" y9 _USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>4 V, g3 {- c) j8 V. [9 G3 V
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>
4 _, w' F2 s; g& {3 P+ Z1 v" c<P>
1 R, O* d7 N) r! y& Q; s& _. U因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:! k* T: r, w4 t# L; d4 p8 @3 x2 g$ E
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>
6 D6 u7 \% s) W; ~3 Q8 k$ h6 a<P>
' u% X( g* n& O* a取得触发器内容的方法:</P>
* p, j7 Y, C0 j) d" l* C<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>
" `# s0 c1 X) |) A, y$ w6 I9 Z<P>取得索引的方法
6 c8 }, g0 m0 E- |: }存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>( v2 L. Z2 P2 u' F0 O$ O  g; ~
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES! S! ]4 r# j0 H5 s4 i& t) t2 i
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
/ s; ^$ a) s% B* X& |$ b, A) m! rALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES
- ^1 E$ J( V1 m$ X- y- w描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。5 v6 p7 \0 d* B, ~) L+ B
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>  F$ l3 H. ^% f: R  l6 ?
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>% f  V3 J$ ^( b9 P" W# d7 T7 p
<P>
- W! ]" u" c' c  s; A1 n因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:
1 Q4 Y) c1 w8 g* SSELECT INDEX<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME,TABLE<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES WHERE OWNER = 'DBAUDIT';</P># N" h& n7 z' n9 F
<P>
9 Z9 O" V7 j+ n, G# U# n取得索引相关的列的方法:</P>9 Y, G2 ~: p5 C9 g: V' J/ 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>/ ?. f7 S( Z; w- v6 R
<P>用户
0 E+ p- S4 T% W) W2 `( h存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>
% M6 ?" p7 C8 b. }; Q<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
7 w( @4 c2 p! u6 T5 m0 t描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
! e6 b# M" Y$ c3 m9 F& E6 m! A- [& S* fALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS! `1 _; v. Y! A$ E
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
- H/ E1 \7 v4 Q* m; L5 [9 h: }' _USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>
9 h9 l/ {; @% C) y7 f: `+ l<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>8 k  I% @- x& O0 I# F0 \
<P>
6 e; G8 ]2 X! h9 V1 v因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
* Y5 f8 U' d0 dSELECT 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 08:14 , Processed in 0.422743 second(s), 51 queries .

回顶部