Oracle 数据库用户管理

1.1、创建用户

Oracle 数据库中创建用户的语法有了显著增强,支持更多安全选项。

sql 复制代码
-- 基础创建用户
CREATE USER hr_user IDENTIFIED BY "Hr@2024!Secure"
  DEFAULT TABLESPACE users
  TEMPORARY TABLESPACE temp
  QUOTA 500M ON users
  ACCOUNT UNLOCK
  PASSWORD EXPIRE;

-- 强制密码区分大小写
ALTER SYSTEM SET sec_case_sensitive_logon = TRUE;

-- 创建用户时指定 Profile
CREATE USER fin_user IDENTIFIED BY "Fin@2024!Strong"
  PROFILE fin_profile
  DEFAULT TABLESPACE fin_ts
  QUOTA UNLIMITED ON fin_ts;

-- 创建时指定认证方式
-- OS 认证
CREATE USER os_user IDENTIFIED EXTERNALLY;

-- LDAP 认证
CREATE USER ldap_user IDENTIFIED GLOBALLY AS 'CN=John,OU=Dev,DC=corp';

-- Kerberos 认证
CREATE USER kerb_user IDENTIFIED GLOBALLY AS 'john@CORP.EXAMPLE.COM';

1.2、用户属性管理

Oracle 用户的关键属性包括:

|--------------------------|------------------------------|
| 属性 | 说明 |
| USERNAME | 用户名,CDB 中公共用户需以 C## 开头 |
| IDENTIFIED BY | 密码认证,12c 默认区分大小写 |
| DEFAULT TABLESPACE | 默认表空间,存储用户创建的对象 |
| TEMPORARY TABLESPACE | 临时表空间,用于排序和临时操作 |
| QUOTA | 表空间配额,限制用户可使用的空间 |
| PROFILE | 资源限制和密码策略配置文件 |
| ACCOUNT STATUS | 账户状态:LOCKED/UNLOCKED/EXPIRED |
| CONTAINER | ALL(公共用户)或 CURRENT(本地用户) |

1.3、用户认证方式

1.3.1、数据库认证(Database Authentication)

最常见的认证方式,用户密码存储在数据库中(12c 默认区分大小写)。

sql 复制代码
-- 查看密码大小写敏感设置
SELECT name, value FROM v$parameter
WHERE name = 'sec_case_sensitive_logon';

-- 修改密码
ALTER USER hr_user IDENTIFIED BY "NewP@ss2024" REPLACE "OldP@ss2023";

-- 锁定/解锁账户
ALTER USER hr_user ACCOUNT LOCK;
ALTER USER hr_user ACCOUNT UNLOCK;

-- 密码过期
ALTER USER hr_user PASSWORD EXPIRE;

1.3.2、操作系统认证(OS Authentication)

通过操作系统用户映射到数据库用户,常用于本地 DBA 管理。

sql 复制代码
-- 创建 OS 认证用户
CREATE USER ops$admin IDENTIFIED EXTERNALLY;

-- 使用 OS 认证连接(无需输入密码)
-- sqlplus /@orcl

-- 12c+ 增强:支持区分大小写的 OS 用户名
ALTER SYSTEM SET os_authent_prefix = 'OPS$';

1.3.3、目录服务认证(LDAP/Kerberos)

企业级环境中常用的集中认证方式。

sql 复制代码
-- 配置 LDAP 认证(需先配置 ldap.ora)
CREATE USER enterprise_user IDENTIFIED GLOBALLY AS
  'CN=Enterprise User,OU=Users,DC=corp,DC=com';

-- 配置 Kerberos 认证
-- sqlnet.ora 配置:
-- SQLNET.AUTHENTICATION_SERVICES = (KERBEROS5)
-- SQLNET.KERBEROS5_CONF = /etc/krb5.conf
-- SQLNET.KERBEROS5_REALM = CORP.COM
-- SQLNET.KERBEROS5_CONF_MIT = TRUE

CREATE USER kerberos_user IDENTIFIED GLOBALLY AS
  'user@CORP.COM';

1.3.4、多因素认证(MFA)- 12c 新特性

Oracle 12c 开始支持与第三方 MFA 集成,如 RSA、Gemalto 等。

sql 复制代码
-- 配置 RADIUS 认证(用于 MFA 集成)
-- sqlnet.ora 配置:
-- SQLNET.AUTHENTICATION_SERVICES = (RADIUS)
-- SQLNET.RADIUS_AUTHENTICATION = radius_server
-- SQLNET.RADIUS_AUTHENTICATION_PORT = 1812
-- SQLNET.RADIUS_SECRET = /opt/oracle/radius_secret

-- 创建 RADIUS 认证用户
CREATE USER mfa_user IDENTIFIED BY "InitP@ss"
  AUTHENTICATION USING 'radius';

实例:制造业用户生命周期管理体系

S --- Situation(场景):某大型制造企业有 200+ 个数据库用户,分布在 Oracle 的 8 个 PDB 中。用户使用简单密码,频繁出现暴力破解事件,且离职员工账户未及时清理。

T --- Task(任务):建立一套完整的用户生命周期管理机制,包含强密码策略、账户自动锁定、定期审计。

A --- Action(行动):

1、创建统一的密码验证函数,要求最少12位、大小写+数字+特殊字符、不能包含用户名。

2、创建 Profile 绑定到所有用户,设置密码历史10次、失败5次锁定30分钟。

3、编写 PL/SQL 脚本自动识别90天未登录的账户并锁定。

4、集成企业 LDAP,实现统一身份管理。

5、建立月度用户审计报告机制。

R --- Result(结果):密码暴力破解事件降至零,90天未活跃账户自动锁定覆盖率达100%,离职员工账户平均清理时间从7天缩短到当天,安全审计报告自动生成并邮件通知安全团队。

相关推荐
Decay__16 分钟前
14_MySQL 高可用与容灾架构 —— MGR / InnoDB Cluster / Keepalived+VIP / 双主 / 读写分离 / 两地三中心
运维·数据库·sql·mysql·架构
freejackman24 分钟前
【实战三】撕开脱敏盲区:深度解析 CASE WHEN 与窗口函数血缘
大数据·数据库·sql
codigger2 小时前
线上数据库连接池打满:从应急止损到架构根治的完整方案
数据库·sql·程序员
倔强的石头_3 小时前
集中式与分布式怎么选?我把手头11套系统重新过了一遍秤
数据库
挖掘狂人3 小时前
线上数据库连接池打满:从应急止损到架构根治的完整方案
数据库·sql·程序员
Rainmicro3 小时前
【无标题】
java·数据库·算法
Thanks_ks3 小时前
MySQL 的索引是什么?用图书馆的目录讲明白
数据库·sql·mysql·索引·联合索引·explain·慢查询优化
CoderYanger9 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
wafrdggh12 小时前
2026电商快递批量查询怎么用?固乔助手模板设置评测
大数据·数据库·小程序
一个天蝎座 白勺 程序猿12 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南
运维·数据库·oracle·kingbasees·金仓数据库