Sql 角色仅访问Oracle Exadata中的表,而不访问表中的数据

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

用户已从多个模式的多个表中使用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  = 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,我同意你的查询,但查询数据的不是我。数据由用户查询。我不知道他们是否会使用这种条件。嗨,钱德拉坎特,我同意你的查询,但查询数据的不是我。数据由用户查询。我不知道他们是否会使用这种条件……谢谢。。但我的问题不同……我们已经有了包含数据的表……我们希望用户访问元数据而不是数据……我们能为这种情况做些什么吗?……谢谢。。但我的问题是不同的……我们已经有了包含数据的表……我们希望用户访问元数据而不是数据……对于这种情况,我们能做些什么吗?