限制用户默认表空间使用权限问题

蓝色蛋饼 2017-02-20 10:18:39
为了让使用者在创建表、索引时必须指定表空间,想到给用户指定默认表空间但是不给予表空间使用权限(或者quota配置为0),这样不指定表空间时会提示“没有的表空间配额”或者“没有表空间使用权限”,实际没有实现

问:
1、如何限制用户没有默认表空间使用权限
2、是否有别的方法限制创表或索引时必须指定表空间
...全文
370 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色蛋饼 2017-02-21
  • 打赏
  • 举报
回复
算是解决了 一时也想不到其他解决方法
--总结
--创建用户
create user test2 identified by test2;
--赋予权限 指定默认表空间
grant connect,create table to test2;
alter user test2 default tablespace users;
select * from dba_users a where a.username ='TEST2';
--限制表空间使用额为0
alter user test2 quota 0 on users;  
select * from dba_ts_quotas a where a.username ='TEST2';
--查看deferred_segment_creation 确保数据为false
--show parameter segment(11g默认参数为True)
alter system set deferred_segment_creation=false;
--创表测试
--切换用户测试
conn test2/test2;
create table test(id number);
jdsnhan 2017-02-21
  • 打赏
  • 举报
回复
一时想不出好办法来,如果业务上非实现,短时间内用触发器 要不拦截创建索引的语法,要不就在创建索引完成后rebuild到指定表空间
js14982 2017-02-20
  • 打赏
  • 举报
回复
建表可以,插入数据呢?
蓝色蛋饼 2017-02-20
  • 打赏
  • 举报
回复
引用 1 楼 js14982 的回复:
给一个小的表空间,随便搞搞就满了的那种,设置成默认。 如果按你说的,想要规矩的设置权限,你需要对用户进行权限设置。另外oracle新创建的用户都有分配默认表空间的,你没有指定表空间就是用默认表空间。
--总结
--创建用户
create user test2 identified by test2;
--赋予权限 指定默认表空间
grant resource ,connect to test2;
alter user test2 default tablespace users;
select * from all_users a where a.username='TEST2';
--限制表空间使用额为0
alter user test2 quota 0 on USERS;  
--查看deferred_segment_creation 确保数据为false
--show parameter segment
alter system set deferred_segment_creation=false;
--创表测试
--切换用户测试
conn test2/test2;
总结网上跟问人,但是还是不行 创表依旧可以不指定表空间
js14982 2017-02-20
  • 打赏
  • 举报
回复
给一个小的表空间,随便搞搞就满了的那种,设置成默认。 如果按你说的,想要规矩的设置权限,你需要对用户进行权限设置。另外oracle新创建的用户都有分配默认表空间的,你没有指定表空间就是用默认表空间。
卖水果的net 2017-02-20
  • 打赏
  • 举报
回复
赋 resource 权限时,会自动赋 unlimited tablespace 权限;
蓝色蛋饼 2017-02-20
  • 打赏
  • 举报
回复
引用 5 楼 wmxcn2000 的回复:


create user test2 identified by test2 default tablespace users;

-- 分配这个权限 
grant connect, create table to test2;

select * from all_users a where a.username='TEST2';
alter user test2 quota 0 on USERS;  



conn test2/test2@TEST;

create table test(id int, name varchar(10));
insert into test values(100,'xxx');

版主这个可行啊 再问 1、resource角色中哪个权限导致我这个失败了啊 2、有没有其他办法限制创表、索引必须指定表空间 (表跟索引表空间分开的,默认表空间貌似不太好使)
卖水果的net 2017-02-20
  • 打赏
  • 举报
回复


create user test2 identified by test2 default tablespace users;

-- 分配这个权限 
grant connect, create table to test2;

select * from all_users a where a.username='TEST2';
alter user test2 quota 0 on USERS;  



conn test2/test2@TEST;

create table test(id int, name varchar(10));
insert into test values(100,'xxx');

蓝色蛋饼 2017-02-20
  • 打赏
  • 举报
回复
引用 3 楼 js14982 的回复:
建表可以,插入数据呢?
创表 插数据都可以。
SQL> conn test2/test2
已连接。
SQL> create table test
  2  (name varchar2(20));

表已创建。

SQL> insert into test
  2  values
  3  ('dong');

已创建 1 行。

SQL> commit;

提交完成。

SQL>
都可以 之前一个用户快实现了限制,新建的用户USERS配置配额为0都不行

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧