QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
$ `$ G" b5 @3 o, [) Z9 j+ i原作者姓名 Fang</FONT> </P>
' U( n( `& }4 k$ M# |) V<>SQL SERVER) K0 d, ?( r' J+ g) l
取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法! o# l; L0 _& x+ a. c. ]
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>1 y, p" T) u8 J/ Y4 w5 `2 D
<>或者</P>
" e$ \( H4 V' Q+ k: e* Q- j<>USE master</P>
  O. g' M# _0 X4 [2 }% t8 W<>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 x/ ?- ?# \# ?. b0 A+ v) e
<>) [& r! B2 r( J7 D  S6 _- f; u
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>
- I4 W, J+ V( n& k<>取得表的方法. H. w: `" U. R  j' z
系统存储过程</P>  L' Q1 l$ B" M0 q
<>USE xxx</P>5 e  k9 E; }# \, Y% c# F% r% v& k
<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
- \7 `$ m. E7 t1 u<>或者</P>. U6 R# Q# P0 T& @8 ?/ A  g- d
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
! a+ [4 D, x5 V/ Z6 |<>USE DBAudit" Q* X) g0 n+ L, B# m$ U! M' }
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>
# \4 j9 _) M4 y3 |( H& K<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
5 V9 y9 L. h2 n+ l* F5 T8 J+ R: k- F<>USE DBAudit3 q" \: C6 o( P8 O9 q* N: B
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
* b& w# l: X" ^<>或者统一使用:</P>
! F0 V$ D2 W7 o3 q% o* ^7 j. L. I<>USE DBAudit</P>
* U% }* I- d9 |4 A<>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>$ A* w# v6 |* Q: K! W, i
<>注:</P>
8 G8 u  g( D! {; P<>sysobjects中type字段类型解释:</P>& Y' B" I3 `% C1 O
<>C = CHECK 约束</P>8 i( ~. I5 ~; K1 I# M+ q5 i
<>D = 默认值或 DEFAULT 约束</P># @6 K% i. U1 q$ h4 [
<>F = FOREIGN KEY 约束</P>& P0 l! v) C6 j( n+ N
<>L = 日志</P>
& U+ W2 K% {. J7 |8 @5 D7 @5 s<>FN = 标量函数</P>
4 K3 d: n5 ?& U8 O<>IF = 内嵌表函数</P>+ w4 _5 X: C& L- `
<> = 存储过程</P>% h  V0 U9 k0 b: r+ |
<>K = PRIMARY KEY 约束(类型是 K)</P>3 F' h# {) o' J
<>RF = 复制筛选存储过程</P>9 G# x2 I+ i* o( t
<P>S = 系统表</P>! }$ j/ ?: F7 G; ~1 ?2 U
<P>TF = 表函数</P>  Y+ D6 W/ \/ N6 c) {) U
<P>TR = 触发器</P>
0 q! T" [) S1 c* e- n<P>U = 用户表</P>
/ U+ J, v2 Q; v! x* p4 P( R4 s<P>UQ = UNIQUE 约束(类型是 K)</P>
* n; U: g! S5 ~& I7 D; O<P>V = 视图</P>
! f' p* Q  y" A3 i3 s7 D5 R<P>X = 扩展存储过程</P>
, z- m3 Q% }2 l3 \<P>取得列的方法$ G' t9 ~' \' ^% b
系统存储过程</P>% j: T& n& X/ _* S0 N& R$ [
<P>USE xxxDatabase</P>
! G* S" X3 [! z/ ]<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>( j. `. z  E# |2 `
<P>或者</P>
2 g+ B$ f/ B  q5 J9 e  w<P>USE xxxDatabase</P>
$ t4 A8 [1 d- H$ @; 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>
) |$ f: l: W) V<P>这两种方法都可以取得包括视图的列。</P>7 \' _. h9 e$ W6 H: V, |$ p
<P>取得视图的方法
& W2 ^* ]1 a! M! A8 Q系统存储过程</P>2 H0 C9 n+ S: Y  W* t
<P>USE xxx</P>
3 p: U, K0 c6 k) D$ y, w: L, o<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>: Q, S6 f  f- g# W0 S
<P>或者</P>
0 k9 ?4 [' O, J  V, {<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>; Y* M+ ?0 u! O; ~+ C
<P>USE DBAudit</P>7 u2 Y, g" \0 C3 t* O" h% G
<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>
% c( f5 y+ q; J. {# h<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>
  S4 H6 S6 K+ y<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
* s; f# Z5 u+ U% Z<P>取得存储过程的方法4 G- G' G6 m( E' j) i  Z) d
系统存储过程</P>+ k* M0 W2 p+ O) h" l. o5 k  B  \- Z
<P>USE xxx</P>. Y' a" R: y/ L, L+ v. s
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>7 J( T  ]# m% H2 |7 h
<P>或者</P>
4 `9 E5 b" y5 L, m4 }<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>
# {0 ?6 P/ s, S8 l# z<P>USE DBAudit</P>
' U7 ?6 d; o+ J<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>
) \5 I" j$ ~7 m$ [$ p+ z<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
9 x- o- P+ T9 P! |) n7 b4 @<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>0 v& c2 W' f1 _8 K) K
<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
8 P  o6 f0 X( ?% U( W<P>取得函数的方法, S, [4 W/ A5 s9 D
系统存储过程</P>, j; Q. r$ A. i/ w, S
<P>USE xxx</P>5 X* j7 @% D3 d0 j
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>" l# }% F- Y$ n* P( Q  S! [+ O! ?6 X
<P>或者</P>
+ c# m" F/ J) S* [' p- T<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
* ?, s2 g) f3 p<P>USE DBAudit</P>
" o' a# U% {; J/ K<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>, h8 }  m$ o& [$ a# y/ W& {
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>1 q+ n' V, w9 y  n- p; ^, L
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
( F' W; G0 L9 H0 a<P>只能获取用户定义的函数内容。</P>
: A: g) j. V% r; \% M. o<P>取得触发器的方法# Q' }9 n- r9 u4 @& @
系统存储过程</P>
. {3 h1 e+ w. V8 ^3 R<P>USE xxx</P>! \: L( ?7 A0 u! T* H! O
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>) |5 ?+ o; n  q: |, e( I
<P>或者</P>
6 f6 s! i# M& S0 |- N) M  S<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>
  R3 ]3 V8 V: J2 ?<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>
1 w8 F  B$ L  `$ E7 O7 R1 A8 A  a! o0 G<P>取得索引的方法7 l# Z  E$ K6 u8 A' a( u
系统存储过程</P>
$ J# I2 {$ O" \<P>USE xxx</P>
% t8 |, n: e  }" u, m! l<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>1 r3 c$ v  A( T! Y' D
<P>用户
+ ]7 [1 [$ P& E+ N系统存储过程</P>
# T5 W, I" g  H+ r9 p% |; C<P>USE xxx</P>
  Q7 P! {2 L8 X. r' x0 A( J<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>; y0 w2 [) v2 e5 ], S
<P>角色6 F! h; ~% N( ~$ G9 M, [. }
系统存储过程</P>4 E( e# {  f! w% w6 W, F7 T
<P>USE xxx
' m2 ^% x; P1 U+ \/ Q, e: BEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>- u3 q( \3 m3 w! ?' m" C5 ]9 z( }

$ {! b: {7 D& L" M2 C<P>ORACLE" g3 d0 X$ r# ^8 L  J# |3 d
特殊
; }$ V0 e; D8 ]6 [&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>0 ]- I  ?: x, E1 z9 n
<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>
, P1 e% k- U* f2 K( j7 k<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
; O; I/ I0 @: {2 h5 R7 |2 \) x' A* {<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法2 ^- W$ O# j: m3 Y# S8 L7 l- @/ j
只能由用户指定<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>' d" R/ C+ C/ S8 k
<P>取得表的方法6 b4 |. ^' K% p- k/ r& V/ D$ N
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>7 a/ m- h- ^# W- [6 |$ [' w  {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>8 t0 F& S+ h4 e  ^1 u- x
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>5 ~! ^9 n0 P8 s# b. {
<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>( @7 W7 c, T9 g  E4 W: Z# c; q
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>
7 B4 k" Z; D! p/ P- P<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>* X, ~9 L; C/ Q  D# S
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
% J+ r. q# S4 w# F) o; e<P>
4 a# M& i& _! KDBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>1 g8 s4 V+ P' C
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
( e5 Y4 b; G0 C" M  n3 ^<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>9 Q" W/ `: h& k- F$ g' ^
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>
) F- m* K2 ], G: T4 U, h# h; G<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>' U& r% t$ [- ^& C( I# j; D
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
, a1 d6 ~7 ]; a: v. j' G/ b<P>% W- b! f# h, e  e2 d
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>& l+ ~8 Y, Z5 k1 S
<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" j+ C8 q( c1 H+ }<P>取得隶属于指定表空间的表:</P>
4 Z; {; t+ a5 X- g: 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>
0 N/ Q2 s8 q- Z) V" A, E6 M# L<P>
' M0 M5 S* w/ h  G6 _  a  \也可以不指定用户名,从而取得所有的表。</P># J  ~! l  Q2 L; C/ h/ K
<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>
% \; g# A$ J/ F- d, q# p( s<P>取得列的方法3 n8 L3 a6 j$ x6 U
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>1 k% D# L  h# ?6 c: E4 m9 P* O
<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& h% w: ^! d! H4 @
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。8 u8 ^6 r3 [5 i$ f* F# s5 e! 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% g2 k6 ?; k* C$ r( W, i
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
& l3 I6 _( U2 QUSER<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+ |1 `# Y+ d; D# Y' f3 R) g% L1 x
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。
2 ~- c4 n/ i! 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>COLS</P>/ E3 p& e1 S( x% s% s( P1 U7 J: j
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>, k5 A' w3 V" W
<P>
. q: E9 M; l% u. C1 ]' i, b因此,可以从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中取得隶属于指定用户的表:* ]! i' ?$ A* J+ q
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>; i0 _$ g4 A7 }( s% |$ {
<P>取得视图的方法
0 M* i( p( {( H- [存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>
2 @  L$ k) Y/ @+ Q) L<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
! v) K  y1 {- ^4 z  B描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。8 d: n0 J$ Y: f" N8 {- @! r
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS; J% [: w/ y! D. ~
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。& E& d# ]/ y/ J1 T/ J8 E
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
" g' s0 M. ]. J  Y% c, V<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
' U. u7 J- W' `: F! s8 J( P7 t<P>
$ a) T0 n# B/ s4 U6 x8 v% c因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:
" H- r0 t9 y- rSELECT 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>
$ R5 K6 g2 x( o* y<P>取得存储过程的方法/ g7 u# ^0 B" s" B
存储系统对象的系统表/视图有:</P>
2 Z# o  M# p: S" f( D! y6 S<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
. d9 f! }& n: N, x9 y6 M. O, H<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>  l% N& d; Y4 Y# A
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS
" G- i# p2 u) L2 y! A7 Q+ I5 ^6 q) u' j描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。
" _! f, `0 Y" G  I/ q: F3 P& u; jUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
' j3 d* r5 H1 E: E/ L<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>7 d0 Q( t; W: U; `. Z6 v  a
<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>7 I. k* p/ R/ L% t
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>4 O7 L, h) j0 ]+ [6 v8 V
<P>: i- F3 p. g1 ~" Z) P
对象类型有:</P>
0 B5 `( [; p( a" I5 V: C" Y% _7 ^<P>CONSUMER GROUP</P>2 p6 K; J, e- d
<P>CONTEXT</P>% b) ^% J3 P1 F3 Z4 S" t0 |
<P>DIRECTORY</P>( T* J, n6 E' n& R
<P>FUNCTION</P>. Y1 x. S6 w2 k0 `6 V
<P>INDEX</P>3 t1 \: V* L0 X! s/ H. q5 ]7 z
<P>INDEX PARTITION</P>$ Y8 b/ v* d4 |& @0 P
<P>INDEXTYPE</P># i- _( y, E0 m; ?2 `8 f. k
<P>JAVA CLASS</P>: |! l) }  F3 n" ?
<P>JAVA DATA</P>
1 w. }2 t: a6 E* b<P>JAVA RESOURCE</P>: l% T' P& Q& z3 E
<P>JAVA SOURCE</P>
! _% J* w1 l* K! H- E% X<P>LIBRARY</P>
) q! W$ n: k$ V7 a4 l' R. X<P>LOB</P>+ i8 j' _* l. a* v# ]3 L1 d5 f0 R
<P>MATERIALIZED VIEW</P>7 O! [. o/ |( R3 _  [
<P>OPERATOR</P>
: a. C/ Y) C8 Q+ u<P>PACKAGE</P>
5 ^, Q$ Y( L% V<P>PACKAGE BODY</P>1 y. f' H" h1 J: S% y4 K) R' e
<P>PROCEDURE</P>
2 P# J  z& d, c/ q5 y; Y3 G<P>QUEUE</P>
" q0 U& ~  q3 t4 w! u9 |2 w<P>SEQUENCE</P>
* O' P  L* f8 p' D1 p3 Z. l<P>SYNONYM</P># M$ F& S# i# _  i
<P>TABLE</P>
' p1 x. P3 |! c; f1 h  I4 S<P>TABLE PARTITION</P>
: w, T$ [* T4 n& Z' w<P>TRIGGER</P>
( ]# B/ |6 c1 }+ c+ O<P>TYPE</P>
: X' |% p0 c' j9 V! _  ~3 `<P>TYPE BODY</P>
9 c7 g! R$ f& L: P- i<P>VIEW</P>" M/ e  T7 J6 X6 f' H5 `; ]. ?
<P>& K0 T9 }4 U, U, c0 n
因此,取得存储过程可以用:</P>
# F, }- I: g( S6 R) Z<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>
: o2 T, m5 \, N" o<P>取得隶属于某个用户的存储过程可以用:</P>3 P$ L& q6 R0 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>8 A; T, W& Z( U  d2 H
<P>
$ l+ S  @' K2 [5 H/ @  V6 j同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>
4 Y, B* Q- g; y$ o2 d9 q: F<P>取得存储过程内容的方法
" }& J, J) \! f% h  ?& P: X3 R对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P># i- i( P$ @6 b7 d
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>. Q+ u5 r- h/ K" I
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
  }& m+ n9 p& a+ q. y" k<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
$ t2 z4 m" g/ }存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。
5 H# g2 ^' |0 i5 o6 H6 Y  SUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>
) g* A- r  C( [: \! P9 t! ?8 }<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
5 ]1 `& L$ x( Z5 ~( O5 Z<P>
  c. T5 a, \6 k6 f& K因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>
( `7 H' |" E* e3 O) _$ z<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>
) e; Z4 }: V6 A% m7 x1 [7 m  U<P>取得函数的方法
4 ?6 |( M8 F/ A* w, G9 C/ s同上,取得函数可以用:</P>
: d% v" P" s! P0 C- 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';</P>
: a" B5 S; p! N" h5 ]$ K; @<P>取得隶属于某个用户的函数可以用:</P>
4 W. p- Z! 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 = 'FUNCTION' AND OWNER = 'DBAUDIT';</P>
! _/ @+ k0 U8 k. L- _, K: e<P>, F, V' l6 f: q: _, r* d
取得函数内容可以用:</P>$ J5 b- n% ^* c1 u  f5 z+ p
<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 T) q8 W9 ~9 w6 `& P; S  `<P>取得触发器的方法
+ ^0 @: Z5 s/ w/ x; g3 d) V存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>- q; J5 P; F$ h
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS5 u; i9 k! {* E" d. c; z. v" y
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。
- Q+ }% N0 V4 ]ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
: g  g0 ~+ w4 k1 c描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。
- r& j0 {! ~. _6 J6 ZUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>/ N% E1 o0 A& l
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>  {! Q* L6 U" G1 g7 P
<P>$ @' R7 u7 {3 w1 S! V
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
; R6 ?( U8 Z, FSELECT TRIGGER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS WHERE OWNER = 'DBAUDIT';</P>
3 b' U: P) z  O7 d; b3 o  L$ M<P>
0 K* E. T9 I, c( O0 C, d% D6 |取得触发器内容的方法:</P>
" a5 j! t  `% h5 _( A+ N. `9 i# r<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>" V! Q' ^% ^- Q4 N$ r- M
<P>取得索引的方法
7 ~9 o* U6 ~* t: S6 |' v/ K存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
9 e! h$ w: }9 U  \3 h; G9 F<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES$ W3 z0 H4 l2 \+ J$ g% T
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。
1 D' Z8 m* `5 ^3 oALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES9 |& j' ~/ t4 ?6 W' _- Q: o/ n
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。
" K1 f+ e/ a$ @  |) lUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>0 u. ]' ~! w/ M, Z
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
" v& y/ Y: w. D" b$ h5 l<P>) x$ t/ V7 C1 X- E
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:6 U6 N7 J( f. v! i" ?/ v) ]9 q3 h
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>9 F8 j/ _) {1 H& d
<P>: |% h' _; U0 p& }5 _
取得索引相关的列的方法:</P>7 F$ g) k: p  q. c  l- q- C
<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>
# X# @, _3 G. |0 c& J<P>用户
/ S6 K4 z6 t# I' i3 T! i% O6 u# P存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>
# r; b) H, W% O0 X<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS6 c0 Q5 c/ E( t% E
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
2 _! Z3 Y# `4 l" P7 _8 vALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS. Q8 E7 m* k! q; ^# s8 x6 _) \
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
8 h6 t' T- h( v. ]3 A( a- TUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>" s& w+ V2 t- Y
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
, x1 c7 i* f! Q: S<P>3 p# u* u+ T9 k2 F) R3 [
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:
3 i$ [- @+ S; H- {& K1 q# ZSELECT 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-11 11:37 , Processed in 0.298243 second(s), 52 queries .

回顶部