權(quán)限管理
1、Oracle兩類型的用戶權(quán)限:
System 使用戶在數(shù)據(jù)庫中完成部分行為
Object 使用戶接觸和操作一個特定的數(shù)據(jù)對象。只有owner(Object Schema才能授權(quán))
2、系統(tǒng)權(quán)限(100多種)
其中,create table和create any table 的區(qū)別
any關(guān)鍵字指示用戶在權(quán)限中可以操作任何schema. grant授權(quán),revoke 取消權(quán)限
窗口1:
sql>create user testuser1
sql>grant create table to testuser1;
窗口2:
sql>conn testuser1/kxf_001;
窗口1:
sql>grant create session to testuser1; //授權(quán)create session
窗口2:
sql>conn testuser1/kxf_001
sql>create table test1(id int) tablespace users; //創(chuàng)建表
sql>create table kong.tt1(id int) tablespace users; //權(quán)限不足
窗口1:
sql>grant create any table to testuser1;
窗口2:
sql>create table kong.tt1(id int) tablespace users;
窗口1:
sql>revoke create any table from testuser1;
INDEX:CREATE ANY INDEX \ ALTER ANY INDEX \ DROP ANY INDEX
TABLE:CREATE TABLE \ CREATE ANY TABLE\ALTER ANY TABLE\DROP ANY TABLE\ SELECT ANY TABLE\ UPDATE ANY TABLE \ DELETE ANY TABLE
SESSION:CREATE SESSION\ ALTER SESSION\ RESTRICTED SESSION
TABLESPACE:CREATE TABLESPACE\ ALTER TABLESPACE\ DROP TABLESPACE \ UNLIMITED TABLESPACE(無限空間資源的使用)
【注意】沒有create index權(quán)限。如:
grant system_privs,[....] to [user/role/public],[....] with admin option
其中,with admin option 可以把權(quán)限授予第三個人
sql>grant create index to testuser1;
sql>truncate table kong.sales;
sql>grant truncate table to testuser1; //授予testuser1truncate table權(quán)限。
sql>grant truncate any table to testuser1;
sql>grant drop any table to testuser1;
sql>grant create table,create session,create view to kong,testuser1; //授予多個用戶多個權(quán)限。
sql>grant create table to public;
sql>create role testrole1
sql>create role testrole2;
sql>grant create table to testrole2; //為角色2添加create table權(quán)限。
sql>create user testuser2 identified by kxf_001;
sql>conn testuser1/xkf_001;
sql>grant create table to testuser2; //權(quán)限不足,只允許testuser2創(chuàng)建表
窗口2:
sql>conn sys/admin1 as sysdba
sql>grant create table to testuser1 with admin option; //授權(quán)create table給testuser1帶上管理權(quán)限。
窗口1:
sql>grant create table to testuser2; //授權(quán)成功
3、系統(tǒng)權(quán)限(System Privileges)
SYSDBA\SYSOPER 權(quán)限集合(特殊):實現(xiàn)database的管理和操作
SYSOPER:startup、shutdown、alter database open|mount、alter database backup controlfile to(數(shù)據(jù)庫完整修復(fù)) 、recover database、alter database archivelog
SYSDBA:sysoper privileges with admin option、create database、alter database begin/end backup、restricted session、recover database until
注意:sysoper不能建立數(shù)據(jù)庫,不能完成數(shù)據(jù)庫的部分修復(fù),沒有受限(restricted)模式的權(quán)限,不具有備份權(quán)限。而sysdba具有sysoper所有的權(quán)限,同時帶上了admin選項。
sql>grant sysdba to kong;
sql>select * from v$pwfile_users;
sql>grant sysoper to kong with admin option //為kong授予sysoper權(quán)限并帶上admin選項,其實kong已經(jīng)是sysdba,而sysdba具有sysoper的所有權(quán)限帶上了admin選項。
O7_DICTIONARY_ACCESSIBILITY 參數(shù):數(shù)據(jù)字典表能不能存儲或被改變。
sql>grant select any table to testuser1;
sql>select * from sys.aud$;
sql>show parameter O7
sql>show user
sql>select * from sys.aud$;
sql>alter system set o7_dictionary_accessibility=true ;//設(shè)計對任意表操作的用戶能不能訪問到系統(tǒng)表的資料,一般來說系統(tǒng)默認(rèn)將這個參數(shù)值設(shè)置為false,即系統(tǒng)審計記錄表不對普通用戶開放。
sql>startup force
窗口2:
sql>conn testuser1/kxf_001; //已經(jīng)連接
sql>select * from sys.aud$;
窗口1:
sql>revoke create table,create any table from testuser1;//系統(tǒng)權(quán)限未授予testuser1
sql>show user
sql>revoke create table from testuser1;
sql>revoke create any table from testuser1; //系統(tǒng)權(quán)限create any table未授予testuser1;
sql>grant create session to testuser2;
sql>alter user testuser2 quota 10m on users; //在表空間users上給testuser2分配10m限額資源。
sql>conn testuser2/kxf_001
sql>create table tt1(id int) tablespace users;
注意:對象權(quán)限帶上admin option選項授予出去時是會級聯(lián)的。
4、對象權(quán)限(Object Privileges)
ALTER(Table\Sequence\Procedure)、DELETE(Table\View)、EXECUTE(Procedure)、INDEX(Table\View)、INSERT(Table\View)、PEFERENCES(Table)、SELECT(Table\View\Sequence)、UPDATE(Table\View)
grant [object_privs(column,...)],[....]on object_name to user/role/public,....with grant option
其中with grant option可以將權(quán)限授予第三個人。默認(rèn)owner可以授權(quán)第三個人。
GRANT EXECUTE ON dbms_output TO jeff;
GRANT UPDATE ON emi.customers TO jeff WITH GRANT OPTION;
窗口1:
sql>show user //"SYS"
sql>select * from kong.authors;
窗口2:
sql>conn sys/admin1 as sysdba
sql>set wrap off
sql>set linesize 800
sql>select * from kong.authors;
sql>grant
sql>conn kong/kxf_001
sql>grant select,update on kong.authors to testuser1;
sql>grant select,update on kong.authors to sys with grant option; //sys也可以享有g(shù)rant授予權(quán)限。
sql>conn sys/admin1 as sysdba
sql>grant select,update on kong.authors to testuser1; //授權(quán)成功
sql>conn kong/kxf_001
sql>grant select on authors(au_id,au_lname) to testuser1; //授予testuser1查詢authors,缺少無效權(quán)限
取消權(quán)限:
REVOKE SELECT on emi.orders FROM jeff;
sql>revoke select on authors from testuser1;
注意:with grant option 取消權(quán)限應(yīng)該是級聯(lián)的。
sql>grant select on authors to testuser1 with grant option
sql>conn testuser1/kxf_001
sql>select * from kong.authors;
sql>grant select on kong.authors to testuser2;
sql>conn testuser2/kxf_001
sql>select * from kong.authors; //testuser2也可以使用這個權(quán)限
sql>conn kong/kxf_001
sql>revoke select on authors from testuser1;
sql>conn kong/kxf_001
sql>revoke select on authors from sys;// 取消sys的select 權(quán)限
sql>conn testuser2/kxf_001
sql>select * from kong.authors;
5、獲取權(quán)限信息:
DBA_SYS_PRIVS dba系統(tǒng)權(quán)限
SESSION_PRIVS 會話權(quán)限
DBA_TAB_PRIVS
DBA_COL_PRIVS
sql>conn sys/admin1 as sysdba
sql>select * from dba_sys_privs ;//dba授了哪些權(quán)限給哪些人
sql>conn testuser2/kxf_001
sql>select * from session_privs; //當(dāng)前開的session里用戶擁有什么權(quán)限
sql>conn kong/kxf_001
sql>select * from user_tab_privs; //授予了哪些對象權(quán)限給哪些用戶
sql>conn sys/admin1 as sysdba
sql>select * from dba_col_privs;
6、審計Auditing
審計規(guī)則:審計用戶、語句或?qū)ο?;語句執(zhí)行是否成功;
審計策略:默認(rèn)審計(實例啟動或關(guān)閉、Administrator權(quán)限)、Database審計(由DBA進(jìn)行enable<初始關(guān)閉>,不可以基于column值的記錄)、Value-based基于值或應(yīng)用程序?qū)徲嫞菏褂糜|發(fā)器。
Database審計(默認(rèn)關(guān)閉):
啟動database審計 >設(shè)定Audit option選項(表 AUDIT TABLE\觸發(fā)器 AUDIT create any trigger\select選項 AUDIT SELECT ON emi.orders\進(jìn)一步審計給予欄位的值則使用DBMS_FGA package) >一旦用戶發(fā)出相應(yīng)的command就會生成相關(guān)的審計記錄,該審計記錄可以記錄在OS中也可以記錄在Database中或默認(rèn)(audit_trail=none)
audit create table
whenever successful/not successful //可選,只記錄成功或失敗的,若不指定,則全部記錄
其中:by session 發(fā)出相同command,只記錄一次
sql>show parameter audit_trail 跟蹤記錄 // value=db/os/none
sql>audit select on kong.authors by session; //啟動kong.authors表的審計,只審計select動作。
sql>audit create table; //審計create table動作
sql>audit update on kong.authors whenever not successful; //只記錄不成功的update審計
sql>desc dbms_fga;
a.取消審計:noaudit
sql>noaudit select on kong.authors;
b.查看審計選項:
ALL_DEF_AUDIT_OPTS
DBA_STMT_AUDIT_OPTS 所有語句的審計選項
DBA_PRIV_AUDIT_OPTS 所有權(quán)限的審計選項
DBA_OBJ_AUDIT_OPTS
sql>select * from all_def_audit_opts;
sql>select * from dba_stmt_audit_opts;
sql>select * from dba_obj_audit_opts;
c.如何獲取審計記錄:
DBA_AUDIT_TRAIL、DBA_AUDIT_EXISTS、DBA_AUDIT_OBJECT、DBA_AUDIT_SESSION、DBA_AUDIT_STATEMENT
sql>audit select on kong.authors /;
sql>conn kong/kxf_001
sql>select * from authors;
sql>conn sys/admin1 as sysdba
sql>select * from dba_audit_trail; //對authors的審計操作都記錄在該dba_audit_trail中。
sql>select * from dba_audit_object;
sql>select * from dba_audit_session;