关闭

oracle 之授权篇

标签: oracletableuserdeletesession数据库
558人阅读 评论(0) 收藏 举报

 

今天一个宁波项目,要建boss系统。拿来一个,喜忧参半...操作系统数据库已经建好了,但是...
都没有初始化,我晕。
从头开始搞,规划并建立表空间,建立用户,授予权限;
 规划比较麻烦,我参考了杭州的系统,以100万用户计算,目前宁波的50万。以2/3杭州的空间来划分。
具体内容还是不说了,说一下遇到的问题。
总共建了3个用户:dvbcetus, dvbcetus_ed, dvbhis;
dvbcetus为主用户:为生产库。
dvbcetus_ed为副用户,用户对生产库的一些日常操作,如select, update等。但是不授予delete(DML),truncate(DDL)等权限。
dvbhis:一看也就知道了,历史数据的用户。

默认情况下这个三个用户都授予了:connect , resource两个权限,用于连接及创建对象等操作。

问题就出在在dvbcetus用户下时,要对dvbcetus_ed进行授权,但是提示错误:ora-01031 权限不足。
怪了,我自己的对象,要授权给别人,怎么会权限不足呢?
然后尝试授予create table,session 等权限,但是都没有成功。
于是新建一用户:create user test identified by kkk;
给该用户授权:grant connect to test; grant resource to test;
新建表:create table test1(name varchar2(255));
授    权:grant select any table to dvbcetus;--显示成功

很奇怪,为什么前面建的就不行呢?于是重建test用户,完全模拟系统用户:
drop user test cascade;--当用户下已经有对象存在时,需要加上cascade参数。
create user test identified by kkk default tablespace dvbcetus temporary temp ;

这时test用户也没有权限对其他用户进行授权了,即使加入了with admin option也不行。

后来查找资料,发现有这样一个授权方式:
grant grant any privileges to some_user;
我当即就意识到:找到办法了!!

敲入命令,登陆用户,授予权限,OK!
原来你新建一个用户的时候,如果用户对应的表空间不是默认的表空间,则在
你在该表空间的内容的权限授予他人的时候,自己本身也需要授权的权限。不
然你就没有授权的权限。而如果是默认的系统表空间,则好像没有这种问题。
关于更深入的细节,还要查询更多的资料来了解了。

没想到一个grant,还有这么多的学问。本来想以角色来实现,结果这样以来又
得重来了,要学习的东西实在太多了啊!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:88978次
    • 积分:1365
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:11篇
    • 译文:0篇
    • 评论:13条
    文章分类