Oracle用户是一个数据库对象,用户所有的操作默认在自己的模式下进行,模式是一个用户所拥有的数据库对象的集合,每个用户都有自己的模式,用户和模式之间是一一对应的,模式的名字与用户名相同。例如,SCOTT用户的模式为SCOTT,在这个模式中包含了用户SCOTT拥有的所有数据库对象,包括表,视图,索引,存储程序等。用户的数据库对象和数据分布在表空间中,每个用户都有默认的表空间,如果建立用户时不指定表空间,系统默认将SYSTEM表空间为用户默认表空间。
Oracle数据库有三类用户,一类是sysdba,一类是sysoper,一类是普通用户,前2类为特权用户。sys用户同时具有sysdba和sysoper两种权限,它是创建数据库时自动产生,不需要手工创建。普通用户指定了sysdba或sysoper权限,该用户也成特权用户。特权用户信息可以从动态性能视图v$pwfile_users中获得。
创建新的用户并指定表空间:
create user [username] identified by "[password]"
default tablespace 表空间
temporary tablespace 临时表空间
quota 表空间配额 on 表空间(为用户在表空间指定空间配额以字节,KB,MB为单位,也可以无限制配额:UNLIMITED TABLESPACES)
password expire
account lock|unlock;
为用户授权:grant 权限1、权限2...to [username1],[username2],
1. grant create session to [username] 此时只能连接到数据库
2. grant connect,resource to [username] 授予角色权限
3. grant select,delete on scott.emp to [username] 把scott下emp表的select和delete权限给用户
回收权限:revoke 权限1、权限2 from [username]
revoke 权限1、权限2 on scott.emo from [username]
1. revoke select ,delete on scott.emo from [username] 把用户在scott下emp表的select和delete权限回收
2. revoke all on scott.emp from [username] 把用户在scott下emp表的所有权限回收
Oracle中有两类角色,一种是预定义的角色,一种是用户自定义角色,常见的预定义角色有connect, resource,dba
创建角色:create role 角色名
角色中添加权限:grant 权限1,权限2 to 角色名
grant 权限1,权限2 on scott.emp to 角色名
将角色授予用户:grant 角色 to [user1],[user2]
回收角色:revoke 角色 from [user1]
修改用户密码:alter user [username] identified by [password]
下次登录时提示修改密码:alter user [username] password expired
锁住用户:alter user [username] account lock
解锁用户:alter user [username] account unlock
删除用户:drop user user_name cascade 用户以及所拥有的数据库对象一起被删除
用户的相关信息可以从数据字典视图dba_users中获得:select username,password,default_tablespace,account_status from dba_users;
用户的系统权限和对象信息都可以从数据字典视图获得:
system_privilege_map 当前数据库中已经定义的所有系统权限
dba_sys_privs sys用户查询任何用户所具有的系统权限
user_sys_privs 普通用户查询自己所拥有的系统权限
session_privs 查询一个用户在当前会话中所具有的系统权限
用户的角色信息都可以从数据字典视图获得:
dba_roles 记录数据库中所有角色
dba_role_privs 记录所有被授予用户或另一角色的角色
user_role_privs 记录所有授予当前用户的角色
role_role_privs 记录一个角色中包含的其他角色
role_sys_privs 记录一个角色中包含的系统权限
role_tab_privs 记录一个角色中包含的对象权限
session_roles 记录当前会话中所使用的角色