权限是执行特定类型的SQL命令或者访问其他方案对象的权利。 oracle权限包括系统权限,对象两种权限。
系统权限是包含群集权限、数据库权限、索引权限、过程权限、角色权限等系统级别的权限,它控制了执行特定SQL命令的权利。
对象权限是在对象级别控制数据库存取与使用的权利,也就是用户对其它方案的访问权限(方案:某用户拥有的所有的数据库对象的逻辑集合)。
--以管理员的身份连接到数据库,可通过查询数据字典表system_privilege_map查看到这些权限;--
connect sys/orcl as sysdba;
select *from system_privilege_map;
系统权限:
数据库权限 功能
alter database 更改数据库的配置
alter system 更改数据库初始化参数(表空间大小等)
audit system 审计SQL,与此相对的是NOAUDIT SYSTEM
audit any 审计任何方案对象
表空间权限 功能
create tabelspace 创建表空间
alter tablespace 更改表空间
drop tablespace 删除表空间
manage tablespace 管理表空间
unlimited tablespace 不受配额限制使用表空间
会话权限 功能
create session 创建会话,连接到数据库
alter session 更改会话
alter resource cost 更改概要文件中的计算资源消耗的方式
restricted session 在受限会话模式下链接到数据库
用户权限 功能
create user 创建用户
alter user 更改用户
become user 成为另一个用户
drop user 删除用户
角色权限 功能
create role 创建角色
alter any role 更改任何角色
drop any role 删除任何角色
grant any role 向其他角色或用户授予角色
................
如若我们新建了用户,但是没有赋予任何的权限,新建的用户则甚至不能连接到数据库;
create user xuexin identified by ghjkl--创建用户xuexin
default tablespace users--默认表空间
temporary tablespace temp;--默认临时表空间
由以上截图可知,新用户只有在授予系统权限后才能进行相应操作,例如只有授予了创建会话权限之后才可以连接到数据库。
对象权限是指用户之间的表视图序列等模式对象存取操作的权限;一个用户拥有它所创建的所有表,视图,序列等模式对象的所有对象权限,还可以将这些对象权限授予其它用户。
不同的对象类型拥有不同种类的对象权限,例如表对象拥有alter,delete,index,insert,reference,select,update权限;不同对象类型拥有的对象权限:
使用grant语句可以将对象权限授予给指定的用户,角色,以及公共用户组,具体语句如下:
grant 对象权限 on 具体授予对象(schema.object)to user/role/public
只有具体对象权限被授予给用户,用户才可以对相关对象进行相关操作,若进行没有赋权的操作将会报错:
系统权限的回收:
revoke 系统权限 from 用户名/角色/公共组
系统权限的回收不具有传递性,也即是a用户拥有系统权限A,并将其授予给b用户,现在回收a用户的A权限,b用户仍旧拥有系统权限A;
对象权限的回收:
revoke 对象权限 on 具体授予对象(schema.object)from user/role/public`
用户只能从自己授权的用户处回收对象权限,用户对象权限一旦被回收,则基于此权限创建的视图,过程都将无效。
角色是一组权限的集合,是权限管理的一种方案,避免了给同一个用户反复赋予权限的重复性劳动。
create role manager;--创建角色manager
前面的截图中用到了scott用户的students表,并且将该表的select,alter,update权限赋给了新建的riyue用户,现在将前面提到的一些系统权限授予给该用户,比如用户权限和管理权限,将权限赋予角色与将权限赋予给用户类似:
grant create user,alter user,become user,drop user,sysdba,sysoper to manager
注意:必须是拥有这些权限的用户才可以创建新角色,并给新角色授权。
有了角色,如果再次新建一个需要这些权限的用户时就可直接将角色授予新用户:
grant manager to tiger;--将manager角色授予给新建的用户tiger;
alter user riyue default role none;--设置所有默认角色失效;
alter user riyue default role all;--设置所有默认角色生效;
alter user riyue default role all except role_name;--设置除了某个角色之外的所有默认角色生效;
--控制当前用户角色的使用还可以使用:
set role role_name identified by password/role_name0 identified by password/..... all [except role_name1 /role_name2 ]|none
all表示启用当前用户被授予的所有角色;前提是角色没有设置密码;
except表示除去特定角色之外的角色被重新启用;
none表示使用户的所有角色失效
角色被授予用户之后可以在数据字典表user_role_privs中查询到,下图为整个案例用到的scott用户所具有的角色:
如果moge 角色不适用了可以将其删除,那么使用了该角色的用户将会失去角色对应的权限:
标识用户是oracle数据库管理的最基本要求之一。每个连接到数据库的用户必须是数据库的合法用户。用户想要使用oracle的系统资源(数据,对象等),就必须提供用户名和密码,这样才能访问与账户关联的资源。每个用户必须有一个密码,并且只能和数据库中的一个模式相关联。
在实际应用中,应用程序会有许许多多的用户,这些用户可能拥有相同的角色权限,也可能拥有不同的角色权限,都必须通过特定的标识符和密码经过前台的数据的传递到后台的验证最终确定是否能够连接到数据库以及登录到应用程序。
create user user_name identified by password
default tablespace ** --默认表空间名字,缺省值设置为system
temperary tablespace ** --临时表空间名,缺省值设置为temp
quota ** on system --配置用户在system表空间的的磁盘限额
与其他数据库对象一样,创建之后的用户并不是不可变的,可以通过alter user更改用户特征:
drop user user_name [cascade];--cascade可选。
如果没有cascade参数,则必须显示的删除该用户拥有的任何对象,或者将这些对象转移到另一个模式下;如果添加了cascade参数,则会自动删除该用户拥有的任何对象。
通过查询包括用户和用户特征的信息的数据字典表,都可以获取用户信息。
其它相关数据字典视图和表:DBA_TS_QUOTAS(用户和表空间的磁盘空间利用率以及限制,针对其限额不是unlimited的用户)、DBA_PROFILES(可以赋予用户的配置权限)、USER_HISTORY$(具有用户名、加密密码和时间戳的密码历史记录).
__________________________The end___________________________