GRANT SELECT ON view TO user using script on SQL developer, 而不是 SELECT * FROM SQL Plus 中的那个视图

Posted

技术标签:

【中文标题】GRANT SELECT ON view TO user using script on SQL developer, 而不是 SELECT * FROM SQL Plus 中的那个视图【英文标题】:GRANT SELECT ON view TO user using script on SQL developer, than SELECT * FROM that view in SQL Plus 【发布时间】:2021-03-19 12:41:03 【问题描述】:

我的 SQL 开发脚本:

**CREATE USER C##DG IDENTIFIED BY abc123;**

**CREATE VIEW DG1_VIEW**
AS SELECT m_pms.MaPMS, m_pms.MaDG, m_pms.SoLuong, m_s.MaSach, m_s.TenSach, m_ctpm.SL
FROM PhieuMuonSach m_pms, ChiTietPhieuMuon m_ctpm, Sach m_s
WHERE m_pms.MaDG = 1 AND m_pms.MaPMS = m_ctpm.Ma_PMS AND m_ctpm.Ma_Sach = m_s.MaSach**;**

**GRANT CREATE SESSION TO C##DG;
GRANT SELECT ON DG1_VIEW TO C##DG;**

在 Sql Plus 上,我以 C##DG 身份登录,输入 '''SQL> SELECT * FROM DG1_VIEW;''' 并收到'ORA-00942:表或视图不存在'。但是这个视图已经有数据了。

我的问题是什么以及如何解决?我很想听听你们的意见。

【问题讨论】:

【参考方案1】:

您需要指定创建此视图的架构

select * from system.dg1_view;

或者您可以再次以系统身份登录并为该视图创建一个公共同义词,以便在不指定架构的情况下使其可用

【讨论】:

我在问题中使用该代码创建了 USER C##DG 并在 SYSTEM 中查看 DG1_VIEW。这有什么问题吗?我需要添加一些东西吗?此外,您的解决方案也不起作用。 @NguyenBot 我已经用用户名更新了答案。它应该有帮助 非常感谢。 @NguyenBot 不要在system 用户中创建表/视图/对象。 创建一个不同的用户,给它适当的权限等。但不要使用内置用户,旨在存储与系统设置相关的数据。如果你这样做了,那么当你无意中更改了一些关键系统数据时,你就有可能使你的系统无法使用。 您也不应该将用户数据写入根容器(我假设您已经创建了一个 C## 用户以便您可以在根容器中工作)。所有用户数据都应该在一个可插入的数据库中,不需要特殊的命名用户。

以上是关于GRANT SELECT ON view TO user using script on SQL developer, 而不是 SELECT * FROM SQL Plus 中的那个视图的主要内容,如果未能解决你的问题,请参考以下文章

Oracle杂记

解决mysql的赋权操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION问题

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant

GRANT DELETE ON database.table TO username@'%';

Mysql用户权限管理

MySQL常用操作(下)