QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2719|回复: 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 B" W( d) l  A" |& Z- l# X
原作者姓名 Fang</FONT> </P>8 _" s7 B& z( h! ?
<>SQL SERVER
) P; r8 e% `- R% R8 p1 i取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法
0 i4 }7 l1 i% x2 H8 x9 q1 a系统存储过程sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb</P>% O8 j: L# d% _* Q0 p# X
<>或者</P>% J, N  g6 P; d* N, [; \7 v
<>USE master</P>
1 r7 K; K5 H: S<>SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid</P>
* G" e2 ]5 W' S2 J<>
$ i7 G2 U9 y# p# c6 n& Nsp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。</P>+ Q7 |" A9 k' i  F" c
<>取得表的方法
+ a# h6 W2 |  c' i5 l系统存储过程</P>+ R; s, M1 i3 F9 O. [1 p# k
<>USE xxx</P>
3 B+ W0 V% N/ b5 ?5 {7 }<>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>  `! A0 A! `  g( g& R0 M
<>或者</P>4 @8 f9 {2 m0 u! Q) O
<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的用户表:</P>
: u8 ~1 k( w, y0 N8 ~$ x  T<>USE DBAudit0 f. l) A( W/ b' o$ [
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'</P>
: x( T) G" `" [7 {0 Y( G<>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的系统表:</P>
2 ~: y6 K( }7 V1 T6 P* O; V<>USE DBAudit! Z' \( Q' H5 |0 ~
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'</P>
( Q! e5 W9 j8 ~! s<>或者统一使用:</P>& c( X1 b) f/ P
<>USE DBAudit</P>5 s; l7 c# Y4 A' P, C) A6 |
<>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>
1 q7 ~" r* h' t. M6 _6 A% N3 y0 r<>注:</P>* D  ~+ K: b. f
<>sysobjects中type字段类型解释:</P>9 s6 ]. p1 V# P/ J
<>C = CHECK 约束</P>
$ i. l! b" r7 b<>D = 默认值或 DEFAULT 约束</P>
3 Y3 z6 c5 Z- h9 p" q<>F = FOREIGN KEY 约束</P>
* I( h6 F9 }. ~  z, b/ G8 O* l<>L = 日志</P>% J0 U3 ]0 k' j6 m) p
<>FN = 标量函数</P>
8 d0 f  o5 Q, `$ Q$ q<>IF = 内嵌表函数</P>
' m1 z* C; n' p  M<> = 存储过程</P>6 y! z. B- D  o: Y6 Z& \1 L" i2 \
<>K = PRIMARY KEY 约束(类型是 K)</P>( p4 B4 s8 f7 G
<>RF = 复制筛选存储过程</P>
3 u1 g5 S' h! j; O! O) ?/ k  k/ `<P>S = 系统表</P>
7 {% `0 s% @$ \# F) k. B8 a<P>TF = 表函数</P>7 m; @, t. i5 g2 i* V9 a$ \
<P>TR = 触发器</P>2 k0 [0 ^* @. W# w; f# @
<P>U = 用户表</P>
9 n1 N, g! a% X- c<P>UQ = UNIQUE 约束(类型是 K)</P>
" C: U: A$ @* F/ p! _2 X5 n6 r4 n<P>V = 视图</P>
7 m8 _: n: u5 L<P>X = 扩展存储过程</P>
- ^8 J- G' U* |<P>取得列的方法
: {# f  J. F  p8 z" V系统存储过程</P>( m5 R* T5 d$ V. `$ w7 }2 _
<P>USE xxxDatabase</P>1 [" `, c9 a( f4 F( p6 ?+ o* P
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help xxxTable</P>. Q$ g; V, w9 S- l: V- i
<P>或者</P>  @4 i* X  s% ^6 R% ]
<P>USE xxxDatabase</P>+ A- X9 C+ Y7 I: x+ D( e
<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>6 R" _& |. ?' Q0 b8 y
<P>这两种方法都可以取得包括视图的列。</P>+ ]: E5 G$ R+ \
<P>取得视图的方法
, P% q/ ~1 t/ A" R8 e9 o" H系统存储过程</P>
+ y3 P- E6 ?! v& i: ]7 `) u<P>USE xxx</P>
% F$ C. B( ?' s<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
/ M2 u8 S3 ?: |7 I+ m8 e! D9 K% Y& u<P>或者</P>( Q% F! O' t9 |- w
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图:</P>$ R5 ]* t2 Z* q* D6 H/ R
<P>USE DBAudit</P>
' S, E: ?0 J0 Y: z5 P- a<P>SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V' </P>
# a% f6 ]* V' p% W* Y<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的视图的内容:</P>  v# c3 @, w2 T! [3 C
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>7 Z* u5 x4 Q5 f2 Z; A
<P>取得存储过程的方法
: s! e5 G! ?" D$ H系统存储过程</P>
9 @3 P( Q, {; B8 _, Y" ~+ H<P>USE xxx</P>
- m/ i0 y2 Q3 k" O/ A<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>' ]/ P# D" s3 w
<P>或者</P>
; G# X2 L" r! B1 h* _# p8 P. j<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程:</P>) N. ^, _0 @( y: _- ~
<P>USE DBAudit</P>$ r6 i: L8 f. d+ j' I+ L/ o
<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>
- A, b9 u: F  ?8 g) F5 ^% T9 G<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的存储过程或者扩展存储过程的内容:</P>6 |, K7 N1 r# e" v; E* ~3 m1 n
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
" j( {# q. E: k' B<P>无法获取加密的存储过程。扩展存储过程只能得到dll程序名。</P>
9 ^  k% {# p- i0 \; [) {<P>取得函数的方法4 \# n; J, ?7 Q2 S
系统存储过程</P>
0 f) {( Z! {+ D<P>USE xxx</P>- Z, t/ c/ k* }+ W( w! R5 i
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>help</P>
) k2 e6 V& t8 p4 D<P>或者</P>
9 x/ Q0 }. r, Q: b5 J9 c3 U' x' I<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的各种函数(内嵌函数等):</P>
+ s, r/ l5 {# i& ~<P>USE DBAudit</P>
- E5 A8 E& A5 W  F# R; U( x<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>/ O) F- G9 f# n  C  O
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的函数的内容:</P>( \1 w3 I3 @* A% B5 l
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptext xxxObject</P>
# `  J4 r' {$ F$ D<P>只能获取用户定义的函数内容。</P># h: l+ e+ F1 \* l
<P>取得触发器的方法
$ a! \* x$ N* a系统存储过程</P>7 z$ }$ }! E; o, A
<P>USE xxx</P>/ W; L. g# V- N# P+ @, K8 n
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helptrigger xxxTable</P>
# a" S% c2 K; i<P>或者</P>( j& @2 I! g8 F: I+ n( a+ u
<P>获取指定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>的表的触发器:</P>
: B# W) s; {2 @- h0 Q' v' y2 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>
( i# a! V3 X2 s/ f- B5 e<P>取得索引的方法; m* S- H/ L9 l& ^: I
系统存储过程</P>3 q' ^/ h  F3 c% h" I. f  c
<P>USE xxx</P>
3 i* [9 Y# c- n) {! |7 S. k<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpindex xxxTable </P>/ j; |: g- l. Q- m6 q
<P>用户
4 V2 I- {% Y& \& d  Y系统存储过程</P>, v* z" J6 x- z! P
<P>USE xxx</P>5 ^8 m: f5 a1 Q' F2 c( W
<P>EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helpuser</P>" f* {1 P/ b- Z+ P
<P>角色
; C6 t# x: ?. }' i' C" Z8 e系统存储过程</P>* w0 @! T! F* z' K% p, E( b; i
<P>USE xxx/ V  b  E) t( o2 Y: Z# j5 `
EXEC sp<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>helprole</P>* J! b! s0 }. r% ^

* K0 B' m: H% F' X7 Y/ ?* K; h& }& I5 m<P>ORACLE8 L. P& m( v+ n2 e; ~8 _( j
特殊
9 \9 X" a  z! S- e1 d&Oslash;         ORACLE只能连接特定<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>,不能自动扫描<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象。</P>
+ ^; X6 I% ^! k; O/ w* q! O  y<P>&Oslash;         ORACLE表必须用用户来区别,否则表可能重名。</P>' {$ z6 @$ m5 Z
<P>&Oslash;         ORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。</P>+ u2 D6 A, _# r6 d0 E
<P>取得<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>名的方法" \2 q: p* u5 L* n5 E
只能由用户指定<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>7 }( i! O" k7 ^6 G- ?
<P>取得表的方法$ {- _/ ]$ O, k# V" J% I- [$ z2 I1 x
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的系统表/视图主要有:</P>
% W, D1 ~( d8 O; _<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>
* T0 @5 U1 [; ?. H' g" a, ?3 m: t+ O<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象以及相关的表。</P>4 g0 L; T+ w- o/ ]
<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>
4 W7 |' I# N  c  w1 h6 i2 N<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的对象以及相关的表。</P>4 N" X6 ^% N. Q- Q0 O  M/ d
<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>3 i3 K/ P9 M0 A, n3 {
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的对象以及相关的表。</P># U: d8 Z2 ]6 t% t- M# V
<P>3 ^: G5 g' R# o1 I1 }- s9 \' O
DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
# M! t  l$ p% _: ^( v<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有相关的表。</P>- \! y' D6 x7 c$ C7 c
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P># j- R+ {/ y! I( z& H
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的相关的表。</P>& b, y. K6 J; G; t  d- J- Q
<P>USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TABLES</P>
- s, J% Z& ~1 Y: F4 F8 z<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的相关的表。</P>
$ ?- }3 j, t, e+ R6 i<P>
4 W6 o& e! o( n6 s% j因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TABLES中取得隶属于指定用户的表:</P>; G1 J9 W4 |6 r4 Q* q: 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 WHERE OWNER = 'DBAUDIT';</P>; W' y$ N/ n! R5 o7 f9 ~0 ~
<P>取得隶属于指定表空间的表:</P>) C: x9 X6 x1 I5 B6 Q' 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>
6 T* p3 V; N8 [9 P6 T8 d<P>, C% ~: f& \  H; b7 `! Z% f) b1 H% V
也可以不指定用户名,从而取得所有的表。</P>
7 E" t' Y8 e/ 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>! ?! h% s/ B0 J6 c+ P' }
<P>取得列的方法
% O7 `: n- W* |( {8 n, |/ N) i+ p存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>表的列属性的系统表/视图主要有:</P>
, j+ x# h( V; x! [<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' C  A) A# h* S. j9 \
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的表的列属性。
, v$ u+ A, s, ]" e( U; pALL<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 \# a$ S; `8 d4 `
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。# w! Y5 f" w% Y- W" _6 o
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# A: C$ b/ X1 O
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户拥有的表的列属性。2 ], }6 t- P$ U8 `! w! E
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>$ T* {( X* L- r9 \8 C1 N
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的表的列属性。</P>
% {; \( U+ T' o1 w7 T! b<P>4 x, P0 q+ Z$ q: E
因此,可以从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中取得隶属于指定用户的表:
* X& ~- r" n+ F( \6 x  @7 K! R3 KSELECT 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>
8 O. d1 G% M) {5 P" }<P>取得视图的方法6 C7 N# x/ ~+ }( j9 Y9 z( C
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>视图的系统表/视图主要有:</P>" Z+ N* h$ H3 r" B* k. z
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS8 E% S  d. v' A5 f: k; J
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的视图的属性。
2 U# W0 b& S  E8 E1 C8 Y/ ^ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS
% D# c. d3 j: F" j9 o+ f4 {描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的视图的属性。
" ]4 r8 l$ w1 {5 NUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS</P>
0 [* L: h% T9 P& L; Q, n5 b<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有视图的属性。</P>
/ K- z- j8 [$ C0 }<P>5 r( k9 F* @' R1 b' h
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>VIEWS中取得隶属于指定用户的视图:
/ d" M5 k9 g$ w1 J2 d! qSELECT 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>$ c! ]# m) ]. Z) W7 A3 x; d& w2 `
<P>取得存储过程的方法
+ A4 B/ ]" D- K9 ~9 w9 N! k6 p: l存储系统对象的系统表/视图有:</P>" C8 s( \5 L& E+ Q
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>& S5 P( ?& l' U$ M& I  t: x5 y
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的对象。</P>+ B8 W$ I& f  y: G" e7 M
<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS
+ ^4 P1 P) P8 ]* K描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的可以访问的对象。3 B+ H) d8 B; g
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>9 h# E$ B( L6 H% @! B6 j1 Z2 p
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有的对象。</P>
) @, g7 ^8 {" ?9 V6 t! e<P>SYS<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS</P>
. h3 ~/ I) v: I4 E! `; J, }<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的系统对象。?</P>( K+ n2 J5 e8 f" [+ E! j
<P>! C+ w" H: [/ Q# u7 I
对象类型有:</P>
, h! ^8 d' v' C1 I<P>CONSUMER GROUP</P>
' d7 R( C( {2 r<P>CONTEXT</P>
9 F% [  E- P% N6 L% [& t# H<P>DIRECTORY</P>
% K: ^" h% u9 J+ Y: B<P>FUNCTION</P>
. F. Q1 M7 L: m$ i- i$ C, i, W, @, t<P>INDEX</P>
, L* M7 I9 I0 x. H<P>INDEX PARTITION</P>' {( ], E, @2 Y6 m, K! q1 c
<P>INDEXTYPE</P>
& o: }6 X( e8 K+ ~<P>JAVA CLASS</P>, r' K' x$ @' ~' K+ A/ v4 y4 p
<P>JAVA DATA</P>
) p$ r5 a4 |( R  x) k, w: d& K; C$ |<P>JAVA RESOURCE</P>' e$ d) z, J+ E$ k$ h3 f
<P>JAVA SOURCE</P>5 s& f5 h5 l. {5 h
<P>LIBRARY</P>: O' w3 s% J$ L
<P>LOB</P>
, \3 a7 e1 f  P<P>MATERIALIZED VIEW</P>
; N; H8 G& t5 @% \5 g<P>OPERATOR</P>
, S4 ]/ A- I- L$ x0 N/ k7 \<P>PACKAGE</P>9 [" \. {! q4 r1 c% T
<P>PACKAGE BODY</P>
% M6 j7 h7 r4 e' n# ^<P>PROCEDURE</P>
) D& U1 ^% d5 E; D* R- C: k* g3 C<P>QUEUE</P>
( M: S2 \1 \6 @, f  J; k<P>SEQUENCE</P>
) ]6 Z% b5 r. J. ~! ?<P>SYNONYM</P>
2 j* S! E1 b/ |8 G<P>TABLE</P>4 M+ N% [6 h( g' _. Z9 F
<P>TABLE PARTITION</P>, q" Q0 p5 F7 }% o( V. C9 c% n
<P>TRIGGER</P>
1 ~# ]! [% ~: l  ]: q. R<P>TYPE</P>. s! ?4 w) L1 G
<P>TYPE BODY</P>% c3 Z2 b, B+ y. n5 y0 U
<P>VIEW</P>2 r$ ?1 }; Y8 z7 ^  L* l  V
<P>0 D# A( G$ N  c3 n! V1 j* g' C
因此,取得存储过程可以用:</P>+ A- M5 q9 R( d/ a6 v8 q# W
<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>- O  V- [1 [9 p0 u# S( ~
<P>取得隶属于某个用户的存储过程可以用:</P>
6 e8 Q2 ~* T5 g# z0 o/ @! A! q9 a# V3 g<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>9 g2 G8 p1 Q- l8 C
<P>4 n: l8 U8 }4 D& w" D8 M8 R2 D$ l
同样,取得其他的对象也可以用这个方法,包括表,视图等。</P>
) j7 Y: t% J1 O) m<P>取得存储过程内容的方法
& q; l* J: W' E) F" k2 \2 _对象类型为类型、类型体、过程、函数、包、包体,JAVA源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的所有对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>都存储在几个系统表/视图中:</P>
7 j/ c6 M/ o$ Z5 U  @<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>) t# A4 b3 \5 M6 y2 l5 U6 _  [. ~
<P>存储所有<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
8 h) Q8 U- R' \4 A<P>ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE
' n5 g; }4 `; p' @" x8 O存储所有可以访问的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。& w6 x! e' }6 @# b
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>SOURCE</P>+ N* r) {. z  w' x+ H  I/ J0 R
<P>存储所有当前用户拥有的<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>对象的源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>。</P>
  D9 C1 m' j! X) f<P>
( G8 J$ j5 d6 y0 j因此,取得存储过程源<a href="http://hackbase.com/hacker" target="_blank" >代码</A>的方法:</P>
- @/ F2 Q# j' T9 ?) u: \( F<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>
( ^$ O5 q; Y1 o+ u! q& ~<P>取得函数的方法
/ S. S- R  P2 l" M同上,取得函数可以用:</P>0 U, n/ E' H5 r& i  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 = 'FUNCTION';</P>6 g. V8 F. K2 I8 ~) ]
<P>取得隶属于某个用户的函数可以用:</P>
8 d  I/ B8 i4 k3 v4 q<P>SELECT OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>NAME FROM SYS.ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>OBJECTS WHERE OBJECT<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TYPE = 'FUNCTION' AND OWNER = 'DBAUDIT';</P>
! r  `* |  S) w- D/ R<P>- ^# f+ V5 z! R2 A; O
取得函数内容可以用:</P>
& R# q" |9 {" r' f<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>0 I+ _. f5 Q- _# ?% p
<P>取得触发器的方法" Z0 ~2 s% Y2 x9 Z+ \9 H" m1 |
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>触发器的系统表/视图主要有:</P>
8 Z# c4 O) F3 _<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>TRIGGERS
. ]6 P% k8 ^* G描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的触发器的属性。: R* k) q% T/ ?, E: \3 @! i" D. O
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS
5 l2 L1 I' ^5 Y, \' c7 ~描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的触发器的属性。( ?+ h0 c- ]0 y0 k+ _4 ^
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS</P>. v, i6 J5 Y: x7 r& H& `; M8 P3 F1 O' O
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有触发器的属性。</P>
- j# b+ p. R. _<P>
  U; y6 k) x0 ~: `因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> TRIGGERS中取得隶属于指定用户的触发器:
, e, N3 v3 P8 c- H4 q( O+ b/ sSELECT 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>" c1 M( d% q+ P
<P>1 M* E1 x2 f) ~6 z& i
取得触发器内容的方法:</P>
& Y6 n4 S; f% I$ q0 [8 o) n<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>" @1 }1 \( j, Z1 n& g
<P>取得索引的方法; G3 n7 d4 Q- s& K3 K
存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>索引的系统表/视图主要有:</P>
% j7 C8 B; u3 R2 ?: [% _% B" z7 ^4 m0 n<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>INDEXES
8 j! T5 ?2 R0 l0 u描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的索引的属性。( N8 ~* c2 A% M7 C
ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES7 G; d) D; w% M
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户可以访问的索引的属性。5 f5 v" r& _* g* D
USER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES</P>
9 V1 ^9 v# T' o9 K<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的当前用户拥有索引的属性。</P>
/ u6 C$ O" S" i( T0 x+ T<P>
& t' I( o( y1 C+ \3 o9 o( {因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A> INDEXES中取得隶属于指定用户的索引:0 v9 M; U' R$ l8 x+ \) R
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>
7 d" B6 Y+ r8 f3 p1 [) Z+ i<P>
% m6 ~  C9 F. A- h, e8 G取得索引相关的列的方法:</P>
7 p; B/ B$ Y: R, H. m% j<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>
8 {4 L: z! Z8 p9 ^<P>用户
7 J7 G: x" e0 B& }4 Y存储<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>用户的系统表/视图主要有:</P>( b: b. I% r! r" I
<P>DBA<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS; S! ^6 u$ w# o% d! i/ F# l; m
描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
1 R# D! P  U- E- MALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS
) h; S) W% j0 r( p# y, f描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中所有的用户的属性。
8 r7 X, m' l$ F5 t1 a* k6 k+ c  y! BUSER<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS</P>, z8 {* V: K; F. |4 R
<P>描述<a href="http://hackbase.com/hacker" target="_blank" >数据库</A>中当前用户的属性。</P>
0 V: L# r; Q& R8 m7 g0 c<P>8 _. g6 f2 @/ C6 n6 B
因此,可以从ALL<a href="http://hackbase.com/hacker/tutorial/200502019779.htm#" target="_blank" >_</A>USERS中取得用户:1 u2 D0 E) h3 C( l: Q  D. d
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-10-9 06:04 , Processed in 0.322844 second(s), 52 queries .

回顶部