如何授权Oracle用户创建和访问视图

冬伟君_3616

冬伟君_3616

2026-07-27

588人浏览

原创

必须先授予 create session 权限才能登录数据库,否则后续授权无效;create view 权限仅允许建视图,还需单独授予基表 select 权限,且需指定 schema 名;权限生效需重新连接,oceanbase oracle 模式同理。

如何授权oracle用户创建和访问视图

必须先有 CREATE SESSION 权限才能登录

没有 CREATE SESSION,用户连数据库都进不去,后续所有授权都是空谈。常见错误是创建完用户就直接授 CREATE VIEW,结果一连接就报 ORA-01045: user ... is not granted CREATE SESSION privilege。

实操建议:

  • 用 GRANT CREATE SESSION TO username; 作为第一步,且必须由具备该权限的用户(如 SYS 或 SYSTEM)执行
  • 如果用户仍无法登录,检查是否被 ACCOUNT LOCK —— 创建时加了 ACCOUNT LOCK 或后续被手动锁定,需用 ALTER USER username ACCOUNT UNLOCK;
  • Oracle 不会自动刷新已存在的连接会话,新授的 CREATE SESSION 对已断开再重连才生效

CREATE VIEW 权限只允许建视图,不等于能查基表

授了 CREATE VIEW,用户可以执行 CREATE VIEW v AS SELECT ...,但只要视图定义里涉及其他用户的表或视图,就会报 ORA-00942: table or view does not exist 或 ORA-01031: insufficient privileges —— 因为缺的是基表上的 SELECT 权限,不是建视图的权限。

实操建议:

  • 对每个基表/视图,单独执行 GRANT SELECT ON schema_name.object_name TO username;
  • 不能省略 schema 名(如 SCOTT.EMP),否则默认指向当前用户 schema,而基表通常不在当前用户下
  • 如果基表属于同个用户(比如自己建的表),则只需 GRANT SELECT ON my_table TO username;,无需 schema 前缀
  • 注意:WITH GRANT OPTION 不推荐随意加,它允许被授权者继续转授,容易失控

视图创建失败时,优先查 OBJECT PRIVILEGE 而非 SYSTEM PRIVILEGE

错误信息里出现 ORA-01031,不代表系统权限不够,大概率是对象权限缺失。例如用户有 CREATE VIEW,但试图基于 HR.DEPARTMENTS 建视图,却没被授予 SELECT on that object —— 此时 GRANT CREATE VIEW 再多也没用。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载

实操建议:

  • 运行 SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'USERNAME' AND TABLE_NAME IN ('DEPARTMENTS', 'EMPLOYEES'); 确认具体缺哪个对象的哪个权限
  • 避免用 GRANT ALL ON ...,尤其对生产表;最小化只给 SELECT 即可
  • 如果基表很多且分散,考虑建角色统一管理:CREATE ROLE view_reader; GRANT SELECT ON hr.departments TO view_reader; ... GRANT view_reader TO username;

OceanBase Oracle 模式下,权限生效需重新连接

在 OceanBase 的 Oracle 兼容模式中,即使执行了 GRANT SELECT ON emp_view TO test;,当前连接 session 里依然看不到新权限,CREATE VIEW 仍会失败 —— 这和 Oracle 原生行为一致,但容易被忽略。

实操建议:

  • 每次执行 GRANT 后,务必让目标用户退出并重新连接(DISCONNECT + CONNECT)
  • 不要依赖 ALTER SESSION SET CURRENT_SCHEMA 来绕过 schema 限定 —— 它不改变权限校验的 owner 上下文
  • OceanBase V4.3.5 中,GRANT OPTION 和 WITH ADMIN OPTION 行为与 Oracle 严格对齐,但角色继承链更敏感,建议少嵌套角色

权限链条比看上去长:从登录、到读基表、再到建视图,每一步都卡在具体对象上,而不是笼统的“有没有权限”。最容易漏的是基表的 SELECT,而不是 CREATE VIEW 本身。

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

2023.08.16

921

5

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

2023.09.15

2593

5

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

2023.09.18

2630

5

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

2023.09.19

1489

3

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

2023.09.19

2113

7

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

2023.09.19

2789

4

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4329

19

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.08

237

5

oracle四舍五入怎么操作
oracle四舍五入怎么操作

oracle四舍五入操作可以使用ROUND函数来实现,其语法为“ROUND(number, decimal_places)”,其中,number是要进行四舍五入的数值,decimal_places是指定的小数位数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.14

726

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程