我在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
答案 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;