暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C入门到精通之资源配置PROFILE

ITPro进化论 2024-01-07
555

访问Oracle数据库时,必须提供用户名和密码才能连接到数据库。为了防止其他人员窃取用户密码,DBA必须充分考虑用户密码的安全性,以防止非法人员连接到数据库执行非法操作。对于大型数据库管理系统而言,数据库用户众多,并且不同用户担负不同的管理任务,为了有效地利用服务器资源,还应该限制不同用户的资源占用。

1. PROFILE简介

PROFILE作为用户配置文件,它是密码限制、资源限制的命名集合。PROFILE文件作为Oracle安全策略的重要组成部分,利用它可以对数据库用户进行基本的资源限制,并且可以对用户的密码进行管理。

在安装数据库时,Oracle会自动建立名为DEFAULT的默认配置文件。如果没有为新创建的用户指定DEFAULT文件,那么Oracle将自动为它指定DEFAULT配置文件。初始的DEFAULT文件没有进行任何密码和资源限制。使用PROFILE文件时需要注意如下事项:

  • 建立用户时,如果不指定PROFILE选项,那么Oracle会自动将DEFAULT分配给相应的数据库用户。
  • 建立PROFILE文件时,如果只设置了部分密码和资源限制选项,那么其他选项会自动使用默认值,即使DEFAULT文件中有相应选项的值。
  • 使用PROFILE管理密码时,密码管理选项总是处于被激活状态,但是如果使用PROFILE管理资源,必须要激活资源限制。
  • 一个用户只能分配一个PROFILE文件。如果要同时管理用户的密码和资源,那么在建立PROFILE文件时应该同时指定密码和资源选项。

2. 使用PROFILE管理密码

当操作人员要连接Oracle数据库时,需要提供用户名和密码。对于黑客或某些人而言,他们可能通过猜测或反复试验来破解密码。为了加强密码的安全性,可以使用PROFILE文件管理密码。PROFILE文件提供了一些密码管理选项,它们提供了强大的密码管理功能,从而确保密码的安全。为了实现密码限制,必须首先建立PROFILE文件。建立PROFILE文件是使用CREATE PROFILE语句完成的。一般情况下,该语句由DBA执行,如果要以其他用户身份建立PROFILE文件,则要求该用户必须具有CREATE PROFILE系统权限。

使用PROFILE文件可以实现如下4种密码管理功能:账户锁定、密码的过期时间、密码历史和密码的复杂度。

2.1. 账户锁定

账户的锁定策略是指用户在连续输入指定次数错误密码后,Oracle会自动锁定用户的账户,并且可以规定账户的锁定时间。Oracle为锁定账户提供了以下两个参数:

  • FAILED_LOGIN_ATTEMPTS:该参数限制用户在登录Oracle数据库时允许失败的次数。一旦某个用户尝试登录数据库的次数达到该值,系统就会将该用户账户锁定。
  • PASSWORD_LOCK_TIME:该参数用于指定账户被锁定的天数。

创建PROFILE文件,要求设置连续失败次数为5,超过该次数后,账户将被锁定7天,然后使用ALTER USER语句将PROFILE文件(即lock_account)分配给用户dongfang,代码如下:

--创建PROFILE文件
create profile lock_account limit failed_login_attempts 5  password_lock_time 7;
--将PROFILE文件分配给用户dongfang
alter user dongfang profile lock_account;

在建立lock_account文件并将该文件分配给用户dongfang后,如果以用户dongfang身份连接到数据库,并且连续连接失败5次,那么Oracle将自动锁定该用户账户。此时,即使为用户dongfang提供了正确的密码,也无法连接到数据库。

在建立lock_account文件时,由于指定PASSWORD_LOCK_TIME的参数为7,因此账户锁定天数达到7天后,Oracle会自动解锁账户。

如果建立PROFILE文件时没有提供PASSWORD_LOCK_TIME参数,将自动使用默认值UNLIMITED。这种情况下,需要DBA手动解锁用户账户。

2.2. 密码的过期时间

密码的过期时间是指强制用户定期修改自己的密码。当密码过期后,Oracle会及时提醒用户修改密码。密码宽限期是指密码到期之后的宽限使用时间。默认情况下,建立用户并为其提供密码之后,密码会一直生效。为了防止其他人员破解用户账户的密码,可以强制普通用户定期修改密码。为了强制用户定期修改密码,Oracle提供了如下参数:

  • ASSWORD_LIFE_TIME:该参数用于设置用户密码的有效时间,单位为天。超过这一时间段,用户必须重新设置密码。
  • PASSWORD_GRACE_TIME:该参数用于设置密码失效的“宽限时间”。如果密码达到PASSWORD_LIFE_TIME设置的失效时间,设置宽限时间后,用户仍然可以继续使用一段时间。

为了强制用户定期修改密码,对二者应该同时进行设置。

创建一个PROFILE文件(即password_life_time),并设置用户的密码有效期为30天,密码宽限期为3天,然后使用ALTER USER语句将PROFILE文件(即password_life_time)分配给用户dongfang,代码如下:

--创建PROFILE文件
create profile password_life_time limit password_life_time 30 password_grace_time 3;
--分配PROFILE文件给用户dongfang
alter user dongfang profile password_life_time; 

在上述实例中,如果用户dongfang在使用30天后没有修改密码,那么Oracle将会显示ORA-28002的警告信息。如果用户在30天内没有修改密码,那么在第31天、第32天、第33天连接数据库时,仍然会显示类似的警告信息。如果在第33天仍然没有修改密码,那么当第34天连接数据库时,Oracle会强制用户修改密码,否则不允许连接到数据库。

2.3. 密码历史

密码历史是用于控制账户密码的可重复使用次数或可重用时间。使用密码历史参数后,Oracle会将密码修改信息存储到数据字典中。这样,当修改密码时,Oracle会对新、旧密码进行比较,以确保用户不会重用过去已经用过的密码。关于密码历史有如下两个参数:

  • PASSWORD_REUSE_TIME:该参数指定密码可重用的时间,单位为天。
  • PASSWORD_REUSE_MAX:该参数指定密码在能够被重新使用之前必须改变的次数。

在使用密码历史选项时,只能使用其中的一个参数,并将另一个参数设置为UNLIMITED。

2.4. 密码的复杂度

在PROFILE文件中,可以通过指定的函数来强制用户的密码必须具有一定的复杂度。例如,强制用户的密码不能与用户名相同。使用校验函数验证用户密码的复杂度时,只需要将这个函数的名称指定给PROFILE文件中的PASSWORD_VERIFY_FUNCTION参数,Oracle就会自动使用该函数对用户的密码和格式进行验证。

3. 使用PROFILE管理资源

为了有效地利用系统资源,应该根据用户所承担任务的不同为其分配合理资源。PROFILE不仅可用于管理用户密码,还可以用于管理用户资源。需要注意,如果是使用PROFILE管理资源,必须将RESOURCE_LIMIT参数设置为TRUE,以激活资源限制。由于该参数是动态参数,因此可以使用ALTER SYSTEM语句进行修改。

使用SHOW命令查看RESOURCE_LIMIT参数的值,然后使用ALTER SYSTEM命令修改该参数的值为TRUE,以激活资源限制,代码如下:

show parameter resource_limit;

alter system set resource_limit=true;

利用PROFILE配置文件,可以对以下系统资源进行限制:

  • CPU时间:为了防止无休止地使用CPU时间,限制用户每次调用所使用的CPU时间以及在一次会话期间所使用的CPU时间。
  • 逻辑读:为了防止过多使用系统的I/O操作,限制每次调用(即会话)时读取的逻辑数据块数目。
  • 用户的并发会话数。
  • 会话空闲的限制:当一个会话空闲的时间达到限制值时,当前事务被回滚,会话被终止并且所占用的资源被释放。
  • 会话可持续的时间:如果一个会话的总计连接时间达到该限制值,则当前事务被回滚,会话被终止并释放所占用的资源。
  • 会话所使用的SGA空间限制。

当一个会话或SQL语句占用的资源超过PROFILE文件中的限制时,Oracle将首先终止并回退当前事务,然后向用户返回错误的信息。如果PROFILE文件受到的限制是会话级的,那么在提交或回退事务后,用户会话将被终止;而如果受到的限制是调用级的,那么用户会话还能够继续进行,只是当前执行的SQL语句将被终止。下面是PROFILE文件中对各种资源限制的参数:

  • SESSION_PER_USER:限制用户可以同时连接的会话数量。如果用户的连接数达到该限制,则试图登录时将产生一条错误信息。
  • CPU_PER_SESSION:限制用户在一次数据库会话期间可以使用的CPU时间,单位为1% s。当达到该时间值后,系统就会终止该会话。如果用户还需要执行操作,则必须重新建立连接。
  • CPU_PER_CALL:限制用户每条SQL语句所能使用的CPU时间,参数值是一个整数,单位是1% s。
  • LOGICAL_READS_PER_SESSION:限制每个会话所能读取的数据块数量,包括从内存中读取的数据块和从磁盘中读取的数据块。
  • CONNECT_TIME:限制每个用户连接到数据库的最长时间,单位为min(分钟),当连接时间超出该设置时连接终止。
  • IDLE_TIME:限制每个用户会话连接到数据库的最长时间。超过该空闲时间,系统会终止该会话。

4. 维护PROFILE文件

在Oracle中,PROFILE文件也是一种数据资源。DBA可以使用相应的语句对其进行管理,包括修改、删除、激活或禁用PROFILE文件。

4.1. 修改PROFILE文件

在创建PROFILE文件之后,还可以使用ALTER PROFILE语句修改其中的资源参数和密码参数。

对password_life_time文件(即PROFILE文件)的资源限制参数进行修改,代码如下:

alter profile password_life_time limit
cpu_per_session 20000
sessions_per_user 10
cpu_per_call 500
password_life_time 180
failed_login_attempts 10;

对配置文件所做的修改只有在用户开始新的会话时才会生效。

4.2. 删除PROFILE文件

使用DROP PROFILE语句可以删除PROFILE文件。如果要删除的配置文件已经被指定给了用户,则必须在DROP PROFILE语句中使用CASCADE关键字。

删除被分配给用户dongfang的password_life_time配置文件,代码如下:

drop profile password_life_time cascade;

如果为用户指定的配置文件被删除,则Oracle将自动为用户重新指定DEFAULT配置文件。

5. 显示PROFILE信息

在PROFILE文件被创建后,其信息被存储在数据字典中。通过查询这些数据字典,可以了解PROFILE文件的信息。

5.1. 显示用户的资源配置信息

建立或修改用户时,可以为用户分配PROFILE文件,如果没有为用户分配PROFILE文件,Oracle会自动将DEFAULT文件分配给用户。通过查询数据字典视图dba_users,可以显示用户使用的PROFILE文件。

--显示用户dongfang所使用的PROFILE文件
select profile from dba_users where username='DONGFANG';

5.2. 显示指定PROFILE文件的资源配置信息

建立或修改PROFILE文件时,Oracle将PROFILE参数存储在数据字典中。可以通过查询dba_profiles显示PROFILE的密码限制、资源限制信息。

--显示lock_account文件的密码和资源限制信息
select resource_name,resource_type,limit from dba_profiles where profile = 'LOCK_ACCOUNT';

今天的文章就到这里,如果对你有用,记得点个【】和【在看】,感谢阅读~

文章转载自ITPro进化论,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论