目录
上图
Normal(普通用户),SYSDBA(系统管理员),SYSOPER(系统操作员),三种角色。
1、三种角色有什么不一样。
2、sys用户和system用户有什么区别。
3、dba角色和sysdba角色有什么区别。
4、如何查看一个用户有哪些权限。
5、Oracle的权限体系是怎样的。
Oracle内置用户
我们知道Oracle内置了几个用户:
scott
四张表,演示了一个很简单的公司人力资源管理的数据结构。
hr
七张表,演示一个面试hr的库结构。
system
本地管理员,一般我们使用该用户进行Oracle的管理。
sys
系统管理员,拥有最高级别的权限,没有任何人的权限可以高于他。
在这四个用户中,我们需要注意一点:
system与sys用户的区别。
system只有dba权限,没有sysdba和sysoper,只能使用normal登录。
sys用户有dba,sysdba,sysoper权限,登录的时候可以使用sysdba,sysoper进行登录,不可以使用normal登录,干啥啥都行,权限第一名。
登录页面三种角色区别
nomal
普通人,每个人基本上都是这个。
sysdba
数据库管理者。
sysoper
数据库操作人员,主要用来启动、关闭数据库。
sysdba与sysoper的区别
两种区别不算大,这两个都是sys用户才能登陆的。
功能上边的区别,我复制一下官方的,不是太清楚哈,不过没关系,这个不重要,把这个图略过,往下看吧。
SYSDBA和SYSOPER系统权限允许我们在数据库打开之前以这两种身份去访问实例。在使用Oracle的过程中,这两种系统权限不可以随便授予,原因如下:
注意:show user命令不要在PLSQL里执行,这个是sql*plus的命令。
我给jack赋予两种权限。
SQL> conn jack/jack as sysoper;
已连接。
SQL> show user
USER 为"PUBLIC"
SQL> conn jack/jack as sysdba
已连接。
SQL> show user
USER 为"SYS"
我们可以看到,明明用户是jack,为什么使用使用不同身份连接show user命令出来的结果却是"SYS"和"PUBLIC",正常来说应该是"JACK"。
当你给普通用户这两种系统权限后,这个普通用户已经不是这个普通用户了,他已经不再是他了,oh,baby,Jack!变身奥特曼,可以打小怪兽了。
dba角色与sysdba角色的区别。
往下看,可以看到几个常用命令,可以做一个小测试。
大家有没有碰到这种情况,并发出疑惑:
当我赋予system,给他sysdba权限的时候,使用命令进行查看system所拥有的角色,我们并不能看到sysdba这个角色,只能看到dba,可是我确确实实授予他sysdba权限了,为什么我查不到?
sysdba这个角色是一个抽象的概念,不存在与Oracle数据库中,它不是一个数据,仅仅作用于登录页面,用于管理Oracle实例,不需要数据库完全启动成功生效,只要Oracle实例是启动的,它就存在。dba角色依赖于数据库启动,在数据库启动后生效。
系统权限和对象权限
Oracle由两种权限组成了它的权限体系,就是RBAC,将权限分配给角色,再将角色分配给具体用户,这样多表联查,就可以给这个用户赋予多个权限。Oracle中的角色就是权限的集合体,
系统权限和对象权限,是比较容易记忆的,因为两种权限都具有较强的针对性。
系统权限是整体上说,对象权限比较细,非常细,比如查看一张表。
可以理解为系统权限包括大于对象权限。
该命令可以查看RESOURCE角色,有哪些权限。
select * from role_sys_privs t where t.ROLE='RESOURCE'
可以看到DBA角色有哪些权限,所谓的权限,其实就是增删改查。
系统权限(大)
针对用户使用数据库的权限,比如连接Oracle,创建实体。
connect(基本的连接),可以登录Oracle,不可以创建实体和数据库结构。
resource(程序开发),可以登录Oracle,可以创建实体,不可以创建数据库结构。
dba(数据库管理人员),可以登录Oracle,可以创建实体和数据库结构。
对象权限(小)
针对表和视图的操作权限,比如A用户对B用户下表和视图的权限。
权限设计原则
1、按照最小分配原则;
2、禁止grant dba to user;
3、数据库用户要分为管理、应用、维护、备份四类用户;
4、不允许使用sys和system建立数据库应用对象;
权限相关常用命令
查看用户有哪些角色
select * from dba_role_privs t where t.GRANTEE='USERNAME';
查看角色有哪些权限(严格区分大小写)
select * from role_sys_privs t where t.ROLE='RESOURCE';
给用户授权(系统权限)
GRANT DBA TO HR;
收回用户权限
Revoke DBA from HR;
查询有哪些角色具有sysdba和sysoper权限
select * from V$PWFILE_USERS
查看所有角色
select * from dba_roles;
···················································································
你学废了吗