程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle菜鳥之grant授權

Oracle菜鳥之grant授權

編輯:Oracle教程

Oracle菜鳥之grant授權


<pre name="code" class="sql">1、給數據庫用戶授權(對象為用戶表)
GRANT privilege[, ...] ON object[, ...] TO { PUBLIC | GROUP group| username}

privilege:
	select:查詢
	insert:插入
	update:更新
	delete:刪除
	rule:
	all:所有

grant select,insert,update on tablename to public;
給所有用戶授予查詢、插入、更新tablename表的權限
revoke select,insert,update on tablename from public;//收回所有用戶查詢、插入、更新tablename表的權限

object:
	table:表
	view:視圖
	sequence:序列
	index:索引

grant select,insert,update on tablename,viewname,sequencename,indexname to public;

public:對所有用戶開放權限
GROUP groupname:對該組所有用戶開放權限
username:對指定用戶開放權限

2、給數據庫用戶授權(對象多為系統表,如dba可以查看的表)

grant dba to username;
不給用戶授予dba權限,用戶將無法查看系統表,例如v$datafile,dba_data_files等
revoke dba from username;//對用戶username回收dba權限
注:如果使用pl/sql登錄,授予dba權限後,需要重新登陸(初始理解,錯誤)
後經驗證,不需要重新登陸,只需要重新打開一個會話就可以
理解:數據庫的所有權限操作,都是以會話為單位,如果當前會話執行時沒有dba權限,即便是已經重新賦予了權限,在當前會話中也是不起作用的
而如果當前會話有dba權限,而後台取消了權限,那麼當前會話的dba權限也不會消失

grant connect to username;
不給新建用戶授予connect權限,新建用戶無法通過SID或SERVICE_NAME連接數據庫實例,即無法登錄數據庫
revoke connect to username;//對用戶username回收connect權限

grant resource to username with admin option;
grant unlimited tablespace to username with admin option;
不給新建用戶授予resource權限,新建用戶無法創建表
revoke resource from username;//對用戶回收resource權限

3、查看指定用戶有哪些系統權限
select * from dba_role_privs where grantee=upper('username');

4、查看指定用戶有哪些對象權限
select * from dba_tab_privs where grantee=upper('username');


可能遇到問題:
1、當在一個新建數據庫用戶上創建表失敗時,可以查看系統權限
	在當前用戶執行select * from dba_role_privs where grantee=upper('username');如果不能執行(提示表或視圖不存在),說明沒有dba權限
	解決方法:可以登錄sys賬戶賦予dba權限
	登錄sys:sqlplus / as sysdba
	給username賦權限:grant dba to username;

	也可以直接登錄sys賬戶,select * from dba_role_privs where grantee=upper('username'),如果granted_role的值沒有dba,說明沒有dba權限


權限相關的查詢和賦予:
所有權限的賦予均是在有賦予權限的用戶下進行,此處授權用戶都是sys用戶
1、select * from dba_role_privs where grantee=upper('luyongpeng');
其中,admin_option是通過在授權時添加with admin option 選項定義
grant dba to luyongpeng with admin option;//admin_option為YES,如果不加with admin option 選項,則admin_option為NO
使用grant dba to luyongpeng;無法覆蓋之前的權限
但grant dba to luyongpeng with admin option 可以覆蓋grant dba to luyongpeng;的權限
<img src="http://img.blog.csdn.net/20140801130948598?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2ltcGxlX29uX2Zvb3Q=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<pre name="code" class="sql">2、select * from dba_sys_privs where grantee=upper('luyongpeng');
	該權限可以通過執行grant dba to luyongpeng;時自動加上,但admin_option默認為NO
	可以通過grant unlimited tablespace to luyongpeng with admin option;將admin_option修改為YES
	當執行revoke dba from luyongpeng;時,系統會同時回收dba權限和unlimite tablespace權限
	如果想保留dba權限,但回收unlimited tablespace權限,可以通過revoke unlimited tablespace from luyongpeng;實現

\
<pre name="code" class="sql">3、select * from dba_tab_privs where grantee=upper('luyongpeng');
	該權限表現了當前用戶對owner的哪些表具有何種操作權限,並且grantable字段值YES表明了luyongpeng用戶可以繼續對其他用戶開放signtest表的權限

\
<pre name="code" class="sql">執行grant insert on signtest to luyongpeng with grant option;
	grant delete on signtest to luyongpeng with grant option;
後,重新查詢dba_tab_privs表信息如下,可以看到當加上with grant option選項後,GRANTABLE字段值為YES

\

						

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved