Oracle用戶權限表
oracle數據庫中涉及到用戶權限的三個表,dba_users,all_users,user_users有什么區別
dba_開頭的是查全庫所有的,all_開頭的是查當前用戶可以看到的,user_開頭的是查當前用戶的
用戶與模式
用戶:對數據庫的訪問,需要以適當用戶身份通過驗證,並具有相關權限來完成一系列動作
SYS用戶,缺省始終創建,且未被鎖定,擁有數據字典及其關聯的所有對象
SYSTEM用戶,缺省始終創建,且未被鎖定,可以訪問數據庫內的所有對象
狀態詳解
0 |
OPEN |
當前帳戶是開放的用戶可以自由登錄 |
1 |
EXPIRED |
當前帳戶已經過期, 用戶必須在修改密碼以后才可以登錄系統, 在登錄的時候, 系統會提示修改密碼 |
2 |
EXPIRED(GRACE) |
這是有password_grace_time定義的一個時間段, 在用戶密碼過期以后的第一次登錄, 系統會提示用戶,密碼在指定的時間段以后會過期, 需要及時修改系統密碼. |
4 |
LOCKED(TIMED) |
這是一個有條件的帳戶鎖定日期, 由password_lock_time進行控制, 在lock_date加上password_lock_time的日期以后,帳戶會自動解鎖. |
8 |
LOCKED |
帳戶是鎖定的,用戶不可以登錄, 必須由安全管理員將帳戶打開用戶才可以登錄. |
5 |
EXPIRED & LOCKED(TIMED) |
|
6 |
EXPIRED(GRACE) & LOCKED(TIMED) |
|
9 |
EXPIRED & LOCKED |
|
10 |
EXPIRED(GRACE) & LOCKED |
|
給賬戶加鎖
Alter user user1 account lock;
解鎖
Alter user user1 account unlock;
死鎖:兩個進程互相請求對方資源被阻塞就會死鎖,發生死鎖不能自動釋放,必須手動解鎖。
Oracle 鎖
v$lock視圖常用列解釋:
sid:持有鎖的會話SID,通常與v$session關聯
type:鎖的類型,TM:表鎖,TX行鎖或事務鎖,其他類型為系統鎖,會自動釋放
lmode:會話保持的鎖的模式。
0=None;
1=Null ;
2=Row-S (SS,行級共享鎖,其他對象只能查詢這些數據行),sql操作有select for update、lock for update、lock row share;
3=Row-X (SX,行級排它鎖,在提交前不允許做DML操作),sql操作有insert、update、delete、lock row share;
4=Share(共享鎖),sql操作有create index、lock share;
5=S/Row-X (SSX,共享行級排它鎖),sql操作有lock share row exclusive;
6=Exclusive(排它鎖),alter table、drop table、drop index、truncate table、look exclusive等DDL
2.V$LOCKED_OBJECT
session_id: 會話id。通常與v$session關聯。
object_id: 被鎖對象標識。通常與dba_objects關聯。
oracle_username: 登錄oracle用戶名。
os_user_name: 電腦用戶名如:Administrator
locked_mode: 會話保持的鎖的模式。
V$LOCKED_OBJECT主要查詢的用戶鎖,v$lock查詢所有鎖
v$Session常用列解釋
SID - session identifier 常用於鏈接其他列
SERIAL# - SID有可能會重復,當兩個session的SID重復時,SERIAL#用來區別session(說白了某個session是由sid和serial#這兩個值確定的)
USERNAME - session's username。等於dba_users中的username。Oracle內部進程的username為空。
STATUS - 用來判斷session狀態。Active:正執行SQL語句。inactive:等待操作。killed:被標注為殺死。
OSUSER - 客戶端操作系統用戶名。
MACHINE - 客戶端machine name。
TERMINAL - 客戶端執行的terminal name。
視圖dba_objects記錄數據庫中所有的對象
視圖描述如下:
OWNER:對象擁有者
OBJECT_NAME:對象名字
常用SQL:
查詢數據庫中的鎖
select * from v$lock;
select * from v$lock where block=1;
查詢被鎖的對象
select * from v$locked_object;
查詢阻塞
查被阻塞的會話
select * from v$lock where lmode=0 and type in ('TM','TX');
查阻塞別的會話鎖
select * from v$lock where lmode>0 and type in ('TM','TX');
查詢數據庫正在等待鎖的進程
select * from v$session where lockwait is not null;
查詢死鎖:
select b.owner TABLEOWNER, b.object_name TABLENAME, c.OSUSER LOCKBY, c.USERNAME LOGINID, c.sid SID, c.SERIAL# SERIAL
from v$locked_object a,dba_objects b, v$session c
where b.object_id = a.object_id AND a.SESSION_ID =c.sid;
解鎖
--通過SID, SERIAL解鎖
--alter system kill session 'SID, SERIAL';
1.查看所有用戶:
select * from dba_users;
select * from all_users;
select * from user_users;
2.查看用戶或角色系統權限(直接賦值給用戶或角色的系統權限):
select * from dba_sys_privs;
select * from user_sys_privs;
3.查看角色(只能查看登陸用戶擁有的角色)所包含的權限
sql>select * from role_sys_privs;
4.查看用戶對象權限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
5.查看所有角色:
select * from dba_roles;
6.查看用戶或角色所擁有的角色:
select * from dba_role_privs;
select * from user_role_privs;
7.查看哪些用戶有sysdba或sysoper系統權限(查詢時需要相應權限)
select * from V$PWFILE_USERS