Oracle数据库支持多种用户认证的方式,例如:密码认证、生物统计学验证、证书验证和标记验证,而在认证管理员用户和普通用户时又有一定区别。视频讲解如下:
下面分别进行介绍。
一、 验证数据库用户的方式
用户、设备或其它实体的身份要使用数据库中数据、资源或者调用数据库的应用程序,需要进行身份的验证。通过对该身份进行验证可建立一种信任关系,从而可进一步执行交互式操作。通过验证可将访问和操作与特定的身份联系起来,从而实现操作的可靠性。完成验证后,验证流程可允许或限制该实体许可的访问和操作的级别。创建用户时,必须确定要使用的验证方法,以后可修改此方法。Oracle支持三种不同的用户验证方式:密码口令验证、全局验证和外部验证。
- 密码口令验证
该认证方式又称为Oracle数据库验证,创建的每一个用户都有一个关联密码口令。当用户尝试登陆数据库时,必须提供这个密码口令。数据库管理员可以在设置用户密码口令时,可以使其立即失效。这样会强制用户在首次登录后更改密码口令。
密码口令认证是最常用的数据库用户验证方式。
- 全局验证
通过全局验证可以使用生物统计学、x509 证书、标记设备和Oracle Internet Directory来识别用户。使用这种方式的认证,需要外部设备的支持。
- 外部验证
外部验证是通过使用宿主机的操作系统进行验证。用户在登陆Oracle数据库时,可以不提供用户名和密码口令而直接连接到Oracle数据库。Oracle数据库的SYS用户采用的就是这样的认证方式。使用外部验证时,数据库依赖于宿主机的操作系统或网络提供的验证服务来限制对数据库帐户的访问。
要使用Oracle数据库的外部认证,需要设置OS_AUTHENT_PREFIX的初始化参数,此参数的默认值为ops$。Oracle数据库会在每个用户的操作系统帐户名之前添加此前缀。当用户尝试建立连接时,Oracle数据库会将带有该前缀的用户名与数据库中的Oracle用户名进行比较。如果数据库中存在这样的一个对应用户,则Oracle允许该用户建立连接。
下面通过一个具体的示例来演示如何使用Oracle的外部认证登录数据库。
由于从Oracle 12c开始引入了容器数据库,建议使用12c以前的版本来进行测试。这里将使用Oracle 11gR2的版本来验证数据库用户的外部验证。
(1)查看当前CentOS操作系统的用户。
whoami # 输出的信息如下: oracle
(2)使用SYS用户登录Oracle,并查看初始化参数os_authent_prefix。
SQL> show parameter os_authent_prefix NAME TYPE VALUE --------------------------------------- ---------- ----------------- os_authent_prefix string ops$
(3)创建以ops$前缀开头的本地用户
SQL> create user ops$oracle identified by externally;
(4)给ops$oracle用户授权允许它登录并使用数据库
SQL> grant connect,resource to ops$oracle;
(5)直接使用sqlplus登录数据库。
sqlplus /
(6)查看当前登录的用户信息。
SQL> show user # 输出的信息如下: USER is "OPS$ORACLE"
二、 【实战】数据库管理员的认证
默认情况下,在UNIX和Linux操作系统中Oracle数据库管理员属于DBA的操作系统组,该组中的用户具有创建和删除数据库文件所需的权限。如果当前操作系统的用户就是Oracle数据库管理员,那么登录数据库可以直接使用操作系统验证。此时,用户不需要提供的用户名和密码口令直接进行登录。
操作系统验证优先于密码口令验证。特别是,如果您是操作系统中 OSDBA 或 OSOPER 组的成员,而且以 SYSDBA 或 SYSOPER 身份进行连接,则会使用关联的管理权限为您建立连接,不管您指定的用户名和口令是什么。
下面通过具体的步骤来验证数据库管理员的认证登录方式。
(1)查看当前操作系统的用户名。
whoami # 输出的信息如下: oracle
(2)查看当前操作系统用户的组信息。
cat /etc/group | grep oracle # 输出的信息如下: dba:x:1001:oracle asmdba:x:1002:oracle backupdba:x:1003:oracle dgdba:x:1004:oracle kmdba:x:1005:oracle racdba:x:1006:oracle oper:x:1007:oracle
(3)使用管理员登录数据库时,不提供用户名和密码。登录后查看当前登录的用户。
sqlplus / as sysdba SQL> show user # 输出的信息如下: USER is "SYS"
(4)使用管理员登录数据库时,提供正确的用户名,但密码是错误的。登录后查看当前登录的用户。
sqlplus sys/asjfklf as sysdba SQL> show user # 输出的信息如下: USER is "SYS"
(5)使用管理员登录数据库时,提供错误的用户名和密码。登录后查看当前登录的用户。
sqlplus afsalkj/fdsaflka as sysdba SQL> show user # 输出的信息如下: USER is "SYS"
(6)将用户oracle从操作系统的dba组中删除。即:从文件/etc/group中删除下面的语句。
dba:x:1001:oracle
(7)重复第(3)步到第(5)步的操作,此时将发现无法登录Oracle数据库。