一、用户相关操作
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;--重新执行操作