Oracle用户、角色、权限
一、Oracle权限
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)
对象权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)
1.Oracle系统权限
oracle提供了166系统权限,而且oracle的版本越高,提供的系统权限就越多,我们可以查询数据字典视图system_privilege_map,可以显示所有系统权限。
基本语法
select * from system_privilege_map order by name;
oracle11GR2中提供了208个系统权限。
Oracle常用100个权限
权限名 | 含义 |
---|---|
alter any cluster | 修改任意簇的权限 |
alter any index | 修改任意索引的权限 |
alter any role | 修改任意角色的权限 |
alter any sequence | 修改任意序列的权限 |
alter any snapshot | 修改任意快照的权限 |
alter any table | 修改任意表的权限 |
alter any trigger | 修改任意触发器的权限 |
alter cluster | 修改拥有簇的权限 |
alter database | 修改数据库的权限 |
alter procedure | 修改拥有的存储过程权限 |
alter profile | 修改资源限制简表的权限 |
alter resource cost | 设置佳话资源开销的权限 |
alter rollback segment | 修改回滚段的权限 |
alter sequence | 修改拥有的序列权限 |
alter session | 修改数据库会话的权限 |
alter sytem | 修改数据库服务器设置的权限 |
alter table | 修改拥有的表权限 |
alter tablespace | 修改表空间的权限 |
alter user | 修改用户的权限 |
analyze | 使用analyze命令分析数据库中任意的表、索引和簇 |
audit any | 为任意的数据库对象设置审计选项 |
audit system | 允许系统操作审计 |
backup any table | 备份任意表的权限 |
become user | 切换用户状态的权限 |
commit any table | 提交表的权限 |
create any cluster | 为任意用户创建簇的权限 |
create any index | 为任意用户创建索引的权限 |
create any procedure | 为任意用户创建存储过程的权限 |
create any sequence | 为任意用户创建序列的权限 |
create any snapshot | 为任意用户创建快照的权限 |
create any synonym | 为任意用户创建同义名的权限 |
create any table | 为任意用户创建表的权限 |
create any trigger | 为任意用户创建触发器的权限 |
create any view | 为任意用户创建视图的权限 |
create cluster | 为用户创建簇的权限 |
create database link | 为用户创建的权限 |
create procedure | 为用户创建存储过程的权限 |
create profile | 创建资源限制简表的权限 |
create public database link | 创建公共数据库链路的权限 |
create public synonym | 创建公共同义名的权限 |
create role | 创建角色的权限 |
create rollback segment | 创建回滚段的权限 |
create session | 创建会话的权限 |
create sequence | 为用户创建序列的权限 |
create snapshot | 为用户创建快照的权限 |
create synonym | 为用户创建同义名的权限 |
create table | 为用户创建表的权限 |
create tablespace | 创建表空间的权限 |
create user | 创建用户的权限 |
create view | 为用户创建视图的权限 |
delete any table | 删除任意表行的权限 |
delete any view | 删除任意视图行的权限 |
delete snapshot | 删除快照中行的权限 |
delete table | 为用户删除表行的权限 |
delete view | 为用户删除视图行的权限 |
drop any cluster | 删除任意簇的权限 |
drop any index | 删除任意索引的权限 |
drop any procedure | 删除任意存储过程的权限 |
drop any role | 删除任意角色的权限 |
drop any sequence | 删除任意序列的权限 |
drop any snapshot | 删除任意快照的权限 |
drop any synonym | 删除任意同义名的权限 |
drop any table | 删除任意表的权限 |
drop any trigger | 删除任意触发器的权限 |
drop any view | 删除任意视图的权限 |
drop profile | 删除资源限制简表的权限 |
drop public cluster | 删除公共簇的权限 |
drop public database link | 删除公共数据链路的权限 |
drop public synonym | 删除公共同义名的权限 |
drop rollback segment | 删除回滚段的权限 |
drop tablespace | 删除表空间的权限 |
drop user | 删除用户的权限 |
execute any procedure | 执行任意存储过程的权限 |
execute function | 执行存储函数的权限 |
execute package | 执行存储包的权限 |
execute procedure | 执行用户存储过程的权限 |
force any transaction | 管理未提交的任意事务的输出权限 |
force transaction | 管理未提交的用户事务的输出权限 |
grant any privilege | 授予任意系统特权的权限 |
grant any role | 授予任意角色的权限 |
index table | 给表加索引的权限 |
insert any table | 向任意表中插入行的权限 |
insert snapshot | 向快照中插入行的权限 |
insert table | 向用户表中插入行的权限 |
insert view | 向用户视图中插行的权限 |
lock any table | 给任意表加锁的权限 |
manager tablespace | 管理(备份可用性)表空间的权限 |
references table | 参考表的权限 |
restricted session | 创建有限制的数据库会话的权限 |
select any sequence | 使用任意序列的权限 |
select any table | 使用任意表的权限 |
select snapshot | 使用快照的权限 |
select sequence | 使用用户序列的权限 |
select table | 使用用户表的权限 |
select view | 使用视图的权限 |
unlimited tablespace | 对表空间大小不加限制的权限 |
update any table | 修改任意表中行的权限 |
update snapshot | 修改快照中行的权限 |
update table | 修改用户表中的行的权限 |
update view | 修改视图中行的权限 |
Oracle权限相关的视图
与权限,角色相关的视图:
视图名 | 说明 |
---|---|
BA_SYS_PRIVS | 查询某个用户所拥有的系统权限 |
SER_SYS_PRIVS | 前用户所拥有的系统权限 |
ESSION_PRIVS | 当前用户所拥有的全部权限 |
OLE_SYS_PRIVS | 某个角色所拥有的系统权限 |
OLE_ROLE_PRIVS | 当前角色被赋予的角色 |
ESSION_ROLES | 当前用户被激活的角色 |
SER_ROLE_PRIVS | 前用户被授予的角色 |
dba_roles | Oracle 角色 |
dba_sys_privs | 角色包含的系统权限 |
dba_tab_privs | 角色包含的对象权限 |
注意: 要以SYS用户登陆查询这些视图,否则返回空!
针对表访问权限的视图:
视图名 | 说明 |
---|---|
ABLE_PRIVILEGES | |
LL_TAB_PRIVS | |
OLE_TAB_PRIVS | 某个角色被赋予的相关表的权限 |
A:授予权限
一般情况,授予系统权限是有dba完成的,如果用其它用户来授予系统权限,则要求用户必需具有grant any privilege的系统权限在授予系统权限时,可以带有with admin option选项,这样,被授予权限的用户或是角色还可以将该系统权限授予其它的用户或是角色。
授权基本语法:
grant 权限名称 to 用户名;
示例: grant create session to test with admin option; 授予连接数据库权限给test
grant create table, create view to test with admin option; 授予创建表,创建视图的权限给test
B:回收权限
一般情况下,回收系统权限是dba来完成的,如果其它的用户来回收系统权限,要求该用户必需具有相应系统权限及转授系统权限的选项(with admin option)。回收系统权限使用revoke来完成,当回收了系统权限后,用户就不能执行相应的操作了,但是请注意,系统权限级联收回问题!(不会级联回收权限)
回收系统权限基本语法:
revoke系统权限名 from 用户名;
特别说明:系统权限的回收不是级联回收
示例: revoke create session from test; test用户权限被回收后,还可以登录
2.Oracle对象权限
访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必需具有对象的权限,比如smith用户要访问scott.emp表(scott:方案,emp:表),则必需在scott.emp表上具有对象的权限。
常用的权限
alter 修改、delete 删除、select 查询、insert 添加、update 修改、index 索引、references 引用、execute执行。
注: 在oracle9i前,授予对象权限是由对象的所有者来完成的,如果用其它的用户来操作,则需要用户具有相应的(with grant option)权限,从oracle9i开始,sys,system可以将任何对象上的对象权限授予其它用户 。
A:授权基本语法
grant 对象权限 on 数据库对象 to 用户名 [with grant option] [,角色名];
特别说明:可以把权限直接赋给用户或角色。[with grant option]选项只能授予用户,不能授予角色。
示例:
grant select on geoff.emp to test; 将geoff用户emp表的查询权限赋予test用户
grant alter on geoff.emp to test; 将geoff用户emp表的alert权限(修改表结构)赋予test用户
B:回收基本语法:
revoke 对象权限 on 数据库对象 from 用户名[,角色名];
特别说明:对象的权限回收是级联回收。
3.sys和system用户
区别:
system用户只能用normal身份登陆em。除非你对它授予了sysdba的系统权限或者syspoer系统权限。
sys用户具有“SYSDBA”或者“SYSOPER”权限,登陆em也只能用这两个身份,不能用normal。
最重要的区别,存储的数据的重要性不同
sys所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。sys用户拥有dba,sysdba,sysoper等角色或权限,是oracle权限最高的用户。
system用户用于存放次一级的内部数据,如oracle的一些特性或工具的管理信息。system用户拥有普通dba角色权限。
“SYSOPER”权限,即数据库操作员权限,权限包括:
打开数据库服务器 关闭数据库服务器 备份数据库 恢复数据库 日志归档 会话限制
“SYSDBA”权限,即数据库管理员权限,权限包括:
打开数据库服务器 关闭数据库服务器 备份数据库 恢复数据库 日志归档 会话限制 管理功能 创建数据库
normal 、sysdba、 sysoper区别
normal 是普通用户,只有通过被sys授权之后才可以对数据库进行操作
sysdba拥有最高的系统权限
sysoper主要用来启动、关闭数据库,sysoper 登陆后用户是 public
sysdba登陆后是sys,而且只能是SYS登录sysdba.
系统权限 | sysdba | sysoper |
---|---|---|
Startup(启动数据库) | startup | |
Shutdown(关闭数据库) | shutdown | |
alter database open/mount/backup | alter database open/mount/backup | |
改变字符集 | none | |
create database(创建数据库) | None不能创建数据库 | |
drop database(删除数据库) | none | |
create spfile | create spfile | |
alter database archivelog(归档日志) | alter database archivelog | |
alter database recover(恢复数据库) | 只能完全恢复,不能执行不完全恢复 | |
拥有restricted session(会话限制)权限 | 拥有restricted session权限 | |
可以让用户作为sys用户连接 | 可以进行一些基本的操作,但不能查看用户数据 | |
登录之后用户是sys | 登录之后用户是public |
二、Oracle角色
角色就是权限的一个集合体,如果将权限比作一个士兵,那么角色就是排长、连长、营长,不同的角色拥有的权限个数和大小也不同!
角色分为预定义角色和自定义角色。
A:预定义角色
预定义角色是指oracle所提供的角色,每种角色都用于执行一些特定的管理任务。
常用的预定义角色
1、connect角色
connect角色具有一般应用开发人员需要的大部分权限,只要给用户授予connect和resource角色就够了。
connect角色具有:create session 创建连接权限
2、resource角色
resource角色具有应用开发人员所需要的其它权限,比如建立存储过程、触发器等。这里需要注意的是resource角色隐含了unlimited tablespace系统权限。
resource角色具有:
角色名 | 说明 | 角色名 | 说明 |
---|---|---|---|
create trigger | 创建触发器 | create cluster | 创建集群 |
create sequence | 创建序列 | create operator | 创建运营商 |
create type | 创建类型权限 | create indextype | 创建索引类型 |
create procedure | 创建过程 | create table | 创建表 |
3、dba角色
dba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system他们可以将任何系统权限授予其它用户,但是要注意的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)
B:自定义角色
就是自己定义的角色,根据自己的需要来定义,一般是dba来建立,如果使用别的用户来建立,则需要具有create role的系统权限。在建立角色时可以指定验证方式(不验证,数据库验证等)
1、建立角色(不验证)
如果角色是公用的角色,可以采用不验证的方式建立角色。
建立角色不验证基本语法:create role 角色名 not identified;
2、建立角色(数据库验证)
采用这样的方式时,角色名、口令存放在数据库中。当激活该角色时,必需提供口令。在建立这种角色时,需要为其提供口令。
建立角色需数据库验证基本语法:create role 角色名 identified by 口令;
3、角色授权
给角色授予权限和给用户授权没有太多区别,但是要注意,系统权限的unlimited tablespace和对象权限的with grant option选项是不能授予角色的。
给角色授权基本语法:grant 对象权限 on 数据库对象 to 自定义角色名;
4、 分配角色给用户
一般分配角色是由DBA来完成的,如果要以其它用户身份分配角色,则要求用户必需具有grant any role的系统权限。
通过角色名授权用户基本语法:grant 角色名 to 用户名 [with admin option];
如果给用户赋权限时带了with admin option选项,被授权的用户可以继续将此权限授予其它用户。
5、删除角色
使用drop role,一般是dba来执行,如用其它用户则要求该用户具有drop any role系统权限
删除角色基本语法:drop role 角色名;
三、Oracle用户
Oracle数据库是根据用户进行分片管理的,可以简单理解为每个Oracle用户都是一个相对独立的数据库,每个用户对应的表空间是用于永久存储当前用户数据的空间,对应的临时表空间是用于当前用户在数据库进行处理数据的空间,用户是Oracle角色权限和角色的载体。
用户相关操作
详细操作请看我另一篇文章:Oracle新建用户
相关查询操作
查询当前用户系统权限:select * from session_privs;
查询当前用户拥有角色:select * from role_sys_privs;
参考文献: https://www.cnblogs.com/yucoder/p/11057764.html
如有问题,欢迎指正!