普通用户仅靠 CONNECT 和 RESOURCE 角色无法正常使用,因 CONNECT 仅含 CREATE SESSION,RESOURCE 缺少 CREATE VIEW、UNLIMITED TABLESPACE 及动态性能视图查询权,需额外授权才能建表、查视图或使用 PL/SQL Developer 统计功能。

普通用户无法仅靠 CONNECT 和 RESOURCE 角色“连接并正常使用”,根本原因不是连不上,而是连上后立刻卡在权限缺失——最典型表现是建表报 ORA-01536、查视图报 ORA-00942、甚至 PL/SQL Developer 自动统计功能直接报错。
CONNECT 角色只给 CREATE SESSION,不等于“能干活”
很多人以为 GRANT CONNECT TO user 就意味着“用户可以登录并操作”,其实 CONNECT 角色在 Oracle 12c 及以后版本中**只包含一个系统权限**:CREATE SESSION。它只负责放行登录动作,不附带任何对象创建或查询能力。一旦登录成功,执行 CREATE TABLE、SELECT FROM DUAL(某些配置下)、甚至 DESCRIBE 都可能失败——因为这些操作依赖其他权限,而 CONNECT 没给。
RESOURCE 角色不包含 CREATE VIEW、UNLIMITED TABLESPACE 或动态性能视图访问权
RESOURCE 看似全面,但它实际只打包了以下建模类权限:CREATE CLUSTER、CREATE INDEXTYPE、CREATE OPERATOR、CREATE PROCEDURE、CREATE SEQUENCE、CREATE TABLE、CREATE TRIGGER、CREATE TYPE。但关键缺项包括:
-
CREATE VIEW—— 必须显式GRANT CREATE VIEW TO user -
UNLIMITED TABLESPACE——RESOURCE在授予用户时**可能附带**该权限(取决于 Oracle 版本和补丁),但授予角色时不带;没它又没设QUOTA,建表立刻报ORA-01536 - 对
V_$session、V_$sesstat等动态性能视图的SELECT权限 —— PL/SQL Developer 启用自动统计时默认查这些视图,没权限就报“动态执行表不可访问”
为什么用 SYSTEM/SYSDBA 授权后还是不行?
即使你用 SYSTEM 用户执行了 GRANT CONNECT, RESOURCE TO app_user,仍可能失败,常见原因有:
- 用户被创建时没指定默认表空间,或默认表空间不存在/离线 → 登录后任何 DDL 都卡住
- 没执行
ALTER USER app_user DEFAULT ROLE ALL→ 即使授了角色,Oracle 默认不激活,得手动启用 - 数据库启用了
ORACLE_MAINTAINED = Y的安全策略(12c+),部分内置视图权限不再随角色自动继承 - 使用了密码区分大小写(
SEC_CASE_SENSITIVE_LOGON = TRUE),但客户端工具(如旧版 PL/SQL Developer)未正确传递大小写
真正让普通用户“连得上、干得了活”的最小可行授权,往往要补这三句:GRANT CREATE VIEW TO app_user、ALTER USER app_user QUOTA UNLIMITED ON users(或对应表空间)、GRANT SELECT ON V_$session TO app_user(按需)。别迷信 CONNECT + RESOURCE 是万能钥匙——它只是起点,不是终点。


















