oracle数据库操作系统认证的原理

oracle数据库操作系统认证的原理 Oracle 信任操作系统来验证用户身份然后根据用户所属的操作系统组自动授予其对应的数据库角色。这个关联是在 Oracle 软件安装阶段 就确定下来的具体过程如下编译时的硬编码映射在 Oracle 软件安装的最后阶段会运行一个脚本 (root.sh) 来以 root 权限执行一些操作。其中一部分工作就是编译一个特定的 C 语言文件ORACLEHOME/rdbms/lib/config.c。编译后文件是ORACLE_HOME/rdbms/lib/config.c。编译后文件是ORACLEH​OME/rdbms/lib/config.c。编译后文件是ORACLE_HOME/rdbms/lib/config.o。最关键的一步root.sh 脚本随后会启动一个名为重链接 的过程。它会调用 make 工具执行一个特定的链接命令。这个命令会将许多个已有的 .o 目标文件包括刚刚新生成的 config.o与Oracle的库文件链接在一起最终生成一个完整的、全新的可执行文件。这个最终生成的可执行文件就是$ORACLE_HOME/bin/oracle这个 oracle 二进制文件就是Oracle数据库的核心进程所有数据库实例的后台进程如 PMON, SMON, DBWn 等都是它的派生进程。在config.c这个文件中定义了操作系统组与数据库角色之间的固定映射关系。你可以查看这个文件的内容来确认不同版本可能略有差异/* 示例性的 config.c 内容 */ss_dba_grpOSDBA;/* 映射到 SYSDBA 角色 */ss_oper_grpOSOPER;/* 映射到 SYSOPER 角色 */ss_backup_grpOSBACKUPDBA;/* 映射到 BACKUPDBA 角色 */ss_dg_grpOSDGDBA;/* 映射到 DGDBA 角色 */ss_km_grpOSKMDBA;/* 映射到 KMDBA 角色 */关键点OSBACKUPDBA 是一个 操作系统组的名称。BACKUPDBA 是一个 数据库角色的名称。这个编译过程就在两者之间建立了一个不可更改的、硬编码的链接。连接时的认证流程当一个操作系统用户比如 oraclebackup尝试以下列方式连接时sqlplus / as SYSBACKUP或者在使用RMAN时rman target /认证流程如下1、操作系统认证Oracle 客户端发现连接字符串是 /它就会请求操作系统内核“当前正在运行我的这个进程的用户oraclebackup是谁他属于哪些组”2、检查组成员操作系统返回用户 oraclebackup 所属的组列表其中包含了 OSBACKUPDBA。3、映射到角色Oracle 数据库接收到这个信息后查询其在编译时建立的映射表发现 OSBACKUPDBA 组应该被映射到 BACKUPDBA 这个数据库角色。4、授予权限并建立会话数据库自动为这个会话授予 BACKUPDBA 角色所包含的所有权限包括 SYSBACKUP然后成功建立连接。用户此时就拥有了 SYSBACKUP 的权限。