对于我的Oracle数据库,我创建了一个用户。我希望该用户只能访问3个表。所以我写了这些问题:
grant select on table1 to newuser;
grant select on table2 to newuser;
grant select on table3 to newuser;
我从控制台得到了这个,这确保我给了补助金。
GRANT succeeded
但是,当我使用此用户连接到数据库并编写以下查询时,我收到ORA-00942错误。
Select * from table1;
我想我需要为特权和角色编写额外的查询(我已经添加了CONNECT角色)。可能是什么?
答案 0 :(得分:6)
通过指定表所有者来运行查询。
Select * from tableowner.table1;
如果这不起作用,则表示您未在正确的表上授予访问权限,或者您使用错误的用户登录。
请记住,同一个表名可以存在于多个模式中。
答案 1 :(得分:1)
假设,
NEWUSER - >已提供补助金的用户。
EXISTINGUSER - >提供补助金的表的所有者。
以 EXISTINGUSER 登录,然后输入以下查询:
GRANT SELECT ON TABLE1 TO NEWUSER ;
以 NEWUSER 登录,然后选择使用:
SELECT * FROM EXISTINGUSER.TABLE1;
如果你想避免使用&#34; EXISTINGUSER&#34;。&#34; TABLE1&#34;,那么你可以创建一个synonym,相当于 ALIAS NAME < /强>:
以 NEWUSER 登录,请输入以下查询:
CREATE SYNONYM SYN_TABLE1 FOR EXISTINGUSER.TABLE1;
要从同义词中选择数据,请以 NEWUSER 登录并选择使用:
SELECT * FROM SYN_TABLE1;
同义词参考:http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7001.htm