终于开始学习oracle了,在电脑上成功安装了oracle9i
! h+ r Z9 k* G$ |" o! V# s f 今天学习的是oracle的权限管理
+ l- \: T, H6 J+ M 首先在开始--》运行——》cmd,然后输入 sqlplus sys/密码 as sysdba, c6 w3 @: X! X
以sys权限登陆进去
5 F9 d/ u9 }6 _# P' O 然后可以进行操作、:
\- S# T# D. d% C0 E5 R+ K# \ 创建用户 create user test indentified by test;* {9 T- A/ I' B. ?7 N
这样就创建了一个用户名密码都为test的用户
& L4 ^# ]: P$ f: ~7 B$ ] 但这个时候test还是不能登陆成功的,我们需要赋予相应的权限
* e* E2 {7 ]- ]5 ~3 w8 _2 O 首先赋予create session的权限
/ d7 r* f P& a0 C. s( l grant create session to test;. ?; k2 T7 w- {. C$ q: U# V
这样test用户就能成功登陆进去3 K: M; G0 U: [# j8 }& s5 i
但是此时用户还是不能创建表 我们需要赋予用户创建表的权限:" s% z6 t' q: r* [& k' Z3 a3 ]
grant create table to test;) W( J k) Z0 M2 x4 f# d: }( o
但是用户此时还不能创建表 因为需要有使用表空间的权限(相当于 用户有了进房间的钥匙 但是没有进大门的钥匙。。。)
- L8 x( T" o. k4 _" F1 B 所以也应该赋予相应的权限
; i1 e. o! q" L/ T$ J# T grant unlimited tablespace to test;8 T. ?' T% a, C5 x, J1 \, v
这个时候用户就拥有了创建表的权限 由于表是用户test的 相应的他就拥有了对创建的表的增删查改的权限了& I$ D& O. n8 F \- }/ [' K. e
我们要查看用户拥有什么权限可以通过查询一个系统的视图(数字字典)
1 M. o% R. [! |, n) T" O' U. l select * from user_sys_privs;+ Y/ R6 i. C/ d( i8 o& E- J
这样就可以知道当前用户的权限
. ?- d4 R9 \7 F% a 撤销权限 revoke create table from test;9 V4 r6 G4 w3 P' [6 \( }3 L; a
场景:5 Y- [* O. ~" N" A1 u$ m
用户test 用户test1$ y5 P+ {' |. C9 ~* y- a5 f
test1的用户创建了个表mytab 并且插入了一些数据
) W ] C' V" x9 W. z 那么 test用户是否可以访问到test1的mytab怎么访问?8 y0 n4 J! f) H; t) |+ M+ F
答:不可以,必须先授权
1 }9 {! `1 Q' T4 E6 a; B* S! d test1必须授权给test :grant select on mytab to test;8 O+ R; @0 B$ D9 } E/ M; q
那么这个时候test可以通过 select * from test1.mytab;来访问mytab中的数据: C$ E- W8 x1 g
如果想把某个表(对象)的所有权限都赋予给test那么可以:
! q6 M4 I- c1 e. \. ^# {3 e grant all on mytab to test;
" }" f4 C) N& C* K' T 撤销所有权限9 n& V. T* F+ w7 V* Q) y3 G
revoke all on mytab to test;# z+ o+ A* m7 ]6 w) M% z7 L
总结2 c8 U3 Z Y" z# B9 J
对于系统权限由sys来做
* n! S3 V4 j2 ^ 对于对象权限由 谁拥有谁授权
4 w3 C; V+ _: s; J 系统权限:
+ w* F* M% k) j" b% [$ j1 G) D9 ~5 ^ grant create session to test;
$ J' C* \/ Y2 {. v% N [/ @ grant create table to test;1 v' i/ t% o9 x$ e9 Q
grant unlimited tablespace to test;* }: x- m6 @8 X* [% S$ W& {
revoke create session from test;
$ x, [, f" B( Y) I& @' { revoke create table from test;: V# {& E) K* G
revoke unlimited tablespase from test;4 @9 w* n8 E5 p' Z
grant create session to public; //表示把创建表的权限赋予所有人* J2 ?8 ~; ?6 B6 ~! E7 a
select * from user_sys_privs; //返回当前用户的所有系统权限
, X( g. B: s( }7 r R9 C 对象权限
/ V6 }6 @0 V8 e3 \4 } grant select on mytab to test;
- J, S% G+ G h" Y grant all on mytab to test;
/ d' E! x, \. ? revoke select on mytab from test;/ X# d; c8 }8 M1 h H
revoke all on mytab from test;
. x2 c k# O- i# T7 [ select * from user_tab_privs; //返回当前用户所有的对象权限$ ?" |+ o3 n1 \
对象权限可以控制到列. n! X9 P. ?' S/ y3 x7 D; j Y; l( M
grant update(name) on mytab to test;* `' X9 l/ H, e* y+ Y- f% U# S1 b
grant insert(id) on mytab to test;8 _. Y6 r" Q8 V# F
select * from user_col_privs;
K! H3 H3 M8 `6 a# T1 [; R 注意、:查询和删除不能控制到列1 i0 V8 a& N8 c6 H* {7 J! k
需要有commit的 insert update insert' Z1 K# W7 G& x6 c
权限的传递" R7 [. `% Y& K( Z) Q
系统权限的传递:' W: c1 i7 R; G$ z6 _) Z1 O
grant alter table to A with admin option;. G/ o) P+ @8 q
那么A可以通过把该权限传递给B,如果想B也可以传递下去那么可以也带上with admin option% M: i; b0 A- q. s4 \- K
grant alter table to B;* {! [9 \! Y, Y% {
对象权限的传递:
0 o/ W3 ~% t0 m6 C6 m" R$ ] grant select on mytab to A with grant option;
. `; a5 ?9 S; G& g1 ^2 H+ l 那么A可以把在表mytab的select权限赋予给B,如果B想也能传递该select权限也可以带上with grant option& R' N( H4 R& e) O7 y& f6 d- d
grant select on mytab to B; |