用户、角色、权限是Oracle数据库进行权限控制的主要手段。
一、用户
1、用户分类
Oracle用户分为两类:
系统用户:具有系统管理权限的用户;
普通用户:
2、查看用户信息
视图dba_users存储了所有用户的基本信息。
SQL> desc dba_users
Name Type Nullable Default Comments
--------------------------- -------------- -------- ------- ---------------------------------------
USERNAME VARCHAR2(30) Name of the user
USER_ID NUMBER ID number of the user
PASSWORD VARCHAR2(30) Y Encrypted password
ACCOUNT_STATUS VARCHAR2(32)
LOCK_DATE DATE Y
EXPIRY_DATE DATE Y
DEFAULT_TABLESPACE VARCHAR2(30) Default tablespace for data
TEMPORARY_TABLESPACE VARCHAR2(30) Default tablespace for temporary tables
CREATED DATE User creation date
PROFILE VARCHAR2(30) User resource profile name
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30) Y User's initial consumer group
EXTERNAL_NAME VARCHAR2(4000) Y User external name
--dba_users查询
select username,account_status,default_tablespace,temporary_tablespace from dba_users;
3、新建用户
--创建用户的语法
create user 用户名 identified by 密码 default tablespace 表空间
4、关于schema(模式)
schema是用户的附属对象,依赖于对象的存在而存在。一个用户在数据库中所拥有的所有对象的集合即为该用户的模式。可以通过视图dba_objects查看一个对象的拥有者。
5、系统用户 sys和system
sys用户角色为sysdba(数据库管理员),是数据库中权限最高的用户,可以进行任意操作不受限制;
system用户角色为sysoper(数据库操作员),权限仅次于sys用户。
sys用户只能在安装oracle数据库的服务器上使用:
sqlplus /@orcl as sysdba
启用system用户
alter user system account unlock;
alter user system identified by xxxx;
二、权限
权限分类
系统权限:Oracle内置的,与具体对象无关。
对象权限
1、获取系统权限信息
--获取系统权限信息
select * from dba_sys_privs;
2、分配系统权限
--将权限分配给grantee
grant privilege to grantee;
例如:
grant create sesssion to test;
--admin option选项实现权限传播
grant create session to test with admin option;
--test用户可以将create session权限赋予其他用户
3、回收系统权限
--回收权限
revoke privilege from grantee;
--例如:
revoke create session from test;
--经由test用户传播出去的权限不会被失效
1、对象权限
select:用于查询表、视图和序列
insert:像表或视图中插入数据
update:更新表中数据
delete:删除表中数据
execute:函数、存储过程、程序包等的调用或执行
index:为表创建索引
references:为表创建外键
alter:修改表或者序列属性
2、查看对象权限
--查看一个用户针对某个数据表的权限,可以通过视图dba_tab_privs或user_tab_privs
SQL> desc dba_tab_privs
Name Type Nullable Default Comments
---------- ------------ -------- ------- ----------------------------------------
GRANTEE VARCHAR2(30) User to whom access was granted
OWNER VARCHAR2(30) Owner of the object
TABLE_NAME VARCHAR2(30) Name of the object
GRANTOR VARCHAR2(30) Name of the user who performed the grant
PRIVILEGE VARCHAR2(40) Table Privilege
GRANTABLE VARCHAR2(3) Y Privilege is grantable
HIERARCHY VARCHAR2(3) Y Privilege is with hierarchy option
SQL>
3、分配对象权限
--分配对象权限
grant 权限 on 对象 to 用户
--权限传播
grant 权限 on 对象 to 用户 with grant option
4、回收对象权限
--回收对象权限
revoke 权限 on 对象 from 用户
三、角色
角色是权限的集合。一个角色可以包含多个权限。
1、查看系统中的角色
--查看系统中的角色
select * from dba_roles;
2、内置角色
DBA CONNECT RESOURCE(隐含了Unlimited tablespace)
四、应用
ORACLE数据字典视图的种类分别为:USER,ALL 和 DBA.
USER_*:
有关用户所拥有的对象信息,即用户自己创建的对象信息
ALL_*:
有关用户可以访问的对象的信息,即用户自己创建的对象的信息加上其他用户创建的对象但该用户有权访问的信息
DBA_*:
有关整个数据库中对象的信息
(这里的*可以为TABLES,INDEXES,OBJECTS,USERS等。)
1、查看所有用户
select * from dba_user;
select * from all_users;
select * from user_users;
2、查看用户系统权限
select * from dba_sys_privs;
select * from all_sys_privs;
select * from user_sys_privs;
3、查看用户对象权限
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
4、查看所有角色
select * from dba_roles;
5、查看用户所拥有的角色
select * from dba_role_privs;
select * from user_role_privs;
6、查看当前用户的缺省表空间
select username,default_tablespace from user_users;
7、查看某个角色的具体权限
select * from role_sys_privs
如grant connect,resource,create session,create view to TEST;
8、查看RESOURCE具有那些权限
用SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE"
9、查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS
10、查看当前用户所有的权限
Select * from session_privs