一、用戶相關操作
1、查詢用戶
select * from dba_users; --查詢全庫所有的用戶
select * from all_users; --查詢當前用戶可看到的用戶
select * from user_users; --查詢當前登錄的用戶
2、創建用戶(創建者需要有dba權限,用戶名必須以c##開頭,默認的表空間是users,新用戶沒有任何權限。)
create user c##sl IDENTIFIED BY 123456;
3、刪除用戶
drop user c##sl2 cascade; --刪除用戶不會刪除其表空間
注意:無法刪除用戶C##SL3,報錯“[Err] ORA-01940: 無法刪除當前連接“的用戶解決方法:
select username,sid,serial#,paddr from v$session where username='C##SL3';
alter system kill session '17,55857';
4、修改密碼
alter user c##sl3 identified by 1234;
二、權限相關操作
a、系統權限:用戶在系統層面的權限,如CREATE SESSION、SELECT ANY TABLE等不依賴於對象的權限
b、對象權限:用戶關於某個具體對象的權限,如SELECT、UPDATE、INSERT等依賴於表、視圖、存儲過程的權限
c、角色:一組權限的集合
注意:PUBLIC用戶具有的權限,其他用戶都會有,即修改PUBLIC用戶的權限,其他用戶也會對應得改變權限
1、查看權限、角色
select * from user_tab_privs; --當前用戶具有的對象權限
select * from dba_tab_privs WHERE grantee='C##SL' OR grantor='C##SL'; --全部用戶具有的對象權限,查詢C##SL用戶的
select * from user_sys_privs; --當前用戶具有的系統權限
select * from dba_sys_privs WHERE grantee='C##SL'; --全部用戶具有的系統權限,查詢C##SL用戶的
SELECT * FROM user_role_privs; --當前用戶具有的角色
SELECT * FROM dba_role_privs where grantee='C##SL'; --全部用戶具有的角色,查詢C##SL用戶的
注意:上面每一對查詢出的結果應該一樣,因為全部用戶中肯定也包含當前用戶,普通用戶沒有查詢全部用戶角色、權限表的權限
2、常用權限、角色
dba 管理員角色
connect 連接數據庫角色,能修改、刪除表及數據,不能創建表
resource 能創建表
create session 連接數據庫權限
create table 建表權限
unlimited tablespace 操作表空間權限
select any table 查詢任何表的權限
select on c##test.book 查詢c##test用戶的book表的權限
說明:
a、一般來說,新建的普通用戶后授予connect和resource角色就好了、如果是管理員需要再授予dba角色。
b、對於普通用戶,如果操作表時報錯“[Err] ORA-01950: 對表空間 'xxx' 無權限”,需要執行一下語句
alter user c##sl3 quota unlimited on 表空間名;
3、賦予權限、角色
grant create session to c##sl;
grant create session to c##sl with admin option; --授予的權限,c##sl用戶可以再授予其它用戶,具有傳遞性
grant create session,select any table to c##sl;
4、撤銷權限、角色
revoke select any table from c##sl;
revoke select any table,update any table from c##sl;
三、表空間
Oracle的數據存儲在數據文件(data files)中,表空間只是一個邏輯概念,把一組數據文件放一起就是稱為表空間。表空間與數據文件是一對多的關系,用戶與表空間是多對多的關系。
1)查詢表空間
select * FROM dba_tablespaces;--查詢所有表空間
select * from dba_data_files;--查詢表空間對應數據文件的地址
select username,default_tablespace from dba_users where username='C##SL';--查詢用戶c##sl的表空間
SELECT--查看表空間詳細信息 FILE_NAME as 數據文件,TABLESPACE_NAME as 表空間名稱, AUTOEXTENSIBLE as 自動擴展,STATUS as 狀態,MAXBYTES as 可擴展最大值, USER_BYTES as 已使用大小,INCREMENT_BY as 自動擴展增量 FROM dba_data_files
2)創建表空間
create tablespace sl datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf' size 100M;--固定大小100M create tablespace sl datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf' size 100M autoextend on next 5M maxsize unlimited;--初始大小100M,每次自動擴展5M,最大無限制 create tablespace sl datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf' size 100M autoextend on next 5M
maxsize 2048M;--初始大小100M,每次自動擴展5M,最大擴展到2048M
3)修改表空間
alter database datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf' resize 100M; --大小設為100M
alter database datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf' autoextend off; --關閉自動增長
alter database datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf' autoextend on; --打開自動增長
alter database datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf' autoextend on next 200M; --每次自動增長200m
alter database datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf' autoextend on next 200M maxsize 2048M;
--每次自動增長200m,最大不超過2G
4)為用戶指定表空間
alter user c##sl default tablespace sl
5)刪除表空間
drop tablespace sl;--刪除空表空間,不刪除物理文件
drop tablespace sl including contents;--刪除表空間,不刪除物理文件
drop tablespace sl including contents and datafiles;--刪除表空間,也刪除物理文件
drop tablespace sl including contents and datafiles cascade constraint;--如果其它表空間有外鍵依賴,也刪除表空間
備注:如果只刪除了表空間,忘記刪數據文件,然后再補刪數據文件,可按如下操作:
create tablespace sl datafile '/opt/oracle/oradata/ORCLCDB/sl01.dbf'--沒有指定size,只是表空間名、文件路徑與原來的一致
drop tablespace sl including contents and datafiles;--重新執行操作