本文档风哥主要介绍Oracle PDB操作系统认证相关知识,包括PDB操作系统认证的概念、PDB操作系统认证的类型、PDB操作系统认证的配置、PDB操作系统认证用户创建、PDB操作系统认证验证、PDB操作系统认证故障处理等内容,由风哥教程参考Oracle官方文档Security内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB操作系统认证的概念
Oracle PDB操作系统认证(OS Authentication)是一种基于操作系统用户身份的数据库认证方式。通过操作系统认证,用户可以使用操作系统用户名和密码直接登录到Oracle数据库,无需单独维护数据库用户密码。这种方式简化了用户管理,提高了安全性,特别适合于企业环境中的集中式用户管理。更多视频教程www.fgedu.net.cn
- 基于操作系统用户身份认证
- 无需维护数据库用户密码
- 支持本地操作系统用户和域用户
- 支持外部认证和代理认证
- 提高安全性和管理效率
1.2 PDB操作系统认证的类型
Oracle PDB操作系统认证的类型包括:
- 外部认证(External Authentication):使用操作系统用户直接登录数据库
- 代理认证(Proxy Authentication):使用操作系统用户代理登录到其他数据库用户
- 本地操作系统认证:使用本地操作系统用户认证
- 域操作系统认证:使用域用户认证(Windows Active Directory)
- Kerberos认证:使用Kerberos协议进行认证
1.3 PDB操作系统认证的优势
Oracle PDB操作系统认证的优势:
- 简化用户管理:无需维护数据库用户密码
- 提高安全性:利用操作系统安全机制
- 集中管理:通过操作系统或域集中管理用户
- 减少密码泄露风险:无需在数据库中存储密码
- 符合企业策略:符合企业统一认证策略
Part02-生产环境规划与建议
2.1 PDB操作系统认证规划
Oracle PDB操作系统认证规划要点:
– 认证方式选择:外部认证、代理认证
– 操作系统用户管理:本地用户、域用户
– 权限分配:最小权限原则
– 安全策略:密码策略、账户锁定策略
# 操作系统认证配置
– 参数配置:OS_AUTHENT_PREFIX、REMOTE_OS_AUTHENT
– 用户创建:CREATE USER … IDENTIFIED EXTERNALLY
– 权限授予:GRANT CONNECT, RESOURCE TO …
– 连接配置:TNS配置、SQLNET配置
# 操作系统认证测试
– 本地连接测试:sqlplus /
– 远程连接测试:sqlplus user@pdb
– 代理连接测试:sqlplus user[proxy_user]@pdb
– 权限验证测试:验证用户权限
2.2 PDB操作系统认证安全策略
Oracle PDB操作系统认证安全策略:
- 最小权限原则:只授予必要的权限
- 定期审计:审计操作系统认证用户的操作
- 账户管理:定期清理不用的操作系统用户
- 密码策略:操作系统用户密码策略
- 网络安全:使用加密连接
– 禁用不必要的认证方式
– 限制远程操作系统认证
– 启用审计功能
– 使用加密连接
– 定期检查用户权限
2.3 PDB操作系统认证最佳实践
Oracle PDB操作系统认证最佳实践:
- 统一用户管理:使用操作系统或域统一管理用户
- 权限分离:不同用户使用不同权限
- 定期审计:审计操作系统认证用户的操作
- 文档记录:记录操作系统认证配置
- 测试验证:定期测试操作系统认证功能
Part03-生产环境项目实施方案
3.1 PDB操作系统认证配置
3.1.1 配置操作系统认证参数
SQL> show parameter os_authent_prefix;
NAME TYPE VALUE
———————————— ———– ——————————
os_authent_prefix string ops$
SQL> show parameter remote_os_authent;
NAME TYPE VALUE
———————————— ———– ——————————
remote_os_authent boolean FALSE
# 2. 配置操作系统认证前缀
SQL> alter system set os_authent_prefix=” scope=spfile;
System altered.
# 3. 启用远程操作系统认证(谨慎使用)
SQL> alter system set remote_os_authent=TRUE scope=spfile;
System altered.
# 4. 重启数据库使参数生效
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Database mounted.
Database opened.
# 5. 验证参数配置
SQL> show parameter os_authent_prefix;
NAME TYPE VALUE
———————————— ———– ——————————
os_authent_prefix string
SQL> show parameter remote_os_authent;
NAME TYPE VALUE
———————————— ———– ——————————
remote_os_authent boolean TRUE
3.1.2 配置操作系统用户
$ sudo useradd -m oracle_admin
# 2. 设置用户密码
$ sudo passwd oracle_admin
# 3. 配置用户环境变量
$ su – oracle_admin
$ vi .bash_profile
# 添加以下内容
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH
# 4. 使环境变量生效
$ source .bash_profile
# 5. 验证环境变量
$ echo $ORACLE_HOME
/oracle/app/oracle/product/19c/dbhome_1
$ echo $ORACLE_SID
FGEDUDB
3.2 PDB操作系统认证用户创建
3.2.1 创建外部认证用户
$ sqlplus / as sysdba
SQL> alter session set container=CDB$ROOT;
Session altered.
# 2. 创建外部认证用户
SQL> create user oracle_admin identified externally;
User created.
# 3. 授予必要权限
SQL> grant create session to oracle_admin;
Grant succeeded.
SQL> grant connect, resource to oracle_admin;
Grant succeeded.
# 4. 验证用户创建
SQL> select username, account_status, authentication_type, external_name
from dba_users
where username = ‘ORACLE_ADMIN’;
USERNAME ACCOUNT_STATUS AUTHENTICATION_TYPE EXTERNAL_NAME
———- ————– ——————- ————
ORACLE_ADMIN OPEN EXTERNAL oracle_admin
# 5. 在PDB中创建用户
SQL> alter session set container=SALESPDB;
Session altered.
SQL> create user oracle_admin identified externally;
User created.
SQL> grant create session, connect, resource to oracle_admin;
Grant succeeded.
# 6. 验证PDB用户
SQL> select username, account_status, authentication_type, external_name
from dba_users
where username = ‘ORACLE_ADMIN’;
USERNAME ACCOUNT_STATUS AUTHENTICATION_TYPE EXTERNAL_NAME
———- ————– ——————- ————
ORACLE_ADMIN OPEN EXTERNAL oracle_admin
3.2.2 创建代理认证用户
SQL> alter session set container=SALESPDB;
Session altered.
SQL> create user app_user identified by app_password;
User created.
SQL> grant create session, connect, resource to app_user;
Grant succeeded.
# 2. 创建外部认证用户并授予代理权限
SQL> create user oracle_admin identified externally;
User created.
SQL> grant create session to oracle_admin;
Grant succeeded.
# 3. 授予代理权限
SQL> alter user app_user grant connect through oracle_admin;
User altered.
# 4. 验证代理权限
SQL> select proxy, client from proxy_users where proxy = ‘ORACLE_ADMIN’;
PROXY CLIENT
———- ———-
ORACLE_ADMIN FGFGFGAPP_USER
# 5. 授予特定角色的代理权限
SQL> alter user app_user grant connect through oracle_admin with role dba;
User altered.
# 6. 验证角色代理权限
SQL> select proxy, client, roles from proxy_users where proxy = ‘ORACLE_ADMIN’;
PROXY CLIENT ROLES
———- ———- ———-
ORACLE_ADMIN FGFGFGAPP_USER DBA
3.3 PDB操作系统认证验证
3.3.1 验证外部认证
$ su – oracle_admin
# 2. 使用操作系统认证连接到CDB
$ sqlplus /
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0
SQL> show user;
USER is “ORACLE_ADMIN”
SQL> select sys_context(‘USERENV’, ‘SESSION_USER’) as session_user,
sys_context(‘USERENV’, ‘AUTHENTICATION_TYPE’) as auth_type,
sys_context(‘USERENV’, ‘AUTHENTICATION_METHOD’) as auth_method
from dual;
SESSION_USER AUTH_TYPE AUTH_METHOD
————— ————– ————–
ORACLE_ADMIN OS PASSWORD
# 3. 连接到PDB
SQL> alter session set container=SALESPDB;
Session altered.
SQL> show user;
USER is “ORACLE_ADMIN”
# 4. 验证连接信息
SQL> select sys_context(‘USERENV’, ‘CON_NAME’) as container_name,
sys_context(‘USERENV’, ‘SESSION_USER’) as session_user,
sys_context(‘USERENV’, ‘AUTHENTICATION_TYPE’) as auth_type
from dual;
CONTAINER_NAME SESSION_USER AUTH_TYPE
————— ————– ————–
SALESPDB ORACLE_ADMIN OS
3.3.2 验证代理认证
$ sqlplus oracle_admin[app_user]@SALESPDB
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0
SQL> show user;
USER is “FGFGFGAPP_USER”
# 2. 验证代理信息
SQL> select sys_context(‘USERENV’, ‘SESSION_USER’) as session_user,
sys_context(‘USERENV’, ‘PROXY_USER’) as proxy_user,
sys_context(‘USERENV’, ‘AUTHENTICATION_TYPE’) as auth_type
from dual;
SESSION_USER PROXY_USER AUTH_TYPE
————— ————– ————–
FGFGFGAPP_USER ORACLE_ADMIN OS
# 3. 验证权限
SQL> select * from session_roles;
ROLE
——————————–
CONNECT
RESOURCE
DBA
# 4. 测试操作
SQL> create table test_table (id number);
Table created.
SQL> insert into test_table values (1);
1 row created.
SQL> commit;
Commit complete.
Part04-生产案例与实战讲解
4.1 PDB操作系统认证配置案例
在生产环境中配置PDB操作系统认证的完整案例:
4.1.1 场景描述
某企业需要为多个PDB配置操作系统认证,管理员使用统一的操作系统用户管理多个PDB的数据库用户。
4.1.2 配置步骤
$ sudo useradd -m dba_user
$ sudo passwd dba_user
# 2. 配置环境变量
$ su – dba_user
$ vi .bash_profile
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH
$ source .bash_profile
# 3. 配置数据库参数
$ sqlplus / as sysdba
SQL> alter system set os_authent_prefix=” scope=spfile;
SQL> alter system set remote_os_authent=TRUE scope=spfile;
SQL> shutdown immediate;
SQL> startup;
# 4. 在CDB中创建外部认证用户
SQL> create user dba_user identified externally;
SQL> grant create session, connect, resource to dba_user;
SQL> grant sysdba to dba_user;
# 5. 在各个PDB中创建外部认证用户
SQL> alter session set container=SALESPDB;
SQL> create user dba_user identified externally;
SQL> grant create session, connect, resource to dba_user;
SQL> alter session set container=HRPDB;
SQL> create user dba_user identified externally;
SQL> grant create session, connect, resource to dba_user;
SQL> alter session set container=FINANCEPDB;
SQL> create user dba_user identified externally;
SQL> grant create session, connect, resource to dba_user;
# 6. 验证配置
$ sqlplus /
SQL> show user;
USER is “DBA_USER”
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
———- ———-
PDB$SEED READ ONLY
SALESPDB READ WRITE
HRPDB READ WRITE
FINANCEPDB READ WRITE
# 7. 测试连接到各个PDB
SQL> alter session set container=SALESPDB;
SQL> select * from v$version where rownum = 1;
BANNER
—————————————————————-
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
SQL> alter session set container=HRPDB;
SQL> select * from v$version where rownum = 1;
BANNER
—————————————————————-
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
4.2 PDB操作系统认证故障处理
在PDB操作系统认证过程中可能遇到的故障及处理方法:
4.2.1 故障现象:ORA-01017无效的用户名/密码
$ sqlplus /
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
# 分析步骤
# 1. 检查当前操作系统用户
$ whoami
oracle_user
# 2. 检查数据库中是否存在对应的外部认证用户
$ sqlplus / as sysdba
SQL> select username, account_status, authentication_type, external_name
from dba_users
where authentication_type = ‘EXTERNAL’;
USERNAME ACCOUNT_STATUS AUTHENTICATION_TYPE EXTERNAL_NAME
———- ————– ——————- ————
DBA_USER OPEN EXTERNAL dba_user
# 3. 检查操作系统用户名是否匹配
# 发现操作系统用户名是oracle_user,但数据库外部用户名是dba_user
# 4. 解决方案:创建对应的外部认证用户
SQL> create user oracle_user identified externally;
User created.
SQL> grant create session, connect, resource to oracle_user;
Grant succeeded.
# 5. 验证用户创建
SQL> select username, account_status, authentication_type, external_name
from dba_users
where username = ‘ORACLE_USER’;
USERNAME ACCOUNT_STATUS AUTHENTICATION_TYPE EXTERNAL_NAME
———- ————– ——————- ————
ORACLE_USER OPEN EXTERNAL oracle_user
# 6. 测试连接
$ sqlplus /
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0
SQL> show user;
USER is “ORACLE_USER”
# 7. 预防措施
# – 确保操作系统用户名与数据库外部用户名匹配
# – 统一用户命名规范
# – 定期检查外部认证用户状态
4.2.2 故障现象:ORA-01031权限不足
$ sqlplus /
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
# 分析步骤
# 1. 检查操作系统用户
$ whoami
dba_user
# 2. 检查数据库外部认证用户
$ sqlplus / as sysdba
SQL> select username, account_status, authentication_type
from dba_users
where username = ‘DBA_USER’;
USERNAME ACCOUNT_STATUS AUTHENTICATION_TYPE
———- ————– ——————-
DBA_USER OPEN EXTERNAL
# 3. 检查用户权限
SQL> select grantee, privilege from dba_sys_privs where grantee = ‘DBA_USER’;
no rows selected
SQL> select grantee, granted_role from dba_role_privs where grantee = ‘DBA_USER’;
no rows selected
# 4. 发现用户没有创建会话权限
# 5. 解决方案:授予必要权限
SQL> grant create session to dba_user;
Grant succeeded.
SQL> grant connect, resource to dba_user;
Grant succeeded.
# 6. 验证权限
SQL> select grantee, privilege from dba_sys_privs where grantee = ‘DBA_USER’;
GRANTEE PRIVILEGE
———- —————————————-
DBA_USER CREATE SESSION
SQL> select grantee, granted_role from dba_role_privs where grantee = ‘DBA_USER’;
GRANTEE GRANTED_ROLE
———- ——————–
DBA_USER CONNECT
DBA_USER RESOURCE
# 7. 测试连接
$ sqlplus /
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0
SQL> show user;
USER is “DBA_USER”
# 8. 预防措施
# – 创建外部认证用户时立即授予必要权限
# – 定期检查用户权限
# – 使用最小权限原则
4.3 PDB操作系统认证优化
优化PDB操作系统认证配置的最佳实践:
4.3.1 优化操作系统认证配置
SQL> alter system set os_authent_prefix=” scope=spfile;
SQL> alter system set remote_os_authent=FALSE scope=spfile;
# 2. 创建操作系统用户组
$ sudo groupadd dba_group
$ sudo useradd -m -g dba_group dba_user1
$ sudo useradd -m -g dba_group dba_user2
# 3. 创建外部认证用户
SQL> create user dba_user1 identified externally;
SQL> create user dba_user2 identified externally;
# 4. 授予不同权限
SQL> grant create session, connect, resource to dba_user1;
SQL> grant create session, connect, resource, dba to dba_user2;
# 5. 创建代理认证用户
SQL> create user app_user identified by app_password;
SQL> grant create session, connect, resource to app_user;
SQL> alter user app_user grant connect through dba_user1;
SQL> alter user app_user grant connect through dba_user2 with role dba;
# 6. 配置审计
SQL> audit session whenever successful;
SQL> audit session whenever not successful;
# 7. 验证审计
SQL> select username, action_name, returncode, timestamp
from dba_audit_session
where username in (‘DBA_USER1’, ‘DBA_USER2’, ‘FGFGFGAPP_USER’)
order by timestamp desc;
USERNAME ACTION_NAME RETURNCODE TIMESTAMP
———- ————— ———– ———-
DBA_USER1 LOGON 0 31-MAR-26
DBA_USER2 LOGON 0 31-MAR-26
FGFGFGAPP_USER LOGON 0 31-MAR-26
# 8. 监控操作系统认证连接
SQL> select username, osuser, machine, program, logon_time
from v$session
where username in (‘DBA_USER1’, ‘DBA_USER2’, ‘FGFGFGAPP_USER’);
USERNAME OSUSER MACHINE PROGRAM LOGON_TIME
———- ———- ————- ————— ———-
DBA_USER1 dba_user1 dba-server1 sqlplus@dba-serv 31-MAR-26
DBA_USER2 dba_user2 dba-server2 sqlplus@dba-serv 31-MAR-26
FGFGFGAPP_USER dba_user1 dba-server1 sqlplus@dba-serv 31-MAR-26
Part05-风哥经验总结与分享
5.1 PDB操作系统认证总结
Oracle PDB操作系统认证是企业环境中的常用认证方式,具有以下特点:
- 简化用户管理:无需维护数据库用户密码
- 提高安全性:利用操作系统安全机制
- 集中管理:通过操作系统或域集中管理用户
- 减少密码泄露风险:无需在数据库中存储密码
- 符合企业策略:符合企业统一认证策略
5.2 PDB操作系统认证检查清单
Oracle PDB操作系统认证检查清单:
- 配置检查:检查操作系统认证参数配置
- 用户检查:检查外部认证用户创建和权限
- 连接检查:检查操作系统认证连接是否正常
- 权限检查:检查用户权限是否符合最小权限原则
- 审计检查:检查审计配置和审计日志
- 监控检查:检查操作系统认证连接监控
5.3 PDB操作系统认证工具推荐
Oracle PDB操作系统认证管理工具推荐:
- SQL*Plus:命令行工具,用于配置和测试
- SQL Developer:图形化工具,用于用户管理
- Enterprise Manager:企业级管理工具
- Oracle Audit Vault:审计管理工具
- Oracle Database Vault:数据库安全工具
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
