QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-2-4 23:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>关键字 <a href="http://hackbase.com/hacker" target="_blank" >数据库</A> 对象
+ }2 x5 f; ]) H& Y5 i* d; b5 _原作者姓名 Fang</FONT> </P>
3 ]! H0 q- Q* e1 j<>SQL SERVER
, U& {7 \/ l8 G. M取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法# i6 q( I9 \$ z; B
系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>: F2 t- u1 c* I9 s
<>或者</P>
+ m; ?* h; c" A' z2 `% ^<>USE master</P>3 I: }8 N: d2 a6 k& P% d; K4 n
<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>5 D2 w' B7 x0 H) {5 i# ^
<>6 d- O1 n, W1 d6 W
sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>: u( M: ~# s- @) z, D2 \7 _" ?" [
<>取得表的方法6 i* V; [$ e& |" |
系统存储过程</P>
+ w3 H# c8 k, v3 P0 L5 m<>USE xxx</P>* z7 Y* e) y4 O3 y3 o& G6 q6 J
<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>* v9 }8 E; C3 }4 X
<>或者</P>
5 x1 l0 v1 [8 ?+ a3 m9 f<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
' L$ k. L+ g/ h7 ?. i/ B8 ?4 l<>USE DBAudit3 g& b0 T  i* ]7 N  B) a
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>
& @) Z: D( H( P, N* ^) Q<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
% w7 s7 f" i- d3 q9 Z+ X/ K<>USE DBAudit5 ?3 p  Z2 D0 ?+ R+ C3 C
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>" k2 `6 f8 `" w$ ?
<>或者统一使用:</P>3 G5 L! G; i+ c0 {
<>USE DBAudit</P>
: B; s4 i/ ?- K! |5 }% U<>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>. [$ L" n+ m( L* f  k
<>注:</P>
3 O; d/ ~8 h5 a. i! N5 F<>sysobjects中type字段类型解释:</P>
2 c0 Z6 f! ~6 k) q6 x- c( H' W3 s<>C = CHECK 约束</P>8 [% D3 S. b: A" ]) y+ U% _
<>D = 默认值或 DEFAULT 约束</P>) a% h; Z) @1 {- N
<>F = FOREIGN KEY 约束</P>" |- t, a3 B) M5 f+ k
<>L = 日志</P>
/ X9 z9 T6 |- M7 t$ q  k$ ]<>FN = 标量函数</P>
, G2 p( a( y( [/ a  w<>IF = 内嵌表函数</P>2 K  @) |* T( k$ Q! C
<> = 存储过程</P>
+ D3 i3 Q6 k4 u) e<>K = PRIMARY KEY 约束(类型是 K)</P>
$ ?, X1 }0 F2 }+ m2 Z# B1 Y* ?<>RF = 复制筛选存储过程</P>
4 y# U! s& p  c<P>S = 系统表</P>
" M6 E2 B2 y* c4 P; [5 M# [# d. J<P>TF = 表函数</P>! l7 J6 w  G% k8 d) F+ y
<P>TR = 触发器</P>
+ K/ H- m" M) ?1 q, O<P>U = 用户表</P>6 ?: k( I7 ^2 P  V6 H
<P>UQ = UNIQUE 约束(类型是 K)</P>
7 d# h; L3 i* O# Q( W  f- E+ A<P>V = 视图</P>0 o2 o" `) g' x
<P>X = 扩展存储过程</P>
2 Z' X0 _& C5 `" H* m# w8 o; H<P>取得列的方法
, v+ Q" C6 A! [8 v" U系统存储过程</P>
8 p" X% b. u' ^0 Y; V* ^<P>USE xxxDatabase</P>
2 T. {6 h) m2 G; {( o<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>5 t! E' p3 i: ]2 b' e; F
<P>或者</P>
& Y* g7 p0 d8 ]" Y, l; z3 v# Q<P>USE xxxDatabase</P>; P- Q  s! D: B6 T8 E: I6 \- t  @0 R6 S5 M
<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>) g: d; b- R/ }. X. B* E" b0 g
<P>这两种方法都可以取得包括视图的列。</P>( y6 |$ I6 f- @- k, E
<P>取得视图的方法
* c" |1 a0 h5 I% x8 o系统存储过程</P>" h* U) d/ T9 A) ^
<P>USE xxx</P>
0 {0 i8 L9 Q1 @+ {, P8 B5 F  o- V<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>' N1 ]1 Q# X8 V. ?
<P>或者</P>
. k( ]% X' e2 S" ^: s7 Q<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>
) e! t/ F3 M4 E: C8 l& S8 z: H2 C! \<P>USE DBAudit</P>5 |* g5 P" ?+ _' `4 n; x
<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>
' X5 }4 s0 m( k; o<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>5 k7 |% p( U8 W3 c7 F2 E
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
" i- Z" S: U- ]& ]<P>取得存储过程的方法
" \& k* X! U& v: @( U% q1 x系统存储过程</P>2 L  S" `6 c* w% J* F* l: j
<P>USE xxx</P>( K* Z3 j  v' {3 u! b
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
; \' {) q) D+ B; x6 o1 i% O: j<P>或者</P>
% I* w; r6 L7 K  c<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>
+ Z4 @- O6 F4 b: o* k) H8 u, d<P>USE DBAudit</P>- x7 T# x: x& O6 z3 b
<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>
& m5 @! t# a' G  d' d<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>
, v; R* e3 J$ i5 M<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
7 L& r, K6 p% }, f<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
& H! D. a8 F4 y) H<P>取得函数的方法* _1 D2 @% i) v: L. N& N
系统存储过程</P>; n# r- r3 ^2 I
<P>USE xxx</P>, x$ t9 V2 _+ @8 A  h/ M4 c
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
* U/ A6 X7 `6 e# L  h8 {<P>或者</P>
9 A0 l7 v8 H) V- l<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>" e4 x/ M2 j, e6 ?, \" D* q
<P>USE DBAudit</P>4 }; H* A; D9 H7 L9 V8 A$ _9 |
<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>
; v5 ?! x4 s9 e6 b. R$ J$ `<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>0 v2 r1 A# M0 l$ D
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
$ f4 q! I: Z( o9 @$ v  {<P>只能获取用户定义的函数内容。</P>
# W  r$ D5 L. H& k+ K" t5 ]4 Z<P>取得触发器的方法9 w2 J6 s6 ^6 R6 S( t
系统存储过程</P>7 m2 R5 G- {; M8 u& W( }7 S+ k
<P>USE xxx</P>. m+ _' N- i; B% o! J+ ^$ |# S& M
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
% g: q( @4 w0 [1 j1 w) P% r<P>或者</P>- m2 h. P1 _- P$ w
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>
0 ?6 t2 ]3 w2 {0 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>- C" `& e7 l, p0 C5 T
<P>取得索引的方法# z% y: Z0 O. q; V1 J
系统存储过程</P>
( [8 L" V1 @/ x4 s4 q2 y: Q* i4 F<P>USE xxx</P>6 T; Y: ^9 [2 a
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>
" P( ^# [/ K6 S/ w$ i' k<P>用户
& s0 J6 D- [+ h3 `6 Y4 ^系统存储过程</P>
" T2 t, r0 b# z<P>USE xxx</P># B, @- }* O6 @
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>
5 _6 ]3 Z# w" l3 X& M- H* y& U* ~4 j<P>角色' H6 y' e/ ?" P5 O: F, p
系统存储过程</P>0 l# l5 s3 G4 B) ?* a
<P>USE xxx
: w0 R4 e$ J& qEXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>$ [, S+ w# L/ h" n

$ H1 _6 m( h/ I$ n) |8 Y- E. \<P>ORACLE' n# x: h7 O. J2 A
特殊
3 L6 Y% Y( z9 Q* B; \% y&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P># E6 M% O) q/ J0 [
<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>7 F' G4 ]3 X: @3 L  M
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>
- _: g- m5 Y, g<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
+ u& J& `# i# A9 L0 z3 W只能由用户指定<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># t& S. _! z6 X& N; d
<P>取得表的方法: [9 O3 k6 F/ f8 T3 i6 H
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>! D# z9 _1 h8 s2 _
<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>
7 j2 s- i7 M* Q" F8 D  i<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>
( R: w8 O) B# P<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>" o7 h' z2 u+ T6 N/ I# {
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>
# q$ k  U2 g5 X. R/ h/ N. @0 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>: j3 `/ _8 ^  R- l  @' }
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P>
7 l3 W+ h- [2 ^( ]$ s<P>
* E$ G# t( {( aDBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>3 a' j# U" r( W) U6 m% q
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>
' @0 E) S$ r& L. _; X* o, P<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
& V* n' [' n" h0 L1 t0 {<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>
& A  G4 J; ~2 @# o5 x  A3 X<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>7 b% g# _0 G  P( H- k7 M
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
( u& b, ?- c& `! y' x- }<P># b- b: x; C$ K, N/ |& E4 T
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>
' m0 q8 h# B2 g& h9 U7 E<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>
- T9 g3 D* |. ^7 N& t: U6 `' j' D, g<P>取得隶属于指定表空间的表:</P>; S, r2 @. |6 T: j
<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>" D3 B: x3 `2 n9 N+ U  o
<P>
# m+ v! I2 ?! Z也可以不指定用户名,从而取得所有的表。</P>$ Z7 {, P: g& O2 |6 W+ [7 l
<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>" z! m) t+ g) B  Z& V) P
<P>取得列的方法
+ y$ s- D% G- M存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>
2 m0 [: W, j! V, T<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- M- f5 _  J! N
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。
; X. D* Y. q2 ~( U6 wALL<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
. ]; s: Q, B0 z/ V# s) ^0 ?描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。
, t  n; E: w8 l: M3 sUSER<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 |, y0 L3 y: }* o- J0 ^描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。' |# X$ g3 Q: {/ F! 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>COLS</P>$ Z) {3 s9 J/ |" b. n/ r
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>
0 \% v( @2 [3 d; @* C+ p& S<P>
1 E1 h3 _8 N/ Q' R5 Y" Q因此,可以从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 U0 R' |3 H; d- ~3 m3 C% N" a
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>) n5 B( y. D) H1 u7 n# V
<P>取得视图的方法4 T6 T9 f* Q' T! E# J
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>1 v, R% M1 t: I8 {6 D3 B
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
3 g) ^& R4 W6 n1 L' X描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。/ ], I! t% K" }: d
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
4 q8 B6 h0 f7 d* e4 a4 |! N5 `描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
4 q0 c- d/ _$ M8 J5 ZUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
; L9 P: P- [5 F3 J' Q<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
5 ?1 ^& y9 l* ~5 M0 n& q8 v<P>
; T. X3 t' t( S因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:- l9 I+ l- @% w. j9 C7 E
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>( S- t& ?; j5 U; y2 Z, D. {
<P>取得存储过程的方法( u- Y6 n- Y. y/ B
存储系统对象的系统表/视图有:</P># D3 B! T* K+ K) _
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>% L  V  B5 r2 N
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>& C) Q: O5 p* H/ v& g+ y$ y
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS
  y' Y, a$ I8 Y) I) S/ B4 s* n0 ^描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。% v4 b: r% U  M, h6 V
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>! G3 ?2 \( b+ ^$ v& m) c
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>3 k: m+ _7 l5 G1 ?# g
<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>+ ]9 N9 T. N& P% ?. U$ C
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>
, ^: L+ Y/ ^- I1 `, A! c4 {<P>
9 A: b+ ^) t( A对象类型有:</P>$ w3 n1 V+ S* j$ [% H! C
<P>CONSUMER GROUP</P>
! K  `1 k) {4 c3 b9 d<P>CONTEXT</P>2 }& d  h, c8 r, T/ }6 m
<P>DIRECTORY</P>
1 ?8 M$ _! p- G5 {1 M- W5 s# h/ Q<P>FUNCTION</P>
+ p; B4 H* Z9 D<P>INDEX</P>) |3 D+ Y! w: b. M# d% n
<P>INDEX PARTITION</P>
7 r! {7 {; k- T4 K. i3 d<P>INDEXTYPE</P>2 D3 B" U* `9 J3 P& L1 X
<P>JAVA CLASS</P>& f8 `& o0 a! q, V# j
<P>JAVA DATA</P>
8 A1 m& H4 X0 p<P>JAVA RESOURCE</P>6 A+ c4 w. c3 ~+ X  M7 o
<P>JAVA SOURCE</P>" C8 r1 A( a$ i2 S; ~7 N) H3 a$ s
<P>LIBRARY</P>- m- K/ `' V8 \0 m9 I
<P>LOB</P>9 l. M1 e4 Z+ t' \
<P>MATERIALIZED VIEW</P>
8 `. t. t0 N7 D+ c<P>OPERATOR</P>2 N: v9 M) S  j0 u( |- b/ u$ `, {
<P>PACKAGE</P>
# O- Y2 A3 E! n% D& }. v" u<P>PACKAGE BODY</P>5 l% u9 ]7 S; J7 @. F
<P>PROCEDURE</P>2 V, ~8 N2 v- L! g) G$ t  C, B3 q0 |
<P>QUEUE</P>
0 j1 L4 H* z! f$ F<P>SEQUENCE</P>
# n$ Q/ L0 a8 v4 I<P>SYNONYM</P>
6 P5 U8 q% a: O! X( n( @! u- L<P>TABLE</P>+ o  [" c3 A( J2 S
<P>TABLE PARTITION</P>
5 i' P% h5 \9 C  D. }<P>TRIGGER</P>- z, K% N2 L) Q4 o
<P>TYPE</P>2 z' Y4 ~& ]6 {  s4 o
<P>TYPE BODY</P>
2 G; H1 P, s( q0 M<P>VIEW</P>' H+ p$ ]) |- f, u: U+ \" n. L+ {
<P>
6 O2 f( q/ Q' s* c. w% I0 c7 s因此,取得存储过程可以用:</P>
# _0 G' l! z+ c* L<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>
, f9 Q) a& q0 |) O  }/ z<P>取得隶属于某个用户的存储过程可以用:</P>* @1 y0 y) A! @2 X
<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$ D! l# L7 B% G& J* X0 C<P>
  {# t* O5 R8 F. j" G同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>0 i6 N: p$ Z, t+ ]$ T) ?! C; F) p
<P>取得存储过程内容的方法. Z1 y- O& G) ]  p
对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>
4 l( ~6 S# a/ l- G5 P* k, F<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>* k2 y* O& o2 o( y5 i
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
9 y8 s3 Q9 S$ }4 d9 Q9 H9 H+ d<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
7 ]" W! T; z$ n! n3 C5 f' c5 w存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。# L, U" \: X- D& g( {
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>1 y/ f% O/ l" H8 N
<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>2 a0 m" |/ w6 p& Z8 f
<P>
; S4 @6 b. [! @1 U% v  K/ d因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>$ d. c4 K2 `. n
<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>: s9 R9 b6 D* N9 z1 |# u7 n
<P>取得函数的方法
* `0 |! n: t$ I同上,取得函数可以用:</P>6 M+ }$ q% i! O. S& j2 F
<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>0 E# j. X; \3 I3 D9 j+ c3 W
<P>取得隶属于某个用户的函数可以用:</P>2 X: `! M+ S% H  u+ C1 f. P( 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 = 'FUNCTION' AND OWNER = 'DBAUDIT';</P>
$ ~2 W! x+ l; Z0 j' }<P>
4 H& E9 H5 t  ~; ^取得函数内容可以用:</P>
; s4 u0 \/ Z5 R- a3 k<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>* s+ ?: A* m* g6 z6 @3 q
<P>取得触发器的方法; H; i0 {+ j5 @" N3 }( Y+ T& k! j
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>  I# @" k4 R' v. C% Z
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS0 g+ M$ o- P: m" O
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。1 U3 a! w" s/ W. q
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
5 ]- i5 d+ @" }" d描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。
: N, _* t8 Y% x2 y$ K  u' a* u9 cUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>& R0 M: z. U9 U3 c" F
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>8 b7 V) F& g, k7 r! }/ Z
<P>: S" e9 U3 O: X4 |( b
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
$ M7 o! {! Z% y& v% MSELECT 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># i) U. _4 E+ Y6 [( S
<P>
/ P! i) i& P" M; P) z- o7 A取得触发器内容的方法:</P>
# N4 e/ n) p1 p( ~0 ?<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>
/ b& {. w+ c* v4 W% Q% j<P>取得索引的方法
& @) D) d; t6 J) g0 R* T0 H+ P& X# Q存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
" t3 l4 N4 j6 N2 Y<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES2 T+ Z( E. a& c. U
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。- w; M/ r: v9 w7 n4 [
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES% h- u/ X' M' M0 c5 U7 R! H6 P% n8 j
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。7 `* B4 }; i6 e" |% s" W
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
3 g2 C, t9 @0 Z# s7 Y0 ^<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>9 Y4 a+ G+ `( W' d
<P>
+ p$ x0 }8 y$ J9 x% d4 U5 H因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:, \4 ~( U4 s3 [) ~4 b: s! K
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>' m' o! D+ [* ^7 T1 B
<P>
" b  _$ b# s' c6 Q( W. x取得索引相关的列的方法:</P>0 `( J# R; V. z: ]
<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>) \, ]2 E$ O, |' {  R* B
<P>用户
8 v4 M1 n! \7 D9 r7 [9 @, x8 ^$ Z1 T存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>
4 H; D* C  S" I  X2 p" M<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS% c* K2 J+ z9 D! U2 e/ z( e
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
' d. r  y- L! Z7 g5 [8 cALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS3 X3 @, m! h0 w+ a  L
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。! G6 B% Q' L' L, T4 J6 @
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>
$ }# H' V7 v( A. y<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>8 L5 M0 R% @% G
<P>
! e" c) w! P# y: i, o因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:. B- E5 c3 @, E  j  w3 m- s; Z
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-8-8 23:48 , Processed in 0.430341 second(s), 52 queries .

回顶部