Oracle中不存在DEFAULT权限,所谓DEFAULT实为DEFAULT ROLE(控制登录后自动激活的角色)、DEFAULT TABLESPACE等存储属性,或误将MySQL的PROXY权限与Oracle的GRANT CONNECT THROUGH机制混淆。
oracle里没有default权限这个概念,你看到的其实是mysql的proxy权限机制,它和oracle的connect through完全不是一回事。
Oracle中根本没有DEFAULT权限这种东西
Oracle权限体系里不存在叫DEFAULT的权限类型。如果你在文档或报错里看到DEFAULT,大概率是误读了以下几种情况之一:
- 把
DEFAULT ROLE(默认角色)当成了“默认权限”——这只是控制用户登录后自动激活哪些角色,不等于授予权限本身 - 把
DEFAULT TABLESPACE或DEFAULT TEMPORARY TABLESPACE这类存储属性当成权限 - 混淆了MySQL的
PROXY权限语法(比如GRANT PROXY ON 'u'@'h' TO 'p'@'h')和Oracle的GRANT CONNECT THROUGH
ALTER USER ... GRANT CONNECT THROUGH才是Oracle的代理机制
Oracle用GRANT CONNECT THROUGH实现类似MySQL PROXY的效果,但语义和行为完全不同:
- 它不改变会话的权限上下文:被代理用户(如
app_user)的权限不会自动生效,连接仍以代理用户身份运行 - 它只是允许代理用户通过
CONNECT app_user[proxy_user]方式建立连接,后续所有操作仍受代理用户自身权限约束 - 不触发身份切换,也不影响审计日志中的
OS_USER、AUTHENTICATED_IDENTITY等字段 - 必须配合客户端显式使用
CONNECT username[proxy]语法,否则无效
常见错误现象和踩坑点
执行ALTER USER proxy_user GRANT CONNECT THROUGH app_user后仍连不上?大概率是下面这些原因:
阿里百炼大模型平台多人共享账号用量统计代理服务。解决公司共用账号时无法区分个人用量的问题。适用场景:1)部署用量统计代理;2)统计多人Token用量和调用次数;3)管理大模型API调用配额。
- 没在连接字符串里写方括号:
sqlplus proxy_user[app_user]/pwd@db—— 少了[app_user]就只是普通登录 -
app_user账户被锁、过期或密码过期,GRANT CONNECT THROUGH不绕过这些检查 - 代理用户
proxy_user本身没被授予CREATE SESSION,光有CONNECT THROUGH不能建连接 - 数据库参数
os_authent_prefix或remote_os_authent被误启用,干扰了认证路径 - 用JDBC时没加
oracle.jdbc.thin.forceConnectThrough=true参数,驱动默认忽略方括号语法
真正需要“以另一用户身份执行SQL并受其权限约束”的场景,在Oracle里得靠应用层自己做连接池隔离,或者用DBMS_SESSION.SET_ROLE + 角色切换——但那和代理登录是两回事。别硬套MySQL的PROXY逻辑去理解Oracle。










