Oracle Create View问题

nts*_*sue 7 sql oracle view grant ora-00942

大家好.所以,我以dba帐户登录,我想在User1的架构中创建一个视图,但是从User2中选择数据.

我使用了以下查询:

CREATE OR REPLACE VIEW User1.NewView (Column1) AS
SELECT DISTINCT Column1 FROM User2.Table
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

SQL Error: ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

要解决这个问题,我必须在User2.Table上授予对User1的select访问权限.有没有办法在不必授予访问权限的情况下执行此操作,因为我已经以dba身份登录了?多谢你们!

OMG*_*ies 11

是的,您(并且应该始终)明确授予对另一个模式中对象的访问权限.

GRANT SELECT ON user2.table TO user1
Run Code Online (Sandbox Code Playgroud)

虽然您以"dba帐户"(SYS,我假设)登录,但CREATE语句专门针对user1架构.


Gar*_*ers 8

你可以创建或替换强制查看...

尽管缺少特权,这将创建视图,但除非授予特权,否则视图将无法使用.如果稍后授予权限(例如在某些自动构建脚本中),这是一个非常有用的解决方案.