Oracle用户及密码安全管理

查看用户信息

  select username from dba_users order by 1 ;

创建数据库后,通常会锁定所有账号并将他们的密码更改为已过期,只会在需要时解锁默认的用户账号。

  select 'alter user ' || username || ' password expire account lock;' from dba_users where   username='scott ';

锁定的用户账号只有在解锁之后才能使用,例如:

  alter user scott account unlock;

使用密码已过期的用户账号第一次连接数据库时,系统会提示用户输入新密码,当用户连接数据库时,Oracle会检查用户账号的密码是否过期。如果用户账号的密码
已经过期,oracle就会提示下列信息:

  ORA-28001: the password has expired 
  Changing password for...
  New Password :

在输入新密码后,会提示用户再次输入该密码:

  Retype new password :
  Password changed 
  Connected.

Oracle中没有 alter user <> passsword unexpire 命令。要使用过期的密码重新生效。只需更改他即可。用户可以更改密码,DBA也可以为用户更改密码:

  alter user <username> identified by <password>;

如果某个账号的密码已经过期,而且你不知道他当前的密码并整由于是否更改他的密码时,可以使用下面的技巧不更改密码的方式,使已过期的密码重新生效:
1.使用DBA数据库权限用户查看该用户当前的配置文件:

  select username,profile from dba_users  where username='SCOTT';
  USERNAME       PROFILE
  -----------    ------------- 
  SCOTT	         DEFAULT

2.创建一个临时配置文件:

  create profile temp_prof limit password_reuse_max unlimited password_reuse_time unlimited;

3.将这个临时配置文件分配给该用户:

    alter user scott profile temp_prof;

4.查看引起混乱的密码:

    select password from user$ where name='SCOTT';
    PASSWORD
    --------------------- 
    F894844C34402B67

5.使用原有 密码设置该账号的新密码,这可以使用已过期的密码重新生效

    alter user scott identified by values 'F894844C34402B67';

6.将原来的配置文件重新分配给用户

    alter user scott profile DEFAULT;

最后删除临时配置文件,避免将来不小心使用他

    drop profile temp_prof;

–分区DBA创建的账号
如果数据库是从其他DBA接手的,将由DBA创建的账号和Oracle的默认账号区分开也非常有用。在创建数据库时,Oracle通常会自动创建几个默认账号。这些默认账号会
以为内不同的数据库版本和安装时使用的不同选项而略有不同,。使用下面的命令查询,可以查明哪些用户账号是有DBA创建的,哪些用户账号是Oracle的默认账号:

    select distinct u.username, case when d.user_name is null then 'DBA created account'
     else 'Oracle created account' end 
       from dba_users u ,
            sys.default_pwd$ d 
            where u.username=d.user_name(+);

默认的用户账号会在DEFAULT_PWD$ 视图中有一条记录。如果某个用户账号没有出现在DEFAULT_PWD$ 视图中,那么他就不是默认账号,因此,可以使另一种方法区分默认账号

    select distinct(user_name)  from default_pwd$ where user_name in (select username from dba_users);

上面的语句不能确保100%正确,DBA可以将用户账号手动添加到DEFAULT_PWD$ 视图中。即使如此,上面的查询命令也是却分各类账号的良好入手点。

-创建用户账号
在创建用户账号时,需要考虑下列因素:
用户名的验证方式;
基本权限;
默认的永久表空间和空间配额;
默认的临时表空间;

–选择用户名的验证方式
数据库验证
OS验证
全局用户验证和授权
外部服务验证
创建数据库验证用户
数据库验证方式是通过sql语句create user建立的。在使用DBA账号创建用户账号时,DBA账号必须拥有CREATE USER系统权限。本例创建了一个名为HEERA的用户,将他的密码
设置为chaya,并为他分配了默认永久表空间USER,默认的临时表空间temp以及无上限的users表空间;

    create user heera identified by chaya
    default tablespace users
    temporary tablespace temp
    quota unlimited on users;

这会创建一个没有任何权限的用户账号,要使这个用户账号变得有用,至少需要赋予它create session权限;

    grant create session to heera;

如果新建的用户账号需要创建表,就必须增加create table 系统权限:

    grant create table to heera;

还可以使用GRANT…INDENTIFIED BY 语句创建用户,例如:

    grant create seesion ,create table to heera identified by chaya;

如果这个用户不存在,那么就会创建该账号。如果这个账号已经存在,那么该账号的密码就会被由identified by 子句设置的密码替换。

OS验证 --略

分配默认的永久和临时表空间
通过DBA_USERS查看用户信息:

    select username,password,default_tablespace,temporary_tablespace from dba_users;

如果发现用户错误的设置了默认表空间,可以使用ALTER USER 命令修改:

    alter user scott default tablespace users temporary tablespace temp;

永远不能让任何用户将system表空间用作临时表空间。如果某个用户将SYSTEM表空间用作临时表空间,那么当该用户请求临时磁盘存储空间的排序区时,就会获得SYSTEM
表空间的区。这回导致SYSTEM表空间被装满。任何时候偶不允许出现这种情况,因为当SYS方案的对象无法获得可用空间时,会导致数据库停运。
检查用户是否将SYSTEM表空间用作临时表空间:

    select username from dba_users where temporary_tablespace='SYSTEM';

–修改用户
修改用户密码:

   alter user soctt identified by tiger;

修改默认表空间和临时表空间:

    alter user soctt default tablespace users temporary tablespace temp;

锁定用户账号:

    alter user soctt account lock;

解锁用户账号:

   alter user soctt account unlock;

更改用户在表空间中的限额:

    alter user soctt quota 500M on users;

删除用户

    drop user scott;

如果当前用户有对象,使用CASCADE子句删除用户及对象

    drop user soctt cascade;

–提高密码安全性和资源使用限制
在创建用户时,如果没有设置配置文件,那么就会将DEFAULT配置文件自动分配给新建的用户:
查看配置文件的当前设置

    select profile,resource_name,resource_type,limit from dba_profiles order by profile,resource_type;

密码设置 描述 默认值
PASSWORD_LIFE_TIME 密码有效期 UNLIMITED
PASSWORD_REUSE_MAX 在允许再次使用某个密码前,密码必须更改过的次数 UNLIMITED
PASSWORD_GRACE_TIME 过期密码能够再次使用钱必须经过的天数 UNLIMITED
PASSWORD_REUSE_TIME 在允许再次使用某个密码钱,比如经过的天数 UNLIMITED
PASSWORD_VERIFY_FUNCTION 用户验证密码的数据库函数 NULL
PASSWORD_LOCK_TIME 超过连续输入错误密码的限定次数后,锁定用户账号的时间 UNLIMITED

可以根据自己的环境修改DEFAULT配置文件,例如,可以设置密码重用天数的最高上限。
将PASSWORD_LIFE_TIME参数设置为300天:

     alter profile default limit PASSWORD_LIFE_TIME 300;
必须将PASSWORD_REUSE_TIME和PASSWORD_REUSE_MAX设置联合使用,如果其中一个参数设置了整形数值并为另一个参数设置了UUNLIMITED值,那么当前密码

就永远不能重用。
如果想要设置在100天内必须更改10次密码后才能再次使用旧密码,可以使用下面的命令修改DEFAULT配置文件:

     alter profile default limit password_reuse_time 100 password_reuse_max 10;

在许多环境中使用DEFAULT配置文件就足够了,但是可能需要更严格的安全管理。可以创建自定义安全配置文件,并根据需要将他们分配给用户:

     create profile secure_app limit
     PASSWORD_LIFE_TIME 200
     PASSWORD_GRACE_TIME 10
     PASSWORD_REUSE_TIME 1
     PASSWORD_REUSE_MAX 1
     FAILED_LOGIN_ATTEMPTS 3
     PASSWORD_LOCK_TIME 1;

创建配置文件后,可以根据需要降至分配给用户:

     select 'alter user '||username||' profile secure_app;' from dba_users where username like '%%';

–密码是否更改过:
在确定密码是否安全时,检查用户密码是否更改过的方法非常有用。如果某个用户的密码从来没有个更改过,就可以将其视为一个安全威胁:

     select name,to_char(ctime,'yyyy-mm-dd hh24:mi:ss'),to_char(ptime,'yyyy-mm-dd hh24:mi:ss'),length(password) from user$ where password is not null
     and password not in ('GLOBAL','EXTERNAL') and ctime=ptime;

Ctime列含有创建用户时的时间戳。PTIME列含有更改密码时的时间戳。如果CTIME和PTIME列的值相同,就说明密码从来没有更改过。

–密码长度
向用户的配置文件分配密码验证函数,可以提高密码发杂兴的最低标准。Oracle提供了默认的密码验证函数,使用SYS运行下列脚本就可以创建它:

     @$ORACLE_HOME/rdbms/admin/utlpwdmg

这个脚本创建了以下密码验证函数:
ora12c_verify_finction(Oracle Database 12c)
ora12c_strong_verify_function(Oracle Database 12c,安全性能非常高)
verify_function_11G (Oracle Database 11g)
verify_function (Oracle Database 10g)

创建了验证密码验证函数后,就可以使用ALTER PROFILE 命令,通过配置文件将验证函数分配给用户。例如,要为DEFAULT配置文件设置密码验证函数:

     alter profile default limit PASSWORD_VERIFY_FUNCTION ora12c_verify_function;

如果需要恢复原来的安全设置,运行下面的命令可以禁用这个密码验证函数:

     alter profile default limit password_verify_function null;

可以修改密码吗验证函数的代码。打开创建密码验证函数的脚本并修改:

     vi $ORACLE_HOME/rdbms/admin/utlpwdmg.sql

–限制数据库资源的使用
配置文件分配给用户后,密码配置文件设置就会生效。与密码设置不同,在初始化参数RESOURCE_LIMIT设置为TRUE钱,内核资源配置文件限制不会起作用:

     alter system set resource_limit=ture scope=both;

查看当前resource_limit参数的当前设置:

     show parameter resource_limit
     select name ,value from v$parameter where name ='resource_limit';

当创建用户时,如果没有配置文件,那么系统就会自动将DEFAULT配置文件分配给用户。使用 ALTER PROFILE 命令可以修改DEFAULT配置文件。
修改DEFAULT配置文件,将CPU_PER_SESSION设置为2400000(单位:厘秒):

     alter profile default limit cpu_per_session 2400000;

这会限制分配了DEFAULT配置文件的用户只能在2400秒内占用CPU。
配置文件参数 注释
COMPOSITE_LIMIT 根据综合权衡算法限制使用下列资源:CPU_PER_SESSION,CONNECT_TIME,LOGICAL_READS_PER_SESSION 和 PRIVATE_SGA
CONNECT_TIME 连接时间(单位:秒)
CPU_PER_CALL 每次调用CPU的时间限制(单位:厘秒)
CPU_PER_SESSION 每个会话使用CPU的时间限制(单位:厘秒)
IDLE_TIME 空闲时间(单位:分钟)
LOGICAL_READS_PER_CALL 每次调用读入的块数
LOGICAL_READS_PER_SESSION 每次会话读入的块数s
PRIVATE_SGA 共享池中消耗的空间
SESSIONS_PER_USER 并发会话数

可以创建一个自定义配置文件:

     create profile user_profile_limit
     limit 
     sessions_per_user 20
     cpu_per_session 2400000
     logical_reads_per_session 1000000
     connect_time 480
     idle_time 120;

创建了配置文件后,就可以将其分配给用户。

     alter user soctt profile user_profile_limit;

可以在create user语句中,将配置文件设置为DEFAULT之外的其他配置文件:

     create user heera identified by foo profile user_profile_limit;

一个用户只能分配一个数据库配置文件,因此如果对密码安全和资源限制都有管理要求,应确保在同一配置文件中设置这两方面的内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值