日期:2014-05-16  浏览次数:21461 次

用户权限中的adm一栏对应为no,为什么还能赋予权限给其他的用户?
本帖最后由 jiang11034 于 2014-03-15 10:39:39 编辑
以system 用户连接数据库
然后查看system的权限
然后赋予权限create table 给另外一个没有该权限的用户,竟然成功了。

该用户也能创建表,这是为什么?很诡异啊
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

system本身就是管理员,可以给其他用户分配权限啊。。

但是system 对应的create table 一栏中,adm一项是no啊

这个查不到只是代表没有显示的授权,而sys和system本身角色就已经包含了这些权限,只是没有显示的表示而已。
不信你可以查看DBA权限的用户包括sys。如果没有过显示授权,你也是查不到这些权限。但是看不到不带表不存在,是由本身的角色决定的。。


查不到?不太明白


这个截图里面有的adm对应的是yes,有的却是no,这个该怎么理解?

是yes的都是建用户时候显示授予的权限。。而no的为没有显示授权的权限,为no的不代表没有,还与自己的用户角色有关。
这么和你说吧,你先了解一下什么是系统权限,什么是角色权限。当然还有对象级别的授权。。加起来才是该用户的权限。
你可以通过user_role_privs查看一下角色级别的权限。
很多情况下都需要显式的給用户授权,比如我们在存储过程中执行ddl、dml语句的时候,经常会提示权限不足。即使有dba权限也不可以。。这种情况就是你查询的情况,需要显示的授权。。


现在就是刚看到系统权限和对象权限的知识点。这里还没有牵扯到角色权限这一项。create table属于系统权限。看到的网上的解释是当adm为yes的时候就能将该权限授予给其他的用户,当为no的时候没有授予给其他用户的权限。
你说的角色权限是不是意味着角色里面可能会有这个create table这个权限?所以即使显示为no也是可以授予其他用户的?

嗯,是这个意思。学习的时候不要拿系统自动建立的管理员做实验。。你可以新创建一下用户做这些实验。。