Sql 角色仅访问Oracle Exadata中的表,而不访问表中的数据
用户已从多个模式的多个表中使用CREATETABLE语句和select语句创建表。我想限制他们读取数据,并允许他们在模式中仅使用元数据而不使用数据创建空表。我希望在用户访问和角色级别执行此操作。 请告诉我怎么做 我已经尝试给他们底层表的读取权限,但用户也可以看到数据Sql 角色仅访问Oracle Exadata中的表,而不访问表中的数据,sql,oracle,roles,exadata,Sql,Oracle,Roles,Exadata,用户已从多个模式的多个表中使用CREATETABLE语句和select语句创建表。我想限制他们读取数据,并允许他们在模式中仅使用元数据而不使用数据创建空表。我希望在用户访问和角色级别执行此操作。 请告诉我怎么做 我已经尝试给他们底层表的读取权限,但用户也可以看到数据 Create table cust_acct_details as select * from ep_rel.acct a inner join ep_dnf.Cust_account ca on a.acct_id
Create table cust_acct_details
as
select *
from ep_rel.acct a
inner join ep_dnf.Cust_account ca
on a.acct_id = ca.acct_id
创建表时不应包含数据。在代码中添加以下条件
-- condition to add where 1<>1
Create table cust_acct_details
as
select *
from ep_rel.acct a
inner join ep_dnf.Cust_account ca
on a.acct_id = ca.acct_id
where 1<>1
请确保select语句中有唯一的列名。Oracle不允许在一个表中使用相同的列名。请使用别名而不是* 将以下条件添加到代码中
-- condition to add where 1<>1
Create table cust_acct_details
as
select *
from ep_rel.acct a
inner join ep_dnf.Cust_account ca
on a.acct_id = ca.acct_id
where 1<>1
请确保select语句中有唯一的列名。Oracle不允许在一个表中使用相同的列名。请使用别名而不是* 如果删除用户的所有表空间权限,用户仍然可以创建表,但无法填充它们 例如,如果运行此PL/SQL块从一个用户撤消所有表空间配额:
begin
for users in
(
select 'alter user '||username||' quota 0 on '||tablespace_name v_sql
from dba_ts_quotas
where username = 'TEST_USER'
order by 1
) loop
execute immediate users.v_sql;
end loop;
end;
/
现在,用户可以创建表,但如果尝试添加行,则会出现错误:
SQL> create table test1(a number);
Table created.
SQL> insert into test1 values(1);
insert into test1 values(1)
*
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'USERS'
对于元数据,用户总是可以在自己的模式中看到元数据。要允许他们在其他架构中查看元数据,请运行如下授权:
grant select_catalog_role to the_user;
然后,该用户可以在所有数据字典视图中查看元数据,也可以使用DBMS元数据。获取DDL。如果您删除用户的所有表空间权限,他们仍然可以创建表,但无法填充它们 例如,如果运行此PL/SQL块从一个用户撤消所有表空间配额:
begin
for users in
(
select 'alter user '||username||' quota 0 on '||tablespace_name v_sql
from dba_ts_quotas
where username = 'TEST_USER'
order by 1
) loop
execute immediate users.v_sql;
end loop;
end;
/
现在,用户可以创建表,但如果尝试添加行,则会出现错误:
SQL> create table test1(a number);
Table created.
SQL> insert into test1 values(1);
insert into test1 values(1)
*
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'USERS'
对于元数据,用户总是可以在自己的模式中看到元数据。要允许他们在其他架构中查看元数据,请运行如下授权:
grant select_catalog_role to the_user;
然后,该用户可以在所有数据字典视图中查看元数据,也可以使用DBMS元数据。GET_DDL。嗨,Chandrakant,我同意你的查询,但查询数据的不是我。数据由用户查询。我不知道他们是否会使用这种条件。嗨,钱德拉坎特,我同意你的查询,但查询数据的不是我。数据由用户查询。我不知道他们是否会使用这种条件……谢谢。。但我的问题不同……我们已经有了包含数据的表……我们希望用户访问元数据而不是数据……我们能为这种情况做些什么吗?……谢谢。。但我的问题是不同的……我们已经有了包含数据的表……我们希望用户访问元数据而不是数据……对于这种情况,我们能做些什么吗?