数据库sys账号怎么登录?答案是:本地登录用sqlplus / as sysdba走操作系统认证,远程登录用sqlplus sys@IP:端口/服务名 as sysdba配合密码文件认证,别急着复制命令,不同场景下的坑差很多,下文拆开讲清楚。
数据库sys账号怎么登录:先分清两种认证机制
很多人上来就敲命令,报错ORA-01017才回头查原因,sys账号登录绕不开Oracle的认证设计,搞懂这个,后面所有操作都顺了。
- 操作系统认证:本机登录时,只要当前系统用户属于
dba组(Linux)或ORA_DBA组(Windows),就能直接以sys身份进去,不需要密码,这是本地维护最常用的方式。 - 密码文件认证:远程登录或非本地场景下,必须通过密码文件验证,密码文件存在于数据库服务器的
$ORACLE_HOME/dbs目录下,文件名类似orapw<ORACLE_SID>。
业内专家指出,相当一部分生产环境故障都是远程登录时密码文件与实例SID不匹配导致的,记住一个判断逻辑:本地优先操作系统认证,远程必须密码文件。
Linux服务器登录sys账号的完整命令
生产环境绝大多数是Linux服务器,登录前先确认环境变量,这一步能帮你避开大半问题。
第一步:切换用户并加载环境变量
su - oracle echo $ORACLE_SID
如果ORACLE_SID为空或者不对,sys登录会直接报LRM-00109或找不到监听,手动设置:
export ORACLE_SID=orcl
第二步:以sysdba身份登入
sqlplus / as sysdba
这条命令不询问密码,直接进入SQL命令行,看到SQL>提示符就说明成功了,验证当前身份:
show user;
输出应为USER is "SYS"。
第三步:多实例环境指定连接目标
一台服务器装了多个实例时,需要指定$ORACLE_SID或者用完整连接串:
sqlplus sys@orcl as sysdba
这种情况下Oracle会读取tnsnames.ora中的连接描述,或者按ORACLE_SID匹配,建议在/etc/oratab
里确认实例列表。
本地登录时常见报错怎么处理
| 报错信息 | 可能原因 | 解决方案 |
|---|---|---|
ORA-01017: invalid username/password |
系统用户不在dba组 | 用id命令检查用户组 |
ORA-12162: TNS:net service name is incorrectly specified |
ORACLE_SID未设置 | 重新export并确认大小写 |
SP2-0750: You must be a DBA to connect as SYSDBA |
权限不足 | 用root执行usermod -aG dba oracle |
ORA-12541: TNS:no listener |
监听未启动 | lsnrctl start启动监听 |
远程登录sys账号:密码文件是关键
远程登录必须带上as sysdba,同时要确保密码文件存在且与服务名匹配,常见做法是:
sqlplus sys/你的密码@192.168.1.100:1521/orcl as sysdba
这里的orcl是service_name而不是SID,很多初学的朋友在这里栽跟头,用SID连接要加SID=前缀:
sqlplus sys/你的密码@192.168.1.100:1521/SID=orcl as sysdba
远程登录需要先启用的配置
- 监听器必须运行中,用
lsnrctl status查看状态 sqlnet.ora里的SQLNET.AUTHENTICATION_SERVICES不要设置成NONE- 防火墙放行1521端口(或其他自定义端口)
tnsnames.ora中的服务名和远程实例的实际服务名一致
数据库服务器sys密码忘记怎么办
这个场景几乎每家DBA都遇到过,密码忘记了但操作系统还能登录,那就走本地认证重置密码:
sqlplus / as sysdba alter user sys identified by 新密码;
操作系统也进不去了?那就得通过密码文件重建来重置:
orapwd file=$ORACLE_HOME/dbs/orapworcl password=新密码 entries=10 force=y
重建密码文件后重启数据库(或动态重新加载)即可生效,注意:Oracle 12c以上版本密码区分大小写,设置时留意SEC_CASE_SENSITIVE_LOGON参数。
sys账号和普通账号的权限边界
很多文章讲登录方法,但对权限边界讲得含糊,我直接说清楚:sys和system不是一个级别,别搞混。
| 账号 | 角色 | 典型用途 |
|---|---|---|
| sys | 数据库超级管理员 | 启动/关闭实例、创建/删除表空间、更改归档模式 |
| system | 普通管理员 | 日常监控、创建业务账号、管理表空间 |
| scott | 示例业务账号 | 学习测试用,生产环境一般会删除 |
sys登录后能执行startup、shutdown等其他账号完全无权执行的命令,所以日常操作尽量用system或者专用业务账号,只有需要启停库、改归档模式、做数据库级别恢复时再登sys,这是数据库運维的基本职业习惯。
sysdba和sysoper的区别
连sys这个词,其实是在as sysdba和as sysoper之间选:
sysdba:拥有全部系统权限,包括alter database、drop database这类破坏性命令sysoper:只能启动关闭数据库、执行backup命令、做基础归档操作,不能查看业务数据
授权时要克制,不是所有运维人员都该拿sysdba。
GUI工具登录sys账号的操作路径
命令行不是唯一入口,如果你习惯用PL/SQL Developer或Navicat,操作路径不同但逻辑一致。
PL/SQL Developer连接步骤
- 打开登录窗口,用户名填
sys - 密码填密码文件的密码(本地也可以不填走操作系统的认证)
- 角色下拉框必须选
SYSDBA,这个最容易忘 - 数据库填
IP:端口/服务名,比如168.1.100:1521/orcl
Navicat连接步骤
Navicat的高版本支持Oracle,在连接配置里:
- 连接类型选
Basic - 服务名填
orcl或pdb1(取决于你连CDB还是PDB) - 高级标签页勾选
SYSDBA角色
PL/SQL Developer不勾选SYSDBA就直接报ORA-01017,Navicat不勾选SYSDBA则提示ORA-01031: insufficient privileges。
Oracle 12c及以上版本的多租户注意点
你要登录的是CDB还是PDB,决定了连接串怎么写,比如CDB里
alter session set container=pdb1能切换到PDB,但服务名都是单独配置的,直接连PDB的话:
sqlplus sys/密码@192.168.1.100:1521/pdb1 as sysdba
这一块很容易被忽视,12c推出多租户架构后,不少老DBA也在这里卡一阵子,先确认你用的是CDB还是非容器数据库,再决定登录方式。
安全加固:sys账号登录后的必要操作
登录只是第一步,生产环境怎么保护sys账号才是长期课题,以下几点是行业共识,也是等保测评里常见的检查项:
- 定期更换密码,并设置密码复杂度(至少12位,含大小写和特殊字符)
- 修改
sqlnet.ora设置SQLNET.ALLOWED_LOGON_VERSION=12,限制老版本客户端登录 - 开启审计:
audit sysdba by access;,记录所有sys登录行为 - 严格控制
dba组用户名单,离职员工立即移除
审计日志落地文件的路径在diag目录,默认$ORACLE_BASE/diag/rdbms/<SID>/<SID>/trace,查看登录记录,可以查v$session和audit_trail视图,企业环境里,sys账号的一切操作几乎都会被追溯,所以别拿root权限随便玩,这是生产事故的重灾区。
数据库sys账号登录常见问题解答
为什么sqlplus / as sysdba登录后显示空白,没有输出?
多半是环境变量没生效,ORACLE_HOME指向错误,或者当前用户不是oracle,检查echo $ORACLE_HOME是否指向正确的软件目录,还有一种情况是数据库正在启动中,等几秒再试。
远程登录sys报ORA-28009怎么办?
ORA-28009很典型:连接sys账号时必须指定SYSDBA或SYSOPER,解决方式:命令后面加上as sysdba;图形工具里把登录角色选为SYSDBA,这个报错不是密码问题,是连接方式不对。
MySQL的sys账号和Oracle的sys账号是一回事吗?
不是,MySQL的sys是一个数据库名字,不是账号;MySQL超级管理员是root,SQL Server的超级管理员是sa,网络上搜“数据库sys账号”多数指Oracle,但如果你实际用的是其他数据库,登录方式完全不同,建议先确认数据库类型再操作,避免浪费时间。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/662586.html








