日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 权限介绍及管理

發(fā)布時(shí)間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 权限介绍及管理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Oracle權(quán)限分為兩種:
分別是
系統(tǒng)權(quán)限(system privileges):? 包括創(chuàng)建/刪除表 , 創(chuàng)建刪除用戶(hù)等.
對(duì)象權(quán)限(object privileges):? 操控?cái)?shù)據(jù)庫(kù)特定對(duì)象的內(nèi)容,例如select某張表,插入數(shù)據(jù)到某張表等.

另外介紹個(gè)概念:
方案(schema): is a collection of database objects (used by a user.).
就是對(duì)象的集合啦,例如表,試圖,,索引的集合.


1.系統(tǒng)權(quán)限(system privileges)
對(duì)用戶(hù)和角色來(lái)講,oracle大概有100多個(gè)不同的系統(tǒng)權(quán)限,系統(tǒng)權(quán)限一般由dba提供.
典型的系統(tǒng)權(quán)限如下表:


1.1 創(chuàng)建用戶(hù)
語(yǔ)法如下:
CREATE USER username
IDENTIFIED BY passwd;

前提系你必須具有CREATE USER的權(quán)限, 一般只有DBA才有這個(gè)權(quán)限啦~
如下圖,創(chuàng)建1個(gè)用戶(hù)Bill

?
1.2 使用系統(tǒng)權(quán)限
一旦1個(gè)用戶(hù)被創(chuàng)建,DBA就能指定系統(tǒng)權(quán)限給這個(gè)用戶(hù).
語(yǔ)法如下:
GRANT PRIVILEGE [privilege,.....]
TO? [user1,user2...| role, PUBLIC];

其中role就是角色啦, 至于PUBLIC就是之所有用戶(hù)啦,慎用啊.
一般來(lái)講1個(gè)程序員帳號(hào)需要如下權(quán)限:
CREATE SESSION (連接數(shù)據(jù)庫(kù)啊必要啊)/ CREATE TABLE/ CREATE SEQUENCE /CREATE VIEW/ CREATE PROCEDURE

下圖給用戶(hù)BILL分配這些權(quán)限:

?
一旦dba分配權(quán)限給用戶(hù),用戶(hù)就立即可使用它們.
如下圖oracle這時(shí)已經(jīng)可以用BILL賬戶(hù)登陸了:

?
1.2.1 查看用戶(hù)默認(rèn)表空間和臨時(shí)表空間
可以查看user_users 視圖來(lái)查看用戶(hù)的默認(rèn)表空間和臨時(shí)表空間:

?
可看出BILL賬戶(hù)的默認(rèn)表空間是USERS, 臨時(shí)表空間是TEMP啦

1.2.2 修改用戶(hù)默認(rèn)表空間和臨時(shí)表空間
注意這個(gè)動(dòng)作一般只有DBA可以執(zhí)行, ALTER USER的權(quán)限. 下圖把BILL賬戶(hù)的默認(rèn)表空間改成了TS_EXAMPLE



這時(shí)我們用BILL賬戶(hù)嘗試建幾張表,
如下圖, 當(dāng)建表語(yǔ)句沒(méi)有制定表空間時(shí),那張表默認(rèn)就存放在TS_EXAMPLE.
1003213

那么如果在建表時(shí)指定表空間呢,例如想在SYSTEM表空間建1張表,允吳允許咧?
答案是肯定的,1個(gè)具有CREATE TABLE權(quán)限的用戶(hù)可以在任何表空間建立新表. 如下圖

?

?1.2.3 表空間配額 quota

那么就是否1個(gè)居有CREATE table的user就可以無(wú)限制的使用任何表空間呢? 答案是否定的.
BILL雖然可以無(wú)限制地建新表,但他甚至無(wú)法插入數(shù)據(jù)到自己的默認(rèn)表空間..


如上圖呢個(gè)悲劇,系統(tǒng)表示BILL賬戶(hù)沒(méi)有權(quán)限使用TS_EXAMPLE, 其實(shí)也就是說(shuō)BILL在TS_EXAMPLE的配額空間為0;
這時(shí)是無(wú)法插入新數(shù)據(jù)的.(查詢(xún)另說(shuō))
可以查看user_tablespaces可以知道賬戶(hù)具有那些表空間的權(quán)限(插入數(shù)據(jù)的權(quán)限),如下圖,BILL沒(méi)有任何表空間的配額



?這時(shí)就需要給BILL分配表空間配額,語(yǔ)法如下:
alter user username quota xxx on tablespace_name;

或者在創(chuàng)建用戶(hù)時(shí)同時(shí)指定表空間配額:
CREATE USER username
IDENTIFIED BY passwd
DEFAULT TABLESPACE tp_name1
TEMPORARY TABLESPACE tmp_tp_name
QUOTA 100M on tp_name1
QUOTA 200M on tp_name2
PROFILE profilename;(PROFILE 在這里暫不討論)

又或者:
grant unlimited tablespace to username;
這樣的話(huà)所有表空間都無(wú)限制使用了,慎用啊

如下圖 我用SYS賬戶(hù)分配給BILL 100M表空間配額在TS_EXAMPLE, 和10M表空間配額在USER:


注意上圖的100m是指設(shè)定在100m 而不是增加100m哦

還有,ORACLE 吾允許分配臨時(shí)表空間的配額...臨時(shí)表空間自動(dòng)供大家使用..

?

依家再用BILL查看user_tablespaces視圖,就可以見(jiàn)到bill有權(quán)限使用上面的兩個(gè)表空間了

?
至于要查看每個(gè)表空間具體有幾多配額,就需要查看user_ts_qaotas視圖,如下圖:


這時(shí)就應(yīng)該可以往tb_bill_test插入數(shù)據(jù)了,重新執(zhí)行一次insert 語(yǔ)句. 成功!

?
而且見(jiàn)到已經(jīng)使用了8個(gè)block,? 64kb..
?
1.3 查看系統(tǒng)權(quán)限
用戶(hù)可以利用user_sys_privs視圖來(lái)查看自己有什么權(quán)限


? ?
可以見(jiàn)到 BILL的5個(gè)系統(tǒng)權(quán)限, 都是上面SYS分配給他的啊
?至于最后面那個(gè)ADMIN_OPTION 要注意,
這里的ADMIN_OPTION都是NO, 也就是說(shuō)這些系統(tǒng)權(quán)限BILL都只能自己用啦,不能分配給別人用啦~

如果SYS分配這些權(quán)限給BILL同時(shí)帶上with admin option 這條語(yǔ)句, 那么BILL就有不但只可以使用這些權(quán)限,還可以分配給他人使用.
GRANT PRIVILEGE [privilege,.....]
TO? [user1,user2...| role, PUBLIC]
WITH ADMIN OPTION


1.4 回收系統(tǒng)權(quán)限
對(duì)應(yīng)GRANT,回收的關(guān)鍵字是REVOKE啦,語(yǔ)法如下:
REVOKE PRIVILEGE [privilege,.....]
from? [user1,user2...| role, PUBLIC]

如下圖,我用SYS帳號(hào)回收了BILL的Create view的系統(tǒng)權(quán)限,那么bill就不能創(chuàng)建視圖了.

?

1.5 修改自己的密碼
BILL 是可以通過(guò)
Alter user BILL identified by xxxxxxx

來(lái)修改自己的密碼的,即使BILL沒(méi)有Alter USER的權(quán)限, 但是要修改其他選項(xiàng)的話(huà),就必須要有ALTER USER權(quán)限了.
其他選項(xiàng)一般由DBA執(zhí)行修改的啦~

2.角色(Role)

????? 角色是命名的可以授予用戶(hù)的相關(guān)權(quán)限的組,該方法使權(quán)限的授予,撤回更加容易管理.

2.1 創(chuàng)建角色:
? 語(yǔ)法:
?? CREATE ROLE rolename;

當(dāng)然前提是有CREATE ROLE的權(quán)限啦,一般都是由DBA去執(zhí)行啦~
而且角色名不能與存在的用戶(hù)名相同啊, oracle提示創(chuàng)建失敗的, 想想也是,不然分配權(quán)限時(shí)就會(huì)混繞了.

下圖我創(chuàng)建了1個(gè)角色manager:


2.2 分配權(quán)限給角色

?語(yǔ)法跟分配權(quán)限給用戶(hù)是一樣的,只不過(guò)用角色名去取代用戶(hù)名啦:
下圖: 我將create view, select any table 分給manager,
那么manager這個(gè)角色就可以創(chuàng)建試圖,和select任何模式(任何用戶(hù))下的表了.



?

2.3 分配角色給用戶(hù)

到最后, 要將角色分給用戶(hù),那么用戶(hù)就有了這個(gè)角色的權(quán)限.
語(yǔ)法:
grant rolename to username;

如下圖: 我將manager 角色分給BILL, 那么bill就擁有了manager角色的權(quán)限(create view, select any table)

?
可以見(jiàn)到,BILL雖然擁有了manager,BILL的系統(tǒng)權(quán)限并沒(méi)有增加.
因?yàn)榻巧珯?quán)限視圖要聯(lián)合另外的試圖: user_role_privs ,來(lái)查看:



?
或者直接查看role_sys_privs視圖:


?
注意親測(cè)過(guò):
在11g中用戶(hù)需要重新登陸才能使用新分配角色的權(quán)限..

如下圖,BILL已經(jīng)可以查看scott用戶(hù)下的表了.


?

?2.4 回收角色.

這個(gè)一樣啦,語(yǔ)法
REVOKE rolename from username;


3.對(duì)象權(quán)限(object privileges)

???????? 對(duì)象權(quán)限是 指在指定的表,視圖,序列或過(guò)程上執(zhí)行制定動(dòng)作的權(quán)限或權(quán)利, 每1個(gè)對(duì)象都有1個(gè)特殊的可以授予的權(quán)限集. 下圖列出了各種對(duì)象的權(quán)限集合.

?
????? 用戶(hù)序列的權(quán)限只有select 和 alter. update, references和insert 權(quán)限可以通過(guò)指定1個(gè)可更新列的的子集被限制.
????? select的權(quán)限可以通過(guò)創(chuàng)建帶1個(gè)列子集的視圖并且只授予select權(quán)限來(lái)限制.
????? 1個(gè)同義詞上被授予的權(quán)限將轉(zhuǎn)換為由同義詞引用的基表的權(quán)限.

3.1 分配和查看對(duì)象權(quán)限

語(yǔ)法:
GRANT??? object_priv[(columns)]?? /? ALL
ON????????? object
to?????????? {user|role|PUBLIC}
[WITH GRANT OPTION]


其中
object_prive??? 是指被授予的對(duì)象權(quán)限,注意不帶對(duì)象名哦
ALL??????????????? 指定對(duì)象所有的對(duì)象權(quán)限
columns?????????? 從1個(gè)表或視圖中指定被授予權(quán)限的列
ON object?????? 是被授予權(quán)限所屬于的對(duì)象
TO????????????????? 指定權(quán)限被授予誰(shuí)
PUBLIC??????????? 授予權(quán)限給所有用戶(hù)
WITH GRANT OPTION??? 允許被授予權(quán)限的人再授予這個(gè)權(quán)限給其他用戶(hù)或角色.


?3.1.1 表對(duì)象的權(quán)限
如下圖,首先我撤銷(xiāo)BILL的manager角色,這樣他是不能select SCOTT的表的

?

接下來(lái)我用SCOTT帳號(hào)分配emp表的select 權(quán)限給BILL

?
再分配update ename, deptno的權(quán)限給bill

?
這樣bill 能查看emp表內(nèi)容,而且能update ename,deptno列,但是update sal列是失敗的

?
表的對(duì)象權(quán)限可以通過(guò)查看如下視圖.
作為GRANTEE
BILL 可以通過(guò)查看USER_TAB_PRIVS_RECDUSER_TAB_PRIVS來(lái)查看分配了給自己的對(duì)象權(quán)限:
????????????? 通過(guò)查看USER_COL_PRIVS_RECD 來(lái)查看分配了給自己的對(duì)象的的權(quán)限.

?
還可以通過(guò)查看ROLE_TAB_PRIVS 來(lái)查看自己的角色所擁有的對(duì)象權(quán)限和對(duì)象列的權(quán)限:

?

而作為GRANTOR
SCOTT可以通過(guò)USER_TAB_PRIVS_MADE??來(lái)查看自己分配了什么表對(duì)象權(quán)限給了什么用戶(hù)或角色.
???????? 可以通過(guò)USER_COL_PRIVS_MADE??來(lái)查看自己分配了什么列對(duì)象權(quán)限給了什么用戶(hù)或角色.

?
注意上圖TL是角色名

?3.1.2 PROCEDURE對(duì)象的權(quán)限

執(zhí)行權(quán)限:
有上面的表格可見(jiàn)到, 對(duì)于PROCEDURE來(lái)講, 只有1個(gè)EXECUTE的權(quán)限..
例如BILL這時(shí)是無(wú)法執(zhí)行scott的stored proc? USP_EMP_LIST的:

?
接下來(lái)我用scott帳號(hào)分配execute權(quán)限給BILL:

?
此時(shí)BILL就可以執(zhí)行usp_emp_list 了, 而且也可以從user_tab_privs_recd里查看到相關(guān)信息.

?
?
查看代碼權(quán)限:
但是BILL要查看該stored proc的代碼要什么權(quán)限呢?
我們知道, 如果scott要查看自己的存儲(chǔ)過(guò)程代碼, 就要查看視圖usr_source.

然而如果BILL要查看scott的存儲(chǔ)過(guò)程,就必須要查看視圖dba_source了.
用dba分配這個(gè)視圖查看權(quán)限比BILL:

?
這樣的話(huà), bill就可以查看scott的所有PROCEDURE代碼了,? 誰(shuí)知道怎么分配指定1個(gè)存儲(chǔ)過(guò)程代碼查看權(quán)限的可告訴我~

?

那為什么不是只把scott的視圖user_source分配給BILL就可以了嗎?? 因?yàn)閐ba_source包括了其他人的信息.
答案是 user_, dba_, all_ 開(kāi)頭的數(shù)據(jù)字典并不適用模式前序.
user_ 開(kāi)頭的數(shù)據(jù)字典只適用于當(dāng)前session查看當(dāng)前用戶(hù)的信息. 不能share給其他用戶(hù).
參考
https://forums.oracle.com/forums/thread.jspa?threadID=295697&messageID=3482583
即使scott能無(wú)錯(cuò)執(zhí)行分配user_source給bill:

?
但是BILL并不能查看scott.user_source...

?

修改權(quán)限:
我打算用BILL去修改scott的這個(gè)存儲(chǔ)過(guò)程USP_EMP_LIST;

?
當(dāng)我執(zhí)行這個(gè)腳本時(shí), 提示我無(wú)權(quán)限了..

?
嘗試用scott分配alter權(quán)限給bill?


提示procedure只有execute 和 debug這個(gè)兩個(gè)對(duì)象權(quán)限..

親自測(cè)試過(guò),? 修改他人的存儲(chǔ)過(guò)程需要的是CREATE ANY PROCEDURE
用sys帳號(hào)分配這個(gè)權(quán)限給BILL

?
bill就可以執(zhí)行修改腳本了:


測(cè)試下 修改成功:



不過(guò)這個(gè)權(quán)限貌似很不安全 慎用啊~


?3.2 回收對(duì)象權(quán)限

呢個(gè)簡(jiǎn)單啦:
Revoke ? object_priv[(columns)]?? /? ALL
ON????????? object
from ????????? {user|role|PUBLIC}


4.關(guān)于with grant option和 with admin option字句.
?????????? 關(guān)于呢兩個(gè)字句的作用上面已經(jīng)介紹過(guò)了, 這里只不過(guò)做個(gè)實(shí)驗(yàn).
?????????? 若SCOTT將自己的表dept 的select權(quán)限分配給bill, 并且?guī)蟱ith grant option字句.
???? 這時(shí)bill再將這個(gè)權(quán)限分配給Calvin, 這樣bill 和 Calvin都有權(quán)限查看這張表.
???? 但是當(dāng)scott從bill回收這個(gè)權(quán)限時(shí), calvin還有沒(méi)有這個(gè)權(quán)限呢?

1. scott 分配 select on dept 給bill:

?

?2.這時(shí)bill查看自己的對(duì)象權(quán)限,

?
?
3.BIll 再分給Calvin

?
4.Calvin 這時(shí)查看自己的權(quán)限:

?
可以見(jiàn)到 GRANTOR 系BILL啊, 分配的人是BILL啦

5. 這時(shí)Scott 回收bill的這個(gè)權(quán)限..


6.這時(shí)再查看calvin的權(quán)限:

?沒(méi)了...


也就是說(shuō),在Oracle里 A回收了B的某個(gè)權(quán)限,? 會(huì)同時(shí)回收B分配給其他用戶(hù)角色的對(duì)應(yīng)權(quán)限...
?



















?

總結(jié)

以上是生活随笔為你收集整理的Oracle 权限介绍及管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。