Oracle用户表

时间:2017-09-29 08:36:06

标签: sql database oracle plsql oracle12c

我在1个DB中创建了一些用户名为DEVICE的表格。

查询表我发现它们属于用户DEVICE

SELECT owner, table_name FROM dba_tables  

然后我创建了一个名为CAR的用户,我使用该用户登录了数据库并创建了一些表,我试图用

查询其他表
SELECT * FROM DEVICE.table_name;

结果

00942. 00000 -  "table or view does not exist"

并使用用户CAR进行了记录,但在SQL Developer的其他用户中看不到用户DEVICE

3 个答案:

答案 0 :(得分:1)

出现此错误是因为CAR没有查询DEVICE表的权限。 您需要将此表的访问权限授予CAR。

以设备身份登录

2-发出以下补助金:

TEST-PC

如果要对DEVICE用户的所有表执行此操作,请创建如下脚本:

GRANT SELECT ON TABLE_NAME TO CAR;

如果您这样做,我的建议是创建一个角色:

select 'GRANT SELECT ON ' || table_name || ' TO CAR;' FROM USER_TABLES;

请注意,如果您在DEVICE架构中创建新表,则需要将新表上的select授予ROLE for CAR才能访问它。

答案 1 :(得分:1)

这里是在所有表上生成grant select的脚本。

select 'grant select on Admin.' || object_name || ' to User;' 
from user_objects 
where object_type in('TABLE');

然后你必须创建一个脚本来立即运行这些grant语句,或者你也可以使用PL / SQL。在SQL提示符下键入以下内容。

SQL> spool grant_statements.sql
SQL> set pagesize 0
SQL> set feedback off
SQL> set linesize 300
SQL> set trimout on
SQL> set trimspool on
SQL> select 'grant select on Admin.' || object_name || ' to User;' from user_objects where object_type in('TABLE','SYNONYM')
/
SQL> spool off

你有脚本文件可以运行它。 要么  您可以运行以下PL / SQL块(以管理员用户身份运行)。

BEGIN
  FOR s IN (SELECT *
              FROM user_objects where object_type in('TABLE','SYNONYM'))
  LOOP
    EXECUTE IMMEDIATE  'grant select on admin.' || s.object_name || ' to user';
  END LOOP;
END;

答案 2 :(得分:0)

您需要为DEVICE创建的表授予用户CAR访问权限。使用DEVICE用户登录并授予对表的访问权限CAR应该能够使用如下所示的SQL访问

CREATE ROLE DEVICE_READ_ROLE;

select 'GRANT SELECT ON ' || table_name || ' TO DEVICE_READ_ROLE;' FROM USER_TABLES;
GRANT DEVICE_READ_ROLE TO CAR;