Oracle数据库用户安全策略功能介绍

时间:2021-07-22 00:45:27

一:如何创建用户
二:为用户指定profile配置文件
三:修改SYS用户密码注意事项
四:Oracle数据库内置密码保护是什么
五:如何查找具有默认密码的用户帐户
六:在默认配置文件Profile中配置密码设置
七:通过保护数据字典来限制系统权限
八:常用审计

一:如何创建用户

指定密码、默认表空间、表空间限额、临时表空间、PROFILE等。

Example 2-1 Creating a User Account with the CREATE SESSION Privilege

CREATE USER jward
 IDENTIFIED BY password
 DEFAULT TABLESPACE data_ts
 QUOTA 100M ON test_ts
 QUOTA 500K ON data_ts
 TEMPORARY TABLESPACE temp_ts
 PROFILE clerk;
GRANT CREATE SESSION TO jward;

用户连接数据库必要权限,CREATE SESSION。

用户访问 Oracle Enterprise Manager,必要权限SELECT ANY DICTIONARY。

用户名都是以大写存储在数据库中

SELECT USERNAME FROM ALL_USERS;
USERNAME
---------
JWARD

但是,如果将用户名括在双引号中,则使用名称的大小写区分来存储该名称。例如:

CREATE USER "jward" IDENTIFIED BY password;
SELECT USERNAME FROM ALL_USERS;
USERNAME
---------
jward
...

二:为用户指定profile配置文件

您可以在创建用户时指定配置文件。

配置文件是对数据库资源和密码访问数据库的一组限制。

如果未指定配置文件,则Oracle数据库将为用户分配默认配置文件。

创建PROFILE配置文件示例:

/**创建resource相关资源限制profile**/

CREATE PROFILE clerk LIMIT 
   SESSIONS_PER_USER          UNLIMITED 
   CPU_PER_SESSION            UNLIMITED 
   CPU_PER_CALL               3000 
   CONNECT_TIME               45 
   LOGICAL_READS_PER_SESSION  DEFAULT 
   LOGICAL_READS_PER_CALL     1000 
   PRIVATE_SGA                15K
   COMPOSITE_LIMIT            5000000;

创建了一个名为“clerk”的profile,并进行了如下限制:

1.对当前用户下会话的并发数不做限制;
2.执行sql时占用的cpu时间不做限制;
3.执行单条sql占用的cpu时间限制不超过30秒;
4.每个连接最长使用时间为45分钟;
5.每个会话中能够进行的逻辑数据块读使用默认值;
6.每次调用sql能够读取内存和磁盘中的数据块不超过1000个;
7.每个会话不能占用超过15KB的SGA空间;
8.每个会话的总资源消耗成本不能超过500万;
没有对连接空闲时间和密码进行限制,oracle将会使用默认profile进行限制。

查看每个用户会话的内存使用情况:

要查找每个用户会话的内存使用情况,请查询V$SSESSION视图。

以下查询列出了所有当前会话,显示了每个会话的Oracle数据库用户和当前用户全局区域(UGA)内存使用情况:

SELECT USERNAME, VALUE || 'bytes' "Current UGA memory"
   FROM V$SESSION sess, V$SESSTAT stat, V$STATNAME name
WHERE sess.SID = stat.SID
   AND stat.STATISTIC# = name.STATISTIC#
   AND name.NAME = 'session uga memory';

三:修改SYS用户密码注意事项

如果必须更改SYS用户密码,则应使用ORAPWD命令行实用程序创建包含要使用的密码的新密码文件。

不要使用ALTER USER语句或PASSWORD命令更改SYS用户密码。

注意以下事项:

SYS用户帐户被大多数内部递归SQL使用。

因此,如果您试图在数据库打开时使用ALTER USER语句更改此密码,则可能会导致死锁。

如果尝试使用ALTER USER更改SYS用户密码,

并且实例初始化参数REMOTE_LOGIN_PASSWORDFILE已设置为SHARED,则无法更改SYS密码。

ALTER USER语句失败,出现ORA-28046:SYS密码更改不允许错误。

Example 2-3 Using ORAPWD to Change the SYS User Password

orapwd file='orapworcl'
Enter password for SYS: new_password

四:Oracle数据库内置密码保护是什么?

Oracle数据库提供了一组内置密码保护,旨在保护用户的密码。这些密码保护如下:

1.密码加密

Oracle数据库在网络(客户端到服务器和服务器到服务器)连接期间使用高 级加密标准(AES)自动透明地加密密码,然后再通过网络发送。

2.密码复杂性检查

在默认安装中,Oracle数据库提供verify_function_11g密码验证功能,以确保新密码或更改后的密码足够复杂,

以防止入侵者通过猜测密码试图闯入系统。

您必须手动启用密码复杂性检查。

您可以进一步自定义用户密码的复杂性。

3.防止密码被破坏

如果用户尝试使用错误的密码多次登录Oracle数据库,Oracle数据库会延迟每次登录。

此保护适用于从不同IP地址或多个客户端连接进行的尝试。

之后,它会逐渐增加用户尝试另一个密码的时间,最长约为10秒。

如果用户输入了正确的密码,他或她就能成功登录,而不会有任何延迟。

此功能显著减少了入侵者在尝试登录时可以在固定时间段内尝试的密码数量。

失败的登录延迟会减慢每次失败的登录尝试,从而增加执行密码猜测攻击所需的总时间,因为此类攻击通常需要非常多的失败登录尝试。

4.密码强制区分大小写

密码区分大小写。

例如,如果将密码hPP5620qr输入为hPP5620qr或hPP5620qr,则该密码将失败。

在以前的版本中,密码不区分大小写。

5.使用安全哈希算法(SHA)加密哈希函数SHA-1哈希的密码。

Oracle数据库使用SHA-1验证器来验证用户密码并建立用户会话。

此外,它强制区分大小写,并将密码限制为160位。

使用SHA-1验证器的优点是,它通常由Oracle数据库客户使用,并在不强制网络升级的情况下提供更好的安全性。

它还遵守法规,要求使用强密码,并通过适当的强密码哈希算法进行保护。

五:如何查找具有默认密码的用户帐户

当您在Oracle database 11g Release 2(11.2)中创建数据库时,它的大多数默认帐户都被锁定,密码过期。

如果您已从早期版本的Oracle数据库升级,则您的用户帐户可能具有默认密码。

这些是在创建数据库时创建的默认帐户,例如HR、OE和SCOTT帐户。

为了提高安全性,请更改这些帐户的密码。

使用众所周知的默认密码可能会使您的数据库容易受到入侵者的攻击。

要查找使用默认密码的锁定和未锁定帐户,请使用SYSDBA权限登录SQL*Plus,然后查询DBA_USERS_WITH_DEFPWD数据字典视图。

例如,要查找具有默认密码的帐户的名称和帐户的状态:

SELECT d.username, u.account_status
FROM DBA_USERS_WITH_DEFPWD d, DBA_USERS u
WHERE d.username = u.username
ORDER BY 2,1;
USERNAME  ACCOUNT_STATUS
--------- ---------------------------
SCOTT     EXPIRED & LOCKED

然后更改DBA_USERS_WITH_DEFPWD视图列出的任何帐户的密码。

Oracle建议您不要为这些帐户分配以前版本的Oracle数据库中可能有的密码。

ALTER USER SCOTT ACCOUNT UNLOCK IDENTIFIED BY password;

六:在默认配置文件Profile中配置密码设置

概要文件是设置数据库资源限制的参数集合。

如果将配置文件分配给用户,则该用户不能超过这些限制。

您可以使用配置文件来配置数据库设置,例如每个用户的会话、日志记录和跟踪功能等。

配置文件还可以控制用户密码。

要查找有关配置文件中当前密码设置的信息,可以查询DBA_PROFILES数据字典视图。

列出了默认配置文件中特定于密码的参数设置。

参数1:

名称:FAILED_LOGIN_ATTEMPTS

默认值:10

描述:

设置用户在锁定帐户之前尝试登录和失败的最 大次数。

注意:

1.设置此参数时,请考虑使用CONNECT THROUGH权限登录的用户。

2.通过使用SEC_MAX_FAILED_LOGIN_ATTEMPTS 初始化参数,可以设置未授权用户(可能是入侵者)尝试登录Oracle调用接口(OCI)应用程序的次数限制。

参数2:

名称:PASSWORD_GRACE_TIME

默认值:7

描述:

设置密码过期前用户必须更改密码的天数。

参数3:

名称:PASSWORD_LIFE_TIME

默认值:180

描述:设置用户可以使用其当前密码的天数。

参数4:

名称:PASSWORD_LOCK_TIME

默认值:1

描述:

设置在指定的连续失败登录尝试次数之后,帐户将被锁定的天数。

过了一段时间后,帐户就会解锁。

此用户配置文件参数有助于防止对用户密码的暴力攻击,但不会增加管理员的维护负担。

参数5:

名称:PASSWORD_REUSE_MAX

默认值:UNLIMITED

描述:设置重新使用当前密码之前所需的密码更改次数。

参数6:

名称:PASSWORD_REUSE_TIME

默认值:UNLIMITED

描述:

设置密码不能重复使用的天数。

可以修改默认配置,例如:

创建:

CREATE PROFILE prof LIMIT
 FAILED_LOGIN_ATTEMPTS 10
 PASSWORD_LOCK_TIME 30;
ALTER USER johndoe PROFILE prof;

修改:

ALTER PROFILE prof LIMIT
 FAILED_LOGIN_ATTEMPTS 9
 PASSWORD_LOCK_TIME 10;

图3-1密码生命周期和宽限期的时间顺序

Oracle数据库用户安全策略功能介绍

七:通过保护数据字典来限制系统权限


要保护数据字典,请将O7_DICTIONARY_ACCESSIBILITY 初始化参数设置为FALSE,这是默认值。此功能称为字典保护机制。

O7_DICTIONARY_ACCESSIBILITY初始化参数控制从Oracle Database 7版升级到Oracle8i及更高版本时对系统权限的限制。

如果参数设置为TRUE,则允许访问SYS模式中的对象(Oracle数据库版本7的行为)。

由于ANY权限适用于数据字典,因此具有ANY权限的恶意用户可以访问或更改数据字典表。

要设置O7_DICTIONARY_ACCESSIBITY初始化参数,请在initSID.ora文件中修改它。

或者,您可以以具有SYSDBA权限的用户SYS身份登录到SQL*Plus,然后输入ALTER SYSTEM语句,

假设您已使用服务器参数文件(SPFILE)启动数据库。

例如:

ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY=FALSE SCOPE=SPFILE;

八:常用审计

使用以下数据字典视图查找有关用户访问数据库的信息。

DBA_*
DBA_ROLES
DBA_SYS_PRIVS
DBA_ROLE_PRIVS
DBA_TAB_PRIVS
DBA_AUDIT_TRAIL (if standard auditing is enabled)
DBA_FGA_AUDIT_TRAIL (if fine-grained auditing is enabled)

监视仅向需要这些权限的用户和角色授予以下权限。

默认情况下,Oracle数据库审核以下权限:

ALTER SYSTEM
AUDIT SYSTEM
CREATE EXTERNAL JOB

Oracle建议审核以下权限:

ALL PRIVILEGES (which includes privileges such as BECOME USER, CREATE LIBRARY, and CREATE PROCEDURE)
DBMS_BACKUP_RESTORE package
EXECUTE to DBMS_SYS_SQL
SELECT ANY TABLE
SELECT on PERFSTAT.STATS$SQLTEXT
SELECT on PERFSTAT.STATS$SQL_SUMMARY
SELECT on SYS.SOURCE$
Privileges that have the WITH ADMIN clause
Privileges that have the WITH GRANT clause
Privileges that have the CREATE keyword

建议的审核设置

数据库架构或结构更改。使用以下AUDIT语句设置:

AUDIT ALTER ANY PROCEDURE BY ACCESS;
AUDIT ALTER ANY TABLE BY ACCESS;
AUDIT ALTER DATABASE BY ACCESS;
AUDIT ALTER SYSTEM BY ACCESS;
AUDIT CREATE ANY EDITION;
AUDIT CREATE ANY JOB BY ACCESS;
AUDIT CREATE ANY LIBRARY BY ACCESS;
AUDIT CREATE ANY PROCEDURE BY ACCESS;
AUDIT CREATE ANY TABLE BY ACCESS;
AUDIT CREATE EXTERNAL JOB BY ACCESS;
AUDIT DROP ANY EDITION;
AUDIT DROP ANY PROCEDURE BY ACCESS;
AUDIT DROP ANY TABLE BY ACCESS;

数据库访问和权限。使用以下AUDIT语句设置:

AUDIT ALTER PROFILE BY ACCESS;
AUDIT ALTER USER BY ACCESS;
AUDIT AUDIT SYSTEM BY ACCESS;
AUDIT CREATE PUBLIC DATABASE LINK BY ACCESS;
AUDIT CREATE SESSION BY ACCESS;
AUDIT CREATE USER BY ACCESS;
AUDIT DROP PROFILE BY ACCESS;
AUDIT DROP USER BY ACCESS;
AUDIT EXEMPT ACCESS POLICY BY ACCESS;
AUDIT GRANT ANY OBJECT PRIVILEGE BY ACCESS;
AUDIT GRANT ANY PRIVILEGE BY ACCESS;
AUDIT GRANT ANY ROLE BY ACCESS;
AUDIT ROLE BY ACCESS;

参考:

Home / Database / Oracle Database Online Documentation 11g, Release 2 (11.2) / Database Administration
Database Security Guide

###chenjuchao 20230304###