QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
/ r$ [" r9 m% O. x原作者姓名 Fang</FONT> </P>
% m6 k# n+ C0 X<>SQL SERVER
* H7 [) |1 q, D; x取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法/ k) W/ }2 ^) E! ]
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>7 O% f& f) R5 T6 y7 C) B! C; B
<>或者</P>5 h6 z) X4 B1 X2 N  z& J% z# p( p
<>USE master</P>& k4 O: N+ p+ w  v
<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>  y, z* l  K0 o: z
<>& O5 P3 ~- \0 ?$ C" ~
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>, d: f+ z3 @( ~
<>取得表的方法
& U# S4 w1 ]1 q5 K$ p( Y- }4 {: R系统存储过程</P>* g8 d0 R* g$ `& }# n9 W! c
<>USE xxx</P>* l7 }" L, F: J$ G* b# e
<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
6 G' Z. F1 _% u<>或者</P>
2 n7 c0 W$ G. q3 N, Y5 U7 A<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
7 o- x( e$ y3 C  ~" [9 m: j<>USE DBAudit: g1 p; G  O0 Q+ p
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>) j9 B$ [5 x# r
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
% ^8 G+ c0 K8 I<>USE DBAudit
5 z) `3 J$ w6 r. f+ q, Z, \5 lSELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
; X3 \  r& m0 w* e2 |2 l$ k$ f! W<>或者统一使用:</P>+ E, T. S4 I( R3 l) T9 f
<>USE DBAudit</P>' Y, ?& Z2 o5 M) N4 g" k  t
<>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>
7 W( ~! l, M  y; t7 {<>注:</P>2 K  R6 G. ]1 u5 A7 T
<>sysobjects中type字段类型解释:</P>) G8 L0 w" f  q4 u
<>C = CHECK 约束</P>$ R7 \2 W! I$ @* F# x! D
<>D = 默认值或 DEFAULT 约束</P>
7 W  N$ I2 H- P# |  F$ }<>F = FOREIGN KEY 约束</P>
* d4 ^: `3 x3 u" Y. C+ O% Y<>L = 日志</P>9 U+ E4 a' r8 e
<>FN = 标量函数</P>1 k5 t; [! C9 S  b9 e
<>IF = 内嵌表函数</P>
, f$ U! b: ?. J! [2 c1 y+ u<> = 存储过程</P>9 o$ U/ @) C3 p% S5 `2 t1 P$ F
<>K = PRIMARY KEY 约束(类型是 K)</P>/ o/ }$ z' b! o
<>RF = 复制筛选存储过程</P>
  U# b9 i- a" W9 N<P>S = 系统表</P>$ K( ?0 Q- l3 |
<P>TF = 表函数</P>. k$ u7 f4 f$ @
<P>TR = 触发器</P>
- \( D3 a1 h7 ^; R; w/ B; e9 @<P>U = 用户表</P>
0 m5 }  F7 ~& n/ P& H<P>UQ = UNIQUE 约束(类型是 K)</P>
8 |3 f  O3 l' B0 b& f  X; p6 K<P>V = 视图</P>6 _2 ^3 p4 k1 N
<P>X = 扩展存储过程</P>6 t5 z% E- v" F& X5 r3 b6 j
<P>取得列的方法
+ C" W$ Y; S& h* L! ?% p! c0 n系统存储过程</P>5 a" h# N6 A5 r1 h
<P>USE xxxDatabase</P>
5 `, ^, }/ e' H1 m<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>
/ V/ q" i! L4 f9 w<P>或者</P>
1 g. @6 ]8 q7 @, h& T+ X1 u<P>USE xxxDatabase</P>3 r  U* K) m  n
<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>7 x" e" o' b6 f% w+ \7 X
<P>这两种方法都可以取得包括视图的列。</P>% `7 q+ z! g" x( B
<P>取得视图的方法
  w* ~" D1 i, N! c) h  {系统存储过程</P>
4 y2 ~( o8 |" e7 x: G6 A<P>USE xxx</P>
' f( x& A3 b# g( t4 _( w, {, u+ g+ q<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>7 k' P" j' M; q
<P>或者</P>, j! h% i: h- b3 o) k8 s
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>
% c* M+ e5 u/ r0 f$ r. M<P>USE DBAudit</P>
( b! [, B0 E6 T6 G5 [& |! }& T<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>
+ |- b3 S* a' G; K! ?& G4 l<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>* F  h+ I+ ?- P/ U  [2 F
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
! f5 D8 W  z) ?9 s" v<P>取得存储过程的方法
: z6 A" N! X. F" F2 J3 m系统存储过程</P>
/ Q  V1 ]+ N, \. ?( ]; h7 K% V# B- \. [  V. t<P>USE xxx</P>
3 ~! V: r& z; U<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
, z: K1 a; h, X( _% S. @- O9 m<P>或者</P>
# |' A1 S( l9 u0 G5 p<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>6 n! }/ t6 r( o+ u
<P>USE DBAudit</P>; l+ x) u6 \7 M/ 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>  _* m' W4 R1 ~' r8 w- ]# l
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>( b. Z. x8 a2 p/ r1 L: \2 h  x
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>. u% x# j! C* i4 N" A! r
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
0 ?) o+ Y7 Q& ~. r<P>取得函数的方法  {  g+ a& y& I. a
系统存储过程</P>
  c  i3 I1 @1 Q) a9 X5 v<P>USE xxx</P>
3 {4 Z7 c( v, ~' {* x* x. Z<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
  L/ h. K" u3 X: n<P>或者</P>
' q$ ]& {/ t, m& Z<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>9 V% ?, `$ B' [& w3 f- }
<P>USE DBAudit</P>2 J) m5 a5 F3 u, v$ z1 |
<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 O7 D' S' O, x3 u" X0 z5 ~
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>0 ?0 ~) i! L  P/ s
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
+ z6 ?7 i, n" e% E* H; o9 O) b5 J<P>只能获取用户定义的函数内容。</P>
$ u4 B/ y  \7 V1 e7 ?<P>取得触发器的方法
% i$ F; l  E" [" f1 B/ C系统存储过程</P>
: i* h* Y3 y7 Q1 u2 X  @( @<P>USE xxx</P>
4 ~3 K! c6 G: l5 U<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
/ \3 V, c+ K% @1 v<P>或者</P>/ k# F- i" T5 L, a7 ^9 u
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>$ _. T- v- n* C7 h
<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>
* U- v- i& i& @  z$ D<P>取得索引的方法  i3 k- c1 t$ d7 f% J
系统存储过程</P>! d3 M  f  `. H2 |, n: g' ^
<P>USE xxx</P>" N; E! F$ t' N! o0 m
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>
( {% G) P( r! ~9 k- R<P>用户1 N+ X% e+ _; ~: D" K- o
系统存储过程</P>$ D' c- ]5 B4 k( L8 r3 C
<P>USE xxx</P>
# j; ?: c: |8 o- v) g% ]3 u<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P># C. @' x8 N! S) }; v$ k
<P>角色
  {1 A0 m. U# p- }4 }! t6 {系统存储过程</P>
5 [6 @: h' Q. I<P>USE xxx; @; m- M3 _, d- l/ |
EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>9 F' Y$ W# R: h) m$ h3 c
! [3 x" y; n! z( v5 `* w3 J
<P>ORACLE- L! ?8 R* z* m3 x& X
特殊7 [( Z# G) r& Y3 I! Y$ b
&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>8 h& Z% G! w) S  \- t  ?0 Z
<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>
* ?- v% p7 K1 ^1 `. k<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>5 p" u3 {: a0 ^* L' g, e
<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
" m* `: I$ s  K# f# k$ b只能由用户指定<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>
* q- }  n! Z; v' u8 @<P>取得表的方法: m% B& [; Z) p. s- ]3 }& n6 U
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>
9 s  Z$ N) z; t4 _) r<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># z- ~. g* v+ N1 [. z
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>
( x: \! g( E9 E/ i. l<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES</P>
0 ?! M1 d  _6 A0 N* _<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>
( x! ]. q% g* 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>7 S5 i% [% U6 U  |, _5 L6 }
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>6 W1 y6 L! k1 s" P5 b
<P>4 v# o: T$ e( h! h* Z
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>1 g! S! G# u, d6 A6 ?6 T- @$ A% W
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
. N6 l! k3 W) c* \+ ^1 ^9 c<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>/ f; S- q5 a$ B# }+ k0 f
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>
- g! j' w  c1 \: V( w<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
% a9 `7 C! _, ~5 H! g<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
6 R0 R6 Y( P- J- c  Z" o<P>
0 W' d6 h6 S6 Q+ a4 A1 x因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>
( k; V0 v" s% c# c<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>1 @, }. h$ Q* T
<P>取得隶属于指定表空间的表:</P># V, o6 [6 P3 Z( E0 x) c
<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>
$ ~3 m  |5 A+ i( K! W, Y& |<P>8 ^" W& D* |! Y9 n8 @
也可以不指定用户名,从而取得所有的表。</P>
4 y3 n3 l; ?6 O* `: a<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 a4 ]3 I! b5 w# {2 S( W; A+ w9 {<P>取得列的方法
1 U+ }7 L: U. ~+ q. D存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>2 S! A# v7 c: F
<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- }4 w4 i& R+ ^
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。+ M0 M6 X' E0 h0 e0 C- R
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& u% V" d' l" g& I
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
# n# ~4 L0 g. _1 i. mUSER<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
3 v7 c8 M9 r) P1 `- c. P1 ?描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
5 @8 W3 I! I2 l4 Y2 K4 f1 B- [; J3 ~. jALL<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>+ {9 Z0 |- l  x7 B: ~# m
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>1 R6 z, Q4 G( z; y) n- Y6 Q
<P>
2 y5 O( P- Z3 k1 I% Y2 h# 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中取得隶属于指定用户的表:0 f. L0 d6 L+ ~9 t. F4 N
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>( ?4 {8 ?3 i# |6 I
<P>取得视图的方法0 z& b6 l7 ^, }! h7 h; g
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
7 u/ |/ }  d& L8 Y' r0 D2 g<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS  U; E6 J4 k8 O5 U: O. d
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。+ \2 `: ?) Q' L  n- c; Y
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
" c! s/ j0 b) L; c9 R% a2 N' `描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。2 ?1 i/ i& `* M# G( Q" q2 N
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>$ ^& a/ i2 i7 J# z: H
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
: {# _  d6 N! u<P>3 P) D# k" E. Q, v7 V/ E, H# b# e
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:& c* n6 i; E; ^% T1 f0 q- O
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>
# k) E' `  ~' }7 e9 o6 m$ v6 L<P>取得存储过程的方法
* s: |7 L6 P/ @: o6 B" V3 Z8 b存储系统对象的系统表/视图有:</P>4 v) c! x; w) l) [6 Y8 A+ g
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
$ f3 @- K/ W- E6 {8 l) ?1 ]<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>
; r. H4 f4 B. Q# R5 k<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS
) O" O  o2 x& R描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
! r  K0 @$ i/ F3 [9 ]USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
8 ]7 g0 v8 p6 ?1 ?" _% X# b* X<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>
4 k: S6 c) E* M<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
, w- K& t% B$ n/ F+ Q3 p<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>
9 ]8 p. u, R/ c<P>
0 d& e) h( k2 G6 E/ t对象类型有:</P>
) n5 R$ K+ U5 j9 ]( Q3 `<P>CONSUMER GROUP</P>5 W9 d( n- H2 ]% W+ n( F
<P>CONTEXT</P>3 `1 Q& l" |% [% `" g: L  L
<P>DIRECTORY</P>) N" O# R/ a0 y' D, ?
<P>FUNCTION</P>
% N' }$ \8 {) y- O5 L6 v<P>INDEX</P>
/ K1 j" @8 D) P9 v8 w% _$ U5 e<P>INDEX PARTITION</P>
- b) Q0 U# C# _( z/ S) I. T! k3 v<P>INDEXTYPE</P>" K, F% Q9 S0 k5 {& z1 j2 b* s
<P>JAVA CLASS</P>
0 V7 n  ?# z3 Z1 V- a7 f<P>JAVA DATA</P>4 X1 q7 J7 m, L( z' b/ U
<P>JAVA RESOURCE</P>+ f  y% [! u- i* f' G: }2 F+ o
<P>JAVA SOURCE</P>& Y& l$ v5 Y. l6 e8 H+ a
<P>LIBRARY</P>
$ P* l( k, n& Z, _) |* L<P>LOB</P>. Y4 |/ Q" t" G& z" ^
<P>MATERIALIZED VIEW</P>8 o* u# W9 z+ s
<P>OPERATOR</P>9 w5 ^7 B# F6 p7 l: Y
<P>PACKAGE</P>- t; h( z! A4 k2 l
<P>PACKAGE BODY</P>
; ?: a, D  D% F! U<P>PROCEDURE</P>
" h% J! c+ c! ~<P>QUEUE</P>
' p( w: l0 Q7 s* F( C<P>SEQUENCE</P>3 p2 n. K4 e1 x3 x1 f7 y) k
<P>SYNONYM</P>) o! i0 b5 R3 o8 @6 j" m
<P>TABLE</P>8 L1 o$ q& n, S$ p& h* @8 O, d0 _
<P>TABLE PARTITION</P>8 i* \  ^/ p6 q$ ?3 i- b
<P>TRIGGER</P>$ ^5 G6 t# Z& l! Q8 n
<P>TYPE</P>( q+ [1 m) V( H: t
<P>TYPE BODY</P>
8 f' c& g6 ?) C/ X2 S; T<P>VIEW</P>
( n* E9 f$ g) [/ g4 h" d<P>
: A8 a; {% o, u0 ?) r) h因此,取得存储过程可以用:</P>; A. v9 N3 g, D* U3 ]9 P# N3 n
<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' L  j8 \" x$ ^& b7 r: }<P>取得隶属于某个用户的存储过程可以用:</P>
/ n! ?+ p# B! D. 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' AND OWNER = ‘DBAUDIT';</P>
) M' k+ n( z9 a' v4 S+ n, _* c1 Y<P>
) N: W3 A6 C' K3 Q, b: ~同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>/ b: x, p% Y; r% B2 R* t
<P>取得存储过程内容的方法7 [5 y* z) E4 j
对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>& F; G* L+ V5 X: C
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>  k7 ?% W* J9 R: c& ~
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>, c& F0 F) E) Q* _8 p3 @0 U
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
0 u1 Q/ I4 X- f( r, Q4 w存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。: b& ~& @' L- T% P
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
+ H, A1 J6 ]3 D8 C- s( S; m! {! A<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>. G' O! ^0 g  S; s& m1 U$ ~3 T
<P>
( x& H1 ~/ g( H' G' B! j# \! S  }因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>
- T* R+ j: k" _! s4 y<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>5 n# m0 G7 d) |; T+ w. B
<P>取得函数的方法+ K* p$ C0 N# o3 z% K7 @* M
同上,取得函数可以用:</P>& i/ E$ g+ {9 e7 r9 Y* A  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 = 'FUNCTION';</P>! X" j9 B- @0 t
<P>取得隶属于某个用户的函数可以用:</P>
* f2 m" R. |3 r- k: v) B<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>5 U5 W7 c  M( V% \0 ?3 B+ s
<P>  j$ D5 E& a9 ~& q& T, }8 p
取得函数内容可以用:</P>
' {% W: u* O9 x+ j% L<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>4 G" h" v# t/ ^0 N
<P>取得触发器的方法
% G9 [* R0 u3 Q( _5 I5 f存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>$ o; V7 F7 V# s6 w. v  v, @- o% M
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS
9 H! O4 J0 y. _; b+ p) p描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。
* ]1 R& G! U* X: S# F, _7 A2 ]ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS8 a! Q/ ~& Y9 I  E+ j! H
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。
3 K  L! z3 T$ e  T" Z1 d; VUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>
. I$ T/ s' y, L2 W5 B( L. Q<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>4 L$ t* M& ~& a4 w9 M
<P>' w7 _( Z; {( K6 s4 Q' `
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
! o6 v8 ?3 \8 Z  ]4 W$ pSELECT 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>0 v5 m! v+ `8 O  |  K
<P>
* K# q1 ]: U& Z) @' @+ h取得触发器内容的方法:</P>8 Q' o$ x& m0 D5 l, 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>
! I6 g. h& Z) u2 h1 v- m<P>取得索引的方法
2 s7 f, C% I# J. R( F( I; [  P0 ?存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
# m( E" [0 A) W9 x/ t: x" s2 q- Y<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES
1 C4 F; g, z3 g; [描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
, `5 h* S; |: S  u/ ~ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES
; `6 F" Z3 \% t1 g1 \3 S9 k+ a描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。, f/ f) [4 j& d: N+ M
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
5 _0 _0 ?8 @: i+ S5 g<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
- E$ P1 }8 ^* N/ e" @<P>
3 X- p/ M/ O" b! m- ?  R因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:
' \: X( u7 {4 h* e- _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>. \( }2 }2 x% i
<P>
9 F8 _; m% p. z3 C. I, b5 u取得索引相关的列的方法:</P>: |# C+ w4 o  m
<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># q4 _* l5 r; _$ e/ b6 |7 o
<P>用户
$ }3 T* x9 y' T存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>
  p! d+ o$ N( h0 m* A- g4 f1 s% u<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS4 _  K* Z/ U: w, s1 e
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
, @( h) s' w- eALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
3 _6 d0 E( B/ w8 }& T描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
) z: |, ~; Z! {USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>2 K+ m: S+ m4 S8 e) ^/ |/ ~
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
3 D/ ]; \! Z* @% M0 ~6 A<P>/ }/ g6 I; b: G
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
- z6 l6 u/ ?3 u" G! ]/ u+ QSELECT 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:42 , Processed in 0.469752 second(s), 52 queries .

回顶部