我們經(jīng)常談及Oracle的權(quán)限 比如Connect DBA resource sysdba select any table select_catelog_role這樣一些權(quán)限 讓我們眼花繚亂的 那么如何來區(qū)分這些種類繁多的privilege中不至于眼迷離呢 這個(gè)文章將會對你在這方面的了解起到幫助
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供細(xì)河網(wǎng)站建設(shè)、細(xì)河做網(wǎng)站、細(xì)河網(wǎng)站設(shè)計(jì)、細(xì)河網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、細(xì)河企業(yè)網(wǎng)站模板建站服務(wù),十余年細(xì)河做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
以上我們看到的這些權(quán)限 都是可以通過grant語句來進(jìn)行權(quán)限賦予 同時(shí)也可以用過revoke來進(jìn)行權(quán)限收回的操作的 但是 他們雖然都在grant里出現(xiàn) 但是有各自有著本質(zhì)的不同
oracle里的權(quán)限有兩種權(quán)限 系統(tǒng)權(quán)限和對象權(quán)限 所謂系統(tǒng)權(quán)限 就是oracle里已經(jīng)hardcode寫死的權(quán)限 這些權(quán)限 我們是不能自己去擴(kuò)展的 比如上面提到的select any table create any table create table等 這里的權(quán)限已經(jīng)在oracle里全部規(guī)定好了
我們可以通過查看system_privilege_map這個(gè)數(shù)據(jù)字典表來查看所以的oracle系統(tǒng)內(nèi)置的權(quán)限
SQL select * from system_privilege_map;
PRIVILEGE NAME?????????????????????????????????????? PROPERTY
ALTER SYSTEM?????????????????????????????????????
AUDIT SYSTEM?????????????????????????????????????
CREATE SESSION???????????????????????????????????
ALTER SESSION????????????????????????????????????
RESTRICTED SESSION???????????????????????????????
這里就是所有的內(nèi)置的系統(tǒng)權(quán)限了 其實(shí)如果有開發(fā)過權(quán)限系統(tǒng)的經(jīng)驗(yàn)的話 對這里的這個(gè)概念 可以理解為function permission 也就是你可以進(jìn)行哪些操作
這里特別提到一個(gè)另外的知識點(diǎn) 有網(wǎng)游朋友問過我 create any table和create table有什么區(qū)別 create table只能老老實(shí)實(shí)的給自己的scheam創(chuàng)建表 而不能以create table otherschema tablename這樣的方式給其他的schema創(chuàng)建表 額外提到這點(diǎn) 有很多朋友這塊還是模糊的
oracle通過數(shù)據(jù)字典表dba_sys_privs這個(gè)表來記錄user被賦予的系統(tǒng)權(quán)限 比如
我們現(xiàn)在執(zhí)行
SQLgrant select any table to test ; 把select any table的權(quán)限賦予test 這個(gè)用戶
Grant succeeded
SQL select * from dba_sys_privs where grantee = TEST ;
GRANTEE??????????????????????? PRIVILEGE??????????????????????????????? ADMIN_OPTION
TEST ????????????????????????? SELECT ANY TABLE???????????????????????? NO
這里就可以查詢到這個(gè)記錄了 admin_option表示的是是否有把當(dāng)前這個(gè)系統(tǒng)權(quán)限grant給其他用戶的意思 yes 表示test 除了自己有這個(gè)權(quán)限 還可以把這個(gè)權(quán)限賦予其他用戶 N就是沒有g(shù)rant的權(quán)限了
我們可以用一下語句試試
SQL grant select any table to test with admin option;
Grant succeeded
在來看看剛才的記錄
GRANTEE??????????????????????? PRIVILEGE??????????????????????????????? ADMIN_OPTION
TEST ????????????????????????? SELECT ANY TABLE???????????????????????? YES
現(xiàn)在test 就可以賦予select any table給別的用戶了
下面我們看看object permission 其實(shí)這里已經(jīng)名字就可以區(qū)分開了 這里是針對于特定的對象的權(quán)限 上面的系統(tǒng)權(quán)限是限定了可以操作的功能 而object permission就更細(xì)化了 具體到了莫個(gè)對象你可以操作的功能的權(quán)限
比如 A用戶建立了一個(gè)TableA表 現(xiàn)在為了讓B用戶可以看到A這個(gè)對象 我們就可以把A table的select權(quán)限 進(jìn)行賦予 這里的A table上的select權(quán)限就是一個(gè)對象權(quán)限
除了select 還有update delete insert alter drop index references這樣正對于對象的權(quán)限
除了可以給表對象指定對象權(quán)限外 view sequence procedure function package triggger MV等這些oracle里的對象都可以進(jìn)行對象的權(quán)限指定
對于對象權(quán)限來說 由于對象權(quán)限完全是動(dòng)態(tài)的 在對一個(gè)對象進(jìn)行g(shù)rant的時(shí)候 才能看到具體的對象權(quán)限 所以對象權(quán)限是不像system privilege那樣有一個(gè)表來描述的 只有一個(gè)表來記錄用戶和這個(gè)用戶對于的對象權(quán)限的關(guān)系表 這個(gè)表就是dba_tab_privs;
這里這個(gè)名字比較容易讓人誤會為只有table的對象權(quán)限 其實(shí)不然 這里其他類型的對象的對象權(quán)限也會記錄進(jìn)來
實(shí)驗(yàn)一下 還是剛才的test 用戶 我現(xiàn)在把對象dbms_xplan的execute的權(quán)限給他 dbms_xplan這個(gè)有些朋友可能不熟悉 這是執(zhí)行計(jì)劃有關(guān)的一個(gè)對象 朋友們?nèi)绻麤]有安裝執(zhí)行計(jì)劃的包 可以用dbms_output對象做實(shí)驗(yàn)
SQLgrant execute on dbms_xplan to test ;
SQLgrant execute on dbms_output to test ;
SQL select * from dba_tab_privs where grantee = TEST ;
GRANTEE??????????????????????? OWNER????????????????????????? TABLE_NAME???????????????????? GRANTOR??????????????????????? PRIVILEGE??????????????????????????????? GRANTABLE HIERARCHY
TEST ????????????????????????? SYS??????????????????????????? DBMS_XPLAN???????????????????? SYS??????????????????????????? EXECUTE????????????????????????????????? NO??????? NO
TEST ????????????????????????? SYS??????????????????????????? DBMS_OUTPUT??????????????????? SYS??????????????????????????? EXECUTE
這里注意和fuanction 不同的 這里有一個(gè)GRANTABLE的字段 意味和上面admin option一樣的作用
不過這里的sql不同了
SQLgrant execute on dbms_xplan to test with grant option;
這里是oracle里的權(quán)限了
不過有的人可能會問道 咦 你是不是漏掉了 不是我們還可以
grant connect resource dba to username;嗎 那她們都是什么權(quán)限呀
在這里就要注意了 這里的connct resource dba都不是權(quán)限 而是一個(gè)role 角色 一個(gè)角色是 個(gè)或者多個(gè)系統(tǒng)權(quán)限或者對象權(quán)限的集合 是便于我們管理用戶賦權(quán)而演化而來的 這里的create role和賦予role權(quán)限我們就不詳談了 朋友們可以自己查一查相關(guān)資料 role是我們可以動(dòng)態(tài)建立的 建立的role可以用grant來賦予權(quán)限 或者把一個(gè)role賦予另一個(gè)role
我們可以通過dba_roles這個(gè)表來查詢系統(tǒng)里所有的role
SQL select * from dba_roles;
ROLE?????????????????????????? PASSWORD_REQUIRED
CONNECT??????????????????????? NO
RESOURCE?????????????????????? NO
DBA??????????????????????????? NO
SELECT_CATALOG_ROLE??????????? NO
EXECUTE_CATALOG_ROLE?????????? NO
DELETE_CATALOG_ROLE??????????? NO
我們可以把role的賦予一個(gè)用戶
比如
SQLgrant select_catalog_role to test ;
我們可以通過dba_role_privs來查詢相關(guān)用戶的role的賦予 比如
SQL select * from dba_role_privs where grantee = TEST ;
lishixinzhi/Article/program/Oracle/201311/16827
開通其中2張表的查詢權(quán)限,方法如下:
grant select on bas_checkcycle to jdc;這個(gè)是整個(gè)語句。
語句分析:
grant select on bas_checkcycle to jdc;
這個(gè)顏色為執(zhí)行語句。
這個(gè)顏色是數(shù)據(jù)表。
這個(gè)顏色是用戶;就是需要權(quán)限的用戶。
下面這個(gè)是查看,更新,刪除,增加的權(quán)限都開啟。
grant select,update,delete,insert on UserTagPool to [app_webservice];
grant select,update,delete,insert on UserTagPoolMap to [app_webservice];
擴(kuò)展資料
Oracle權(quán)限管理
權(quán)限分類:
系統(tǒng)權(quán)限:系統(tǒng)規(guī)定用戶使用數(shù)據(jù)庫的權(quán)限。(系統(tǒng)權(quán)限是對用戶而言)。
實(shí)體權(quán)限:某種權(quán)限用戶對其它用戶的表或視圖的存取權(quán)限。(是針對表或視圖而言的)。
系統(tǒng)權(quán)限分類:
DBA: 擁有全部特權(quán),是系統(tǒng)最高權(quán)限,只有DBA才可以創(chuàng)建數(shù)據(jù)庫結(jié)構(gòu)。
RESOURCE:擁有Resource權(quán)限的用戶只可以創(chuàng)建實(shí)體,不可以創(chuàng)建數(shù)據(jù)庫結(jié)構(gòu)。
CONNECT:擁有Connect權(quán)限的用戶只可以登錄Oracle,不可以創(chuàng)建實(shí)體,不可以創(chuàng)建數(shù)據(jù)庫結(jié)構(gòu)。
1、雙擊桌面sqldeveloper軟件圖標(biāo)啟動(dòng)軟件。
2、新建數(shù)據(jù)庫連接,填寫登錄數(shù)據(jù)庫信息并選擇相應(yīng)角色進(jìn)行登錄。
3、登錄成功后先查詢出hr用戶下所有的表名,可直接通過dba_tables來進(jìn)行查詢。
4、把查詢權(quán)限賦給測試用戶的方法有兩種,一種為當(dāng)用戶下的表比較少的情況下可以直接通過grant select/delete/update on hr.table-name to cem。
5、授權(quán)成功后使用測試用戶進(jìn)行登錄即可對授權(quán)過查詢權(quán)限的表進(jìn)行訪問。
ORACLE中怎么設(shè)置SEQUENCE權(quán)限步驟如下:
1、Create Sequence
首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE權(quán)限。
創(chuàng)建語句如下:
CREATE?SEQUENCE seqTest
INCREMENT?BY?1?--?每次加幾個(gè)
START?WITH?1?--?從1開始計(jì)數(shù)
NOMAXvalue?--?不設(shè)置最大值
NOCYCLE?--?一直累加,不循環(huán)
CACHE?10;?--設(shè)置緩存cache個(gè)序列,如果系統(tǒng)down掉了或者其它情況將會導(dǎo)致序列不連續(xù),也可以設(shè)置為---------NOCACHE
2、得到Sequence值?
定義好sequence后,你就可以用currVal,nextVal取得值。
CurrVal:返回 sequence的當(dāng)前值
NextVal:增加sequence的值,然后返回 增加后sequence值
得到值語句如下:
SELECT?Sequence名稱.CurrVal?FROM?DUAL;?
如得到上邊創(chuàng)建Sequence值的語句為:
select?seqtest.currval?from?dual
在Sql語句中可以使用sequence的地方:
- 不包含子查詢、snapshot、VIEW的 SELECT 語句
- INSERT語句的子查詢中
- INSERT語句的values中
- UPDATE 的 SET中
如在插入語句中
insert?into?表名(id,name)values(seqtest.Nextval,'sequence?插入測試');
3、Alter Sequence?
擁有ALTER ANY SEQUENCE 權(quán)限才能改動(dòng)sequence. 可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須 drop sequence 再 re-create。
4、Drop Sequence
DROP?SEQUENCE?seqTest;?
5、一個(gè)例子
create?or?replace?trigger?tri_test_id
before?insert?on?S_Depart???--S_Depart?是表名
for?each?row
declare
nextid?number;
begin
IF?:new.DepartId?IS?NULLor?:new.DepartId=0?THEN?--DepartId是列名
select?SEQ_ID.nextval?--SEQ_ID正是剛才創(chuàng)建的
into?nextid
from?sys.dual;
:new.DepartId:=nextid;
end?if;
end?tri_test_id;
我們將通過介紹命令的方式 談?wù)凮racle用戶權(quán)限表的管理方法 希望對大家有所幫助
我們將從創(chuàng)建Oracle用戶權(quán)限表 開始談起 然后講解登陸等一般性動(dòng)作 使大家對Oracle用戶權(quán)限表有個(gè)深入的了解
一 創(chuàng)建
sys;//系統(tǒng)管理員 擁有最高權(quán)限
system;//本地管理員 次高權(quán)限
scott;//普通用戶 密碼默認(rèn)為tiger 默認(rèn)未解鎖
sys;//系統(tǒng)管理員 擁有最高權(quán)限
system;//本地管理員 次高權(quán)限
scott;//普通用戶 密碼默認(rèn)為tiger 默認(rèn)未解鎖
二 登陸
sqlplus / as sysdba;//登陸sys帳戶
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陸普通用戶scott
sqlplus / as sysdba;//登陸sys帳戶
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陸普通用戶scott
三 管理用戶
create user zhangsan;//在管理員帳戶下 創(chuàng)建用戶zhangsan
alert user scott identified by tiger;//修改密碼
create user zhangsan;//在管理員帳戶下 創(chuàng)建用戶zhangsan
alert user scott identified by tiger;//修改密碼
四 授予權(quán)限
默認(rèn)的普通用戶scott默認(rèn)未 解鎖 不能進(jìn)行那個(gè)使用 新建的用戶也沒有任何權(quán)限 必須授予權(quán)限
/*管理員授權(quán)*/
grant create session to zhangsan;//授予zhangsan用戶創(chuàng)建session的權(quán)限 即登陸權(quán)限
grant unlimited session to zhangsan;//授予zhangsan用戶使用表空間的權(quán)限
grant create table to zhangsan;//授予創(chuàng)建表的權(quán)限
grante drop table to zhangsan;//授予刪除表的權(quán)限
grant insert table to zhangsan;//插入表的權(quán)限
grant update table to zhangsan;//修改表的權(quán)限
grant all to public;//這條比較重要 授予所有權(quán)限(all)給所有用戶(public)
/*管理員授權(quán)*/
grant create session to zhangsan;//授予zhangsan用戶創(chuàng)建session的權(quán)限 即登陸權(quán)限
grant unlimited session to zhangsan;//授予zhangsan用戶使用表空間的權(quán)限
grant create table to zhangsan;//授予創(chuàng)建表的權(quán)限
grante drop table to zhangsan;//授予刪除表的權(quán)限
grant insert table to zhangsan;//插入表的權(quán)限
grant update table to zhangsan;//修改表的權(quán)限
grant all to public;//這條比較重要 授予所有權(quán)限(all)給所有用戶(public)
oralce對權(quán)限管理比較嚴(yán)謹(jǐn) 普通用戶 之間也是默認(rèn)不能互相訪問的 需要互相授權(quán)
/*oralce對權(quán)限管理比較嚴(yán)謹(jǐn) 普通用戶之間也是默認(rèn)不能互相訪問的*/
grant select on tablename to zhangsan;//授予zhangsan用戶查看指定表的權(quán)限
grant drop on tablename to zhangsan;//授予刪除表的權(quán)限
grant insert on tablename to zhangsan;//授予插入的權(quán)限
grant update on tablename to zhangsan;//授予修改表的權(quán)限
grant insert(id) on tablename to zhangsan;
grant update(id) on tablename to zhangsan;//授予對指定表特定字段的插入和修改權(quán)限 注意 只能是insert和update
grant alert all table to zhangsan;//授予zhangsan用戶alert任意表的權(quán)限
/*oralce對權(quán)限管理比較 嚴(yán)謹(jǐn) 普通用戶之間也是默認(rèn)不能互相訪問的*/
grant select on tablename to zhangsan;//授予zhangsan用戶查看指定表的權(quán)限
grant drop on tablename to zhangsan;//授予刪除表的權(quán)限
grant insert on tablename to zhangsan;//授予插入的權(quán)限
grant update on tablename to zhangsan;//授予修改表的權(quán)限
grant insert(id) on tablename to zhangsan;
grant update(id) on tablename to zhangsan;//授予對指定表特定字段的插入和修改權(quán)限 注意 只能是insert和update
grant alert all table to zhangsan;//授予zhangsan用戶alert任意表的權(quán)限
五 撤銷權(quán)限
基本語法同grant 關(guān)鍵字為revoke
基本語法同grant 關(guān)鍵字為revoke
六 查看權(quán)限
select * from user_sys_privs;//查看當(dāng)前用戶所有權(quán)限
select * from user_tab_privs;//查看所用用戶對表的權(quán)限
select * from user_sys_privs;//查看當(dāng)前用戶所有權(quán)限
select * from user_tab_privs;//查看所用用戶對表的權(quán)限
七 操作表的用戶的表
/*需要在表名前加上用戶名 如下*/
select * from zhangsan tablename
/*需要在表名前加上用戶名 如下*/
select * from zhangsan tablename
八 權(quán)限傳遞
即用戶A將權(quán)限授予B B可以將操作的權(quán)限再授予C 命令如下
grant alert table on tablename to zhangsan with admin option;//關(guān)鍵字 with admin option
grant alert table on tablename to zhangsan with grant option;//關(guān)鍵字 with grant option效果和admin類似
grant alert table on tablename to zhangsan with admin option;//關(guān)鍵字 with admin option
grant alert table on tablename to zhangsan with grant option;//關(guān)鍵字 with grant option效果和admin類似
九 角色
角色即權(quán)限的集 合 可以把一個(gè)角色授予給用戶
create role myrole;//創(chuàng)建角色
grant create session to myrole;//將創(chuàng)建session的權(quán)限授予myrole
grant myrole to zhangsan;//授予zhangsan用戶myrole的角色
drop role myrole;刪除角色
/*但是有些權(quán)限是不能授予給角色的 比如unlimited tablespace和any關(guān)鍵字*/
lishixinzhi/Article/program/Oracle/201311/17543