给Oracle服务器新建用户名和密码,核心操作就是先用管理员身份登录SQLPlus,然后执行CREATE USER创建账号,再用GRANT赋予登录和操作权限,整个过程通常只需要两到三分钟。
动手前先想清楚这三件事
很多人第一次接触Oracle服务器,直接打开命令行就敲CREATE USER,结果报错一大堆,原因很简单:你没有明确自己的登录身份、目标环境和操作工具。
第一,确认登录身份。 新建用户必须用高权限账号操作,通常使用sys账号以SYSDBA身份登录,或者用system账号登录,普通用户没有创建账号的权限。
第二,确认目标环境。 Oracle 12c之后的版本引入了容器数据库(CDB)和可插拔数据库(PDB)的概念,大多数业务数据存放在PDB里,如果你登录的是CDB根容器,直接创建的用户可能带C##前缀,而且无法直接访问业务库。多数情况下,你需要先在SQLPlus里切换容器:
ALTER SESSION SET CONTAINER = 你的PDB名称;
第三,选好操作工具。 生产环境推荐直接用SQLPlus命令行,干净、稳定、没有图形界面依赖,如果你习惯可视化操作,用PL/SQL Developer或Oracle SQL Developer也能完成,但底层执行的本质还是SQL语句。
oracle创建用户并授权:从登录到验证的完整流程
这里给出一套在真实服务器上直接可用的操作步骤,假设你要给一个新入职的同事创建一个叫demo_user的账号,密码是Demo#2026。
第一步:登录Oracle数据库
在服务器命令行输入:
sqlplus / as sysdba
如果是远程连接,用:
sqlplus sys/密码@服务器IP:1521/服务名 as sysdba
登录成功后,界面上会显示SQL>提示符。
第二步:执行CREATE USER命令
CREATE USER demo_user IDENTIFIED BY "Demo#2026";
这条命令会创建一个叫demo_user的用户,密码是Demo#2026。注意:如果密码包含特殊字符,一定要用双引号括起来。
如果你需要指定默认表空间和临时表空间,可以写完整版:
CREATE USER demo_user IDENTIFIED BY "Demo#2026" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users;
第三步:授予登录和基本操作权限
新创建的用户什么都没有,连登录都不行,必须授权:
GRANT CONNECT, RESOURCE TO demo_user;
CONNECT:允许用户连接数据库。RESOURCE:允许用户创建表、视图、序列等对象,适合开发人员。
如果你是给业务应用账号授权,通常还要加上:
GRANT CREATE SESSION TO demo_user;
第四步:验证登录是否成功
退出当前会话,重新用新账号登录:
sqlplus demo_user/"Demo#2026"@服务器IP:1521/服务名
如果能看到SQL>提示符,说明创建成功。
oracle 19c创建用户命令详解:关键参数不能写错
Oracle 19c是目前国内企业使用相当普遍的版本,在19c里创建用户,不少细节和旧版本不太一样,这里逐一说明。
密码规则:不要用简单密码
Oracle 19c默认开启了密码复杂度验证,密码长度建议不少于8位,最好包含大写字母、小写字母和数字,如果密码过于简单,Oracle会直接拒绝执行,行业共识认为,生产环境密码至少要混合特殊字符,比如Admin#2026这种级别。
表空间设置:不设置也能用,但建议设置
如果不指定表空间,Oracle会使用USERS表空间,并且默认配额为0,也就是说用户无法创建任何表,很多人建完用户后无法建表,就是卡在这里。
建议在创建时指定配额:
CREATE USER demo_user IDENTIFIED BY "Demo#2026" DEFAULT TABLESPACE users QUOTA 100M ON users;
PDB还是CDB:搞错容器就白干
19c里如果登录的是CDB根容器,执行创建用户命令时会提示ORA-65096: 公用用户名或角色名无效,解决方式有两种:
- 切换到目标PDB:
ALTER SESSION SET CONTAINER = ORCLPDB1; - 使用
C##前缀创建公共用户:CREATE USER C##demo_user ...
据Oracle官方文档说明,绝大多数业务场景下都建议在PDB里创建普通用户,尽量避免在根容器下操作。
密码过期策略
默认配置下,Oracle用户的密码有有效期限制,通常是180天,密码过期后,用户登录会报ORA-28002或ORA-28001错误,如果你不希望频繁要求业务方改密码,可以在创建时指定:
CREATE USER demo_user IDENTIFIED BY "Demo#2026" PROFILE app_user_profile;
或者在创建后用ALTER USER调整:
ALTER USER demo_user PASSWORD EXPIRE;
该命令会强制用户首次登录时修改密码,如果你希望密码不过期,需要修改对应的Profile配置。
Oracle新建用户后无法登录的常见原因排查
实际操作中,很多人在服务器上创建完用户,兴冲冲地去连接,结果登录不了,行业共识认为,下面三个问题占了绝大多数情况。
ORA-01017:用户名或密码无效
这是最常见的报错,原因不外乎两种:密码写错,或者账号被锁定,如果你使用的是远程登录,还要检查网络服务名配置是否正确。
排查顺序:
- 在服务器本地用
sqlplus重试,排除网络因素。 - 检查大小写:Oracle密码是区分大小写的,
Demo#2026和demo#2026完全不同。 - 用管理员账号检查用户状态:
SELECT username, account_status, lock_date FROM dba_users WHERE username = 'DEMO_USER';
如果状态显示LOCKED,执行ALTER USER demo_user ACCOUNT UNLOCK;解锁。
ORA-01045:用户没有CREATE SESSION权限
登录时提示ORA-01045: user lacks CREATE SESSION privilege; logon denied,说明你的GRANT CONNECT没写,或者写错了对象,重新执行:
GRANT CONNECT TO demo_user;
网络连接超时或监听器无响应
这种情况跟用户本身没关系,是Oracle监听器的问题,检查监听服务是否启动:
lsnrctl status
如果监听没起来,执行lsnrctl start,防火墙和tnsnames.ora文件里的服务名也经常是罪魁祸首。
忘记密码怎么办:重置密码的正确操作
先说一个核心原则:Oracle数据库忘记密码,不需要卸载重装,只要你有SYSDBA权限,就能直接重置。
具体操作步骤:
sqlplus / as sysdba ALTER USER demo_user IDENTIFIED BY "NewPass#2026";
这条命令执行后,新密码立即生效,如果报ORA-28001: the password has expired,属于密码过期,同样用上面命令重置即可。
如果连sys账号的密码都忘了,处理方式会更复杂一些,需要修改服务器的oraPwd认证文件,通常由DBA在操作系统层面操作,一般建议在系统文件层面备份$ORACLE_HOME/dbs/目录下的密码文件。
重置密码还要注意一个细节:账号被锁定的情况下,重置密码不会自动解锁,需要额外执行:
ALTER USER demo_user ACCOUNT UNLOCK;
生产环境里,建议由DBA统一记录密码变更时间和原因,避免事后追责说不清楚。
关于Oracle数据库怎么新建用户名和密码的常见疑问
Q1:oracle新建用户后无法登录,但账号和密码都确认无误,是什么原因?
最可能是用户没有CREATE SESSION权限,或者服务名写错,用管理员身份登录后,执行GRANT CONNECT TO 用户名;,然后检查连接字符串里的服务名是否对应目标数据库,还有一种隐蔽情况:你连接的是CDB,而用户创建在某个PDB里,连接时必须指定该PDB的服务名。
Q2:Oracle 19c创建用户命令中,IDENTIFIED BY后的密码可以用数字开头吗?
可以,只要密码符合Oracle的复杂度要求,数字开头没有任何问题,但如果密码以数字开头且包含特殊字符,建议用双引号包住整个密码字符串,否则可能出现解析错误,生产环境密码建议混合字母、数字和特殊字符,不要用纯数字或连续递增序列。
Q3:生产环境给应用系统新建用户,应该授予哪些权限?
如果应用只需要读写业务表,授予CONNECT和RESOURCE角色即可,如果应用需要执行存储过程、触发器或其他程序单元,还需要补充GRANT EXECUTE ON 存储过程名 TO 用户名;,不建议直接授予DBA角色,DBA权限过大,一旦账号泄露,整个数据库都有风险,合理的做法是按模块最小授权,业务增长后再动态补充权限。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787386.html


