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