SYS / SYSTEM / SYSDBA / SYSOPER 角色区别

SYS / SYSTEM / SYSDBA / SYSOPER 角色区别

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 中 SYS 和 SYSTEM 是预定义用户,SYSDBA 和 SYSOPER 是特权角色[1]:

对象类型作用
SYS用户数据字典拥有者
SYSTEM用户管理工具拥有者
SYSDBA特权角色最高管理权限
SYSOPER特权角色操作管理权限

2. SYS 用户

2.1 角色

  • 数据字典拥有者:所有 SYS. 对象
  • 最高权限用户
  • 默认密码:change_on_install(必须修改)

2.2 拥有对象

-- 查询 SYS 拥有的对象数量
SELECT COUNT(*) FROM dba_objects WHERE owner='SYS';
-- 通常 50000+ 个对象

-- 关键字典基表
SELECT table_name FROM dba_tables 
WHERE owner='SYS' AND table_name LIKE '%$'
FETCH FIRST 20 ROWS ONLY;
-- USER$, OBJ$, FILE$, TS$, COL$, IND$, etc.

2.3 默认表空间

SELECT username, default_tablespace, temporary_tablespace
FROM dba_users WHERE username IN ('SYS','SYSTEM');
-- SYS: SYSTEM
-- SYSTEM: SYSTEM

3. SYSTEM 用户

3.1 角色

  • 管理工具拥有者:如 AWR、Enterprise Manager
  • 次要管理用户

3.2 拥有对象

SELECT COUNT(*) FROM dba_objects WHERE owner='SYSTEM';
-- 通常 200+ 个对象

-- 关键对象
SELECT object_name, object_type 
FROM dba_objects 
WHERE owner='SYSTEM' 
  AND object_type IN ('TABLE','VIEW')
FETCH FIRST 20 ROWS ONLY;
-- SQLPLUS_PRODUCT_PROFILE, DEF$_*, LOGMNR_*, MVIEW_*

3.3 默认密码

manager(必须修改)


4. SYSDBA 特权

4.1 权限范围

SYSDBA 拥有最高权限[1]:

  • STARTUP / SHUTDOWN
  • ALTER DATABASE 任何操作
  • CREATE DATABASE / DROP DATABASE
  • ARCHIVELOG / NOARCHIVELOG
  • RECOVER 数据库
  • 包含 WITH ADMIN OPTION 的所有系统权限
  • 可访问所有对象(绕过权限检查)

4.2 连接

# SYSDBA 连接
sqlplus sys/password@orcl AS SYSDBA
# 或本机
sqlplus / as sysdba

4.3 操作限制

SYSDBA 可执行:

-- 启动/关闭
STARTUP
SHUTDOWN IMMEDIATE

-- 数据库操作
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN RESETLOGS;

-- 用户管理
CREATE USER new_user IDENTIFIED BY ******
GRANT SYSDBA TO new_user;

5. SYSOPER 特权

5.1 权限范围

SYSOPER 权限较窄,主要用于运维操作[1]:

  • STARTUP / SHUTDOWN
  • ALTER DATABASE (MOUNT/OPEN等)
  • ARCHIVELOG / NOARCHIVELOG
  • RECOVER DATABASE
  • 不能访问用户数据(除 SYS 拥有的)

5.2 与 SYSDBA 对比

操作SYSDBASYSOPER
STARTUP/SHUTDOWN
ALTER DATABASE
RECOVER DATABASE
CREATE DATABASE
DROP DATABASE
访问用户数据
用户管理
修改参数

5.3 连接

# SYSOPER 连接
sqlplus sys/password@orcl AS SYSOPER
# 或专有用户
sqlplus oper_user/password@orcl AS SYSOPER

6. 12c+ 新增特权角色

6.1 SYSBACKUP

GRANT SYSBACKUP TO backup_user;
-- 备份恢复专用

6.2 SYSDG

GRANT SYSDG TO dg_user;
-- Data Guard 操作

6.3 SYSKM

GRANT SYSKM TO km_user;
-- 密钥管理(TDE)

6.4 SYSASM

GRANT SYSASM TO asm_user;
-- ASM 管理

6.5 特权对比

角色用途主要操作
SYSDBA最高管理全部
SYSOPER运维操作启停/恢复
SYSBACKUP备份RMAN 操作
SYSDGData GuardDG Broker
SYSKM密钥管理TDE 操作
SYSASMASM 管理ASM 实例

7. 认证方式

7.1 OS 认证

# dba 组成员可免密 SYSDBA
# /etc/group
dba:x:54322:oracle,admin_user

# 直接连接
sqlplus / as sysdba

7.2 密码文件认证

# 密码文件
$ORACLE_HOME/dbs/orapw$ORACLE_SID

# 远程连接
sqlplus sys/password@orcl as sysdba

7.3 查看

-- 查看特权用户
SELECT username, sysdba, sysoper, sysasm, sysbackup, sysdg, syskm
FROM v$pwfile_users;

详细内容见:Oracle 密码文件与 SYSDBA 认证


8. 授予/撤销特权

8.1 授予

-- 授予 SYSDBA
GRANT SYSDBA TO admin_user;

-- 授予 SYSOPER
GRANT SYSOPER TO oper_user;

-- 授予其他特权
GRANT SYSBACKUP TO backup_user;
GRANT SYSDG TO dg_user;

8.2 撤销

REVOKE SYSDBA FROM admin_user;
REVOKE SYSOPER FROM oper_user;

8.3 查看

SELECT username, sysdba, sysoper FROM v$pwfile_users;

9. 最佳实践

9.1 日常管理

  • 不用 SYS 做日常操作:创建专用管理员
  • 使用 SYSOPER 做运维:避免误操作
  • SYS 仅用于关键操作:建库、恢复

9.2 创建管理员

-- 创建管理员用户
CREATE USER dba_admin IDENTIFIED BY ******
  DEFAULT TABLESPACE users
  TEMPORARY TABLESPACE temp;

-- 授予 SYSDBA
GRANT SYSDBA TO dba_admin;

-- 授予 DBA 角色(普通管理权限)
GRANT DBA TO dba_admin;

9.3 多租户场景

-- CDB 级管理员
CREATE USER c##admin IDENTIFIED BY ****** DEFAULT TABLESPACE users;
GRANT SYSDBA TO c##admin CONTAINER=ALL;

-- PDB 级管理员
ALTER SESSION SET CONTAINER = salespdb;
CREATE USER admin IDENTIFIED BY ****** DEFAULT TABLESPACE users;
GRANT SYSDBA TO admin;

10. 常见坑与排错

10.1 ORA-01031: insufficient privileges

现象sqlplus / as sysdba 报错。

修复

# 1. 检查用户组
groups
# 应包含 dba

# 2. 检查 sqlnet.ora
cat $ORACLE_HOME/network/admin/sqlnet.ora
# SQLNET.AUTHENTICATION_SERVICES 应包含 NTS 或 ALL

10.2 ORA-01017: invalid username/password

现象:远程 SYSDBA 连接报错。

修复

# 1. 检查密码文件
ls -l $ORACLE_HOME/dbs/orapw*

# 2. 重建密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl password=****** entries=10 force=y

# 3. 检查 remote_login_passwordfile
sqlplus / as sysdba
SHOW PARAMETER remote_login_passwordfile;
-- 应为 EXCLUSIVE

10.3 SYS 用户被锁定

现象:SYS 登录报错。

修复

# 用 OS 认证登录
sqlplus / as sysdba

# 解锁
ALTER USER sys ACCOUNT UNLOCK;
ALTER USER sys IDENTIFIED BY ******

10.4 SYSDBA 操作未记录

现象:SYSDBA 操作无审计。

修复

-- 启用统一审计
ALTER SYSTEM SET audit_trail='DB,EXTENDED' SCOPE=SPFILE;

-- 审计 SYSDBA 操作
AUDIT SYSDBA BY ACCESS;

11. 最佳实践总结

  1. 不用 SYS 做日常:用专用管理员
  2. SYSDBA 谨慎授予:仅关键 DBA
  3. 使用 SYSOPER 做启停:限制范围
  4. 定期修改 SYS 密码:安全合规
  5. 密码文件安全:限制权限
  6. 审计 SYSDBA 操作:合规要求
  7. DBA 组严格控制:仅授权人员
  8. 多租户分级管理:CDB/PDB 分离
  9. 备份密码文件:与 SPFILE 一起
  10. 使用 12c+ 新角色:SYSBACKUP/SYSDG 等

12. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Administrative Privileges” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/administering-user-accounts-security.html

[2] Oracle Database Security Guide 19c, “Administrative Privileges” https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/