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/SHUTDOWNALTER DATABASE任何操作CREATE DATABASE/DROP DATABASEARCHIVELOG/NOARCHIVELOGRECOVER数据库- 包含
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/SHUTDOWNALTER DATABASE(MOUNT/OPEN等)ARCHIVELOG/NOARCHIVELOGRECOVER DATABASE- 不能访问用户数据(除 SYS 拥有的)
5.2 与 SYSDBA 对比
| 操作 | SYSDBA | SYSOPER |
|---|---|---|
| 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 操作 |
| SYSDG | Data Guard | DG Broker |
| SYSKM | 密钥管理 | TDE 操作 |
| SYSASM | ASM 管理 | 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. 最佳实践总结
- 不用 SYS 做日常:用专用管理员
- SYSDBA 谨慎授予:仅关键 DBA
- 使用 SYSOPER 做启停:限制范围
- 定期修改 SYS 密码:安全合规
- 密码文件安全:限制权限
- 审计 SYSDBA 操作:合规要求
- DBA 组严格控制:仅授权人员
- 多租户分级管理:CDB/PDB 分离
- 备份密码文件:与 SPFILE 一起
- 使用 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/