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 中的那个视图的主要内容,如果未能解决你的问题,请参考以下文章
解决mysql的赋权操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION问题
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant