一、系統的默認用戶
Java代碼
sys;//系統管理員,擁有最高權限
system;//本地管理員,次高權限
scott;//普通用戶,密碼默認為tiger,默認未解鎖
二、登陸
Java代碼
sqlplus conn / as sysdba;//登陸sys帳戶
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陸普通用戶scott
三、管理用戶
Java代碼
create user zhangsan;//在管理員帳戶下,創建用戶zhangsan
alert user scott identifIEd by tiger;//修改密碼
四,授予權限
1、默認的普通用戶scott默認未解鎖,不能進行那個使用,新建的用戶也沒有任何權限,必須授予權限
Java代碼
/*管理員授權*/
grant create session to zhangsan;//授予zhangsan用戶創建session的權限,即登陸權限
grant unlimited session to zhangsan;//授予zhangsan用戶使用表空間的權限
grant create table to zhangsan;//授予創建表的權限
grant drop table to zhangsan;//授予刪除表的權限
grant insert table to zhangsan;//插入表的權限
grant update table to zhangsan;//修改表的權限
grant all to public;//這條比較重要,授予所有權限(all)給所有用戶(public)
2、oralce對權限管理比較嚴謹,普通用戶之間也是默認不能互相訪問的,需要互相授權
Java代碼
/*oralce對權限管理比較嚴謹,普通用戶之間也是默認不能互相訪問的*/
grant select on tablename to zhangsan;//授予zhangsan用戶查看指定表的權限
grant drop on tablename to zhangsan;//授予刪除表的權限
grant insert on tablename to zhangsan;//授予插入的權限
grant update on tablename to zhangsan;//授予修改表的權限
grant insert(id) on tablename to zhangsan;
grant update(id) on tablename to zhangsan;//授予對指定表特定字段的插入和修改權限,注意,只能是insert和update
grant alert all table to zhangsan;//授予zhangsan用戶alert任意表的權限
五、撤銷權限
Java代碼
基本語法同grant,關鍵字為revoke
六、查看權限
Java代碼
select * from user_sys_privs;//查看當前用戶所有權限
select * from user_tab_privs;//查看所用用戶對表的權限
七、操作表的用戶的表
Java代碼
/*需要在表名前加上用戶名,如下*/
select * from zhangsan.tablename
八、權限傳遞
即用戶A將權限授予B,B可以將操作的權限再授予C,命令如下:
Java代碼
grant alert table on tablename to zhangsan with admin option;//關鍵字 with admin option
grant alert table on tablename to zhangsan with grant option;//關鍵字 with grant option效果和admin類似
九、角色
角色即權限的集合,可以把一個角色授予給用戶
Java代碼
create role myrole;//創建角色
grant create session to myrole;//將創建session的權限授予myrole
grant myrole to zhangsan;//授予zhangsan用戶myrole的角色
drop role myrole;刪除角色
/*但是有些權限是不能授予給角色的,比如unlimited tablespace和any關鍵字*/
對象權限:
1、對象權限賦予語法:
GRANT object_privilege ON object_name TO username [ WITH GRANT OPTION ];
注:使用WITH GRANT OPTION語句後,使用戶可以將相同權限賦給其他用戶,與系統權限相同。
2、對象權限撤銷語法:
REVOKE object_privilege ON object_name FROM username;
注:當刪除A用戶的權限時,通過A賦予B的權限自動消失,與系統權限相反。
3、查看具體的對象權限:
select * from dba_tab_privs where grantee= 'WANGXIAOQI' ;
select * fromTABLE_PRIVILEGESwhere GRANTEE='WANGXIAOQI';
注1:兩者均可以查看對象權限,只是展現形式不同。
注2:表名為TABLE_PRIV,但 不光只有table,而是所有object的信息,包括function、procedure、package等。
4、object privilege 種類比較少,而且根據對象類型的不同而不同。
在賦值時可以使用all代替該類型對象的所有權限類型,如:
grant select , update , delete , insert on table_name to user_name;
grant all on table_name to user_name;
注:對於TABLE,all包括:ALTER、DELETE、INDEX、INSERT、SELECT、UPDATE、REFERENCES、ON COMMIT REFRESH、QUERY REWRITE、DEBUG、FlashBACK
角色管理:
1、通過role來簡化賦權操作,每個role含有若干項系統權限。role包括系統預定義和自定義兩種。
select * from dba_roles; --查詢當前所有ROLE列表,包括自定義
select * from dba_role_privs; --查詢某用戶的ROLE權限
select * from ROLE_SYS_PRIVS; --查詢當前用戶的ROLE,及其所包含的系統權限
2、系統預定義角色:
CONNECT:
CREATE VIEW
CREATE TABLE
ALTER SESSION
CREATE CLUSTER
CREATE SESSION
CREATE SYNONYM
CREATE SEQUENCE
CREATE DATABASE LINK
RESOURCE:
CREATE TYPE
CREATE TABLE
CREATE CLUSTER
CREATE TRIGGER
CREATE OperaTOR
CREATE SEQUENCE
CREATE INDEXTYPE
CREATE PROCEDURE
另外包括比較重要的ROLE如:DBA、EXP_FULL_DATABASE、IMP_FULL_DATABASE等。
3、自定義角色:
創建ROLE:
CREATE ROLE role_name
[ NOT IDENTIFIED | IDENTIFIED BY passWord]
注:IDENTIFIED 表示在修改該ROLE時是否需要提供密碼 <修改,不包括賦權和取消權限>
在創建 role 之後,使用 grant 和 revoke 手動設置 role 對應的權限
再使用 grant 和 revoke 將 role 賦給 user
注:可以將 role 賦給 role
4、啟用和禁用ROLE:
SET ROLE [role [identified by password] |,role [identifIEd by passWord]...]
| ALL [EXCEPT role[,role]...]
| NONE ];
注:ALL 表示啟用改用戶的所有角色,NONE表示禁用所有角色。
例:
禁用所有角色:setrolenone;
啟用所有角色:setroleall; --role不能有密碼
啟用某個角色:setrole role_test identifIEdby test; --有密碼的話
禁用某個角色:setroleallexcept role_test;
注:setrole命令是覆蓋性質的,即不能先啟用一個,再啟用另一個,必須一條命令中全部啟動;
5、修改用戶時設置角色:
ALTER USER username
[default role [role_name[,role_name,...]]
| all [except role_name[,role_name,...]]
| none ];