oracle資料庫常用SQL語句以及角色傳遞
一、本地oracle11g資料庫以下使用者密碼統一修改為:sysorcl;
本地使用DBA許可權遠端連線ORACLE資料庫
以sys使用者登陸oracle,執行select * from V_$PWFILE_USERS;可查詢到具有sysdba許可權的使用者。
sys/change_on_install SYSDBA 或 SYSOPER 不能以 NORMAL 登入,可作為預設的系統管理員
system/manager SYSDBA 或 NORMAL 可作為預設的系統管理員,不能以 SYSOPER 登入,只能以normal登陸
sysman/oem_temp(sysman) sysman 為 oms 的使用者名稱
scott/tiger NORMAL 普通使用者
aqadm /aqadm SYSDBA 或 NORMAL 高階佇列管理員
Dbsnmp/dbsnmp SYSDBA 或 NORMAL 複製管理員
select * from dba_roles;--oralce資料庫全部角色,具備dba角色的使用者才可以查詢,如sys,system使用者等)
select * from dba_col_privs;--查詢使用者具有的列許可權,,具備dba角色的使用者才可以查詢,如sys,system使用者等)
select * from dict where comments like '%grant%';--查詢當前使用者可以訪問的所有資料字典檢視
select * from system_privilege_map order by name;--查詢oracle資料庫中所有的系統許可權
select * from session_roles; --查詢當前使用者具有的角色
select * from user_role_privs; --查詢當前使用者具有的角色
select * from user_sys_privs; --查詢當前使用者具有的許可權(系統許可權,對資料庫登入,建立表,使用表空間等許可權)
select * from user_tab_privs; --查詢當前使用者具有的許可權(物件許可權,對其他使用者表或檢視等許可權)
--查詢某個使用者具有的角色(使用者名稱必須大寫,具備dba角色的使用者才可以查詢,如sys,system使用者等)
select * from dba_role_privs t where t.grantee='MER_BAMS';
-查詢某個使用者或者角色具有的許可權(系統許可權,使用者名稱或者角色名必須大寫,具備dba角色的使用者才可以查詢,如sys,system使用者等)
select * from dba_sys_privs t where t.grantee in ('MER_BAMS','RESOURCE');
select * from role_sys_privs t where t.role in ('MER_BAMS','RESOURCE');
--查詢某個使用者具有的許可權(物件許可權,使用者名稱或者角色名必須大寫,具備dba角色的使用者才可以查詢,如sys,system使用者等)
select * from dba_tab_privs t where t.GRANTEE='MER_BAMS';
select ROLE, PRIVILEGE from role_sys_privs where role='DBA';--查詢BDA的許可權
create user username identified by userpassword;--建立使用者
alter user username identified by userpassword;--修改使用者密碼
alter user username default tablespace user_space;--修改使用者的預設表空間
alter user username temporary tablespace user_space_temp;--修改使用者的臨時表空間
select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;--檢視所有表空間總大小
select tablespace_name,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;--檢視所有表空間已使用的大小
create user username identified by username default tablespace user_space;
temporary tablespace user_space_temp;--建立使用者並指定預設表空間和臨時表空間
--預設情況下使用者建立好之後系統會預設給使用者分配一個預設的表空間(users)和臨時表空間(temp)
--以dba角色登入可以查詢使用者mer_bams的是使用的預設表空間和臨時表空間
select username,default_tablespace,temporary_tablespace from dba_users where username='MER_BAMS';
alter user username account unlock;--解鎖使用者
drop user username cascade;--級聯刪除使用者(加上cascade關鍵字,即刪除該使用者下所有,謹慎操e作)
--修改表空間物理儲存檔案bdyd自動擴充套件50M,最大為4000M(可以設定為最大無限制)
alter database datafile 'D:\oracle\11.1.0\oradata\bdyd' autoextend no next 50m maxsize 4000m;
drop tablespace userspace including contents and datafiles;--刪除表空間userspace包括物理檔案
select * from V$PWFILE_USERS;--檢視系統DBA使用者(PWDorcl.ora檔案)
select * from dba_users; --查詢當前資料庫的所有使用者
select * from dba_roles; --查詢當前資料庫的所有角色
select * from v$instance;--查詢資料庫的例項名
select * from v$database;--查詢資料庫的名稱
select * from global_name;--查詢資料庫的全稱
select * from v$version; --查詢資料庫的版本號
--命令匯出表,加入tables=(emp,dept),可匯出指定的表,加入rows=n則只匯出表結構
exp userid=username/[email protected]:1521/orcl file=D:/username.dmp;
imp userid=username/[email protected]:1521/orcl file=D:/username.dmp full=y;--命令匯入表
create table tablename_bak as select * from tablename;--建立備份表包括表結構和資料(很實用)
create table tablename_bak as select * from tablename where 1=2;--建立備份表只有表結構(很實用)
create table mytable(id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from scott.emp;--用查詢結構建立新表(很實用)
insert into student(s_no,s_name,s_sex,s_birthday,s_sal) select * from student;--表資料的自我複製
alter table tablename add(tablecolumn varchar2(32) default null null);--新增表字段
comment on column tablename.tablecolumn is '備註資訊';--為剛建立的欄位新增備註
alter table tablename rename column tablecolumn to new_tablecolumn;--修改表字段名稱
alter table tablename modify(tablecolumn varchar2(32));--修改表字段長度
alter table tablename drop column tablecolumn;--刪除表字段
rename tablename to new_tablename;--修改表的名稱
drop table tablename;--刪除表
--修改oracle資料的日期格式(oracle預設的日期格式是'DD-MON-YY','09-6月-99',1999年6月9號)
alter session set nls_date_format = 'yyyy-mm-dd';
select * from all_table t where t.table_name='TABLE_NAME' and t.owner='USER_NAME';--查詢使用者USER_NAME下表TABLE_NAME的資訊
二、許可權或角色的傳遞概念(角色也可以傳遞)
物件許可權是:使用者對其他使用者的資料物件(表,檢視,儲存過程等)的操作許可權
系統許可權是:使用者對資料庫的相關許可權,如登入資料庫,使用表空間,查詢儲存過程,建立表,更新表等。
如果是物件許可權就在後面加入with grant option;
例子描述:SYS使用者加上with grant option方式賦予A使用者查詢SCOTT.EMP表的許可權,
以使用者SYS使用者登入,加上with grant option方式賦予A使用者查詢SCOTT.EMP表的許可權
SYS使用者:grant select on scott.emp to a with grant option;
以使用者A使用者登入,加上with grant option方式賦予B使用者查詢SCOTT.EMP表的許可權
A使用者: grant select on scott.emp to bwith grant option;--如果沒有加with grant option,則在使用者B處許可權停止傳遞
以使用者A登入不可以自己撤銷自己對SCOTT.EMP表的查詢許可權:revoke select on scott.emp from a;--不可以撤銷
如果使用者SYS使用者撤銷A使用者查詢SCOTT.EMP表的許可權:revoke select on scott.emp from a;
則B使用者也沒有了查詢SCOTT.EMP表的許可權,此種方式是級聯撤銷。
注意的是:物件許可權會級聯撤銷,但是當前使用者不可以撤銷自己的許可權,檢視標識USER_TBA_PRIVS表中GRANTTABLE=YES,則為可傳遞許可權。
如果是系統許可權就在後面加入with admin option;
例子描述:SYS使用者加上with admin option方式賦予A使用者CONNECT許可權(其實是CONNECT角色,即CREATE SESSION許可權,表示登入資料庫許可權),
以使用者SYS使用者登入,加上with admin option方式賦予A使用者CONNECT許可權
SYS使用者:grant connect to a with admin option;
以使用者A使用者登入,加上with admin option方式賦予B使用者CONNECT許可權
A使用者: grant connecton scott.emp to b;--如果沒有加with grant option,在使用者B處許可權停止傳遞
以使用者A登入可以自己撤銷自己的CONNECT許可權:revoke connect from a;--可以撤銷
如果使用者SYS使用者撤銷A使用者CONNECT許可權:revoke connect from a;
而B使用者仍然有CONNECT許可權,並沒有級聯撤銷,CONNECT許可權在使用者B處任然可以傳遞。
注意的是:系統許可權不會級聯撤銷,但是當前使用者可以撤銷自己的許可權,檢視標識USER_ROLE_PRIVS表中ADMIN_OPRION=YES,則為可傳遞許可權或角色。