ORACLE 用户权限管理

31 篇文章 0 订阅

Linux 操作系统为例

作系统验证

说明:只要在登陆是有 / as sysdba,就是使用os验证方式登录。不管是否是sys用户,或者密码是否正确。
–OS用户使用操作做系统验证登录数据库需要同时满足两个条件

  1. 用户必须加入dba组
    usermod -G dba chaicheng
  2. 设置sqlnet.ora文件,开启操作系统验证
    SQLNET.AUTHENTICATION_SERVICES= (ALL) --Linux
    SQLNET.AUTHENTICATION_SERVICES= (NTS) --windows

–下列方式都是使用操作系统验证登陆(不管密码是否正确都能登录)
Sqlplus “/ as sysdba”
Sqlplus “sys/sys as sysdba”
Sqlplus “sys/sdf as sysdba” --sys口令错误
Sqlplus “scott/sdf as sysdba” --scott口令错误

–操作系统验证不安全,关闭操作系统验证

  1. 把操作系统用户的DBA组取消
    gpasswd -d chaicheng dba
  2. 修改sqlnet.ora文件
    SQLNET.AUTHENTICATION_SERVICES= (NONE)
    其中2个条件满足任何一个即可。

口令文件验证

说明:操作系统验证存在安全隐患
–如果当前没有使用口令文件验证。可以采用如下方法开启口令文件验证。
建立口令文件
orapwd file=$ORACLE_HOME/dbspwdtest.ora password=admin entries=5
口令文件名格式
orapw +SID
必须按照这个格式命名。

–确认参数是否正确
Remote_login_passwordfile=exclusive
None 不使用口令文件验证,如果不使用口令文件验证时,没有用户在ora_dba组中,那么就没有任何用户可以作为sysdba进入数据库了。
Exclusive 一个数据库使用一个口令文件
Shared 多个数据库使用一个口令文件

注意:
如果remote_login_passwordfile=exclusive 而且os中有ora_dba组。那么用户如果作为ora_dba组登陆的话。仍然可以使用os的验证
Shared说明
当remote_login_passwordfile=shared时候,
在$ORACLE_HOME/dbs目录下仍然生成pwd+sid文件。每个数据库使用自己的sys用户和对应的密码,但是不能再加入新的有sysdba权限的用户

–重新启动数据库,sys自动被加入到口令文件中
此时。口令文件中没有任何用户。因为刚建立起来。
通过查询 select * from v$pwfile_users; 可以知道
如果利用grant sysdba to sys; 把sys加入到口令文件。会报错。
必须要重启,会自动吧sys加入进去

– 把system用户写入口令文件中
Grant sysdba to system;
授权命令成功后。
select * from v$pwfile_users;
可以看到system已经在口令文件中

–忘记sys口令的话,2种做法都可以。

  1. 打开os认证方式,/as sysdba连接进去。 Alter user sys identified by sys;
  2. 通过删除口令文件.然后用orapwd命令重新建立口令文件来做.但是需要重启数据库

权限查询

–查询某个用户具有的权限:

  1. 查询某个用户具有的角色:
    select grantee,granted_role from dba_role_privs where grantee=‘HR’;
  2. 查询某个用户具有的系统权限:
    select grantee,privilege from dba_sys_privs where grantee=‘HR’;
  3. 查询某个用户具有的对象权限:
    select GRANTEE,OWNER,TABLE_NAME,PRIVILEGE from dba_tab_privs WHERE grantee=‘HR’;

–查询某个角色的权限:

  1. 查询某个角色具有的对像权限:
    SQL> select * from role_tab_privs where role=‘AA’;
  2. 查询某个角色中具有什么系统权限:
    select privilege from role_sys_privs where role=‘RESOURCE’;
  3. 查询某个角色中包含有什么角色
    select granted_role from role_role_privs where role=‘SYSDBA’;
  4. 查看某个用户在某个表上的权限
    SQL> select GRANTEE,OWNER,TABLE_NAME,GRANTOR,PRIVILEGE from DBA_TAB_PRIVS where GRANTEE=‘BI’ AND TABLE_NAME=‘PROMOTIONS’;
  5. 如果想让某个用户拥有查看数据库数据字典的权限,但没有系统权限和针对用户数据的权限,则可以(通常对新数据库管理员有用)
    grant create session,select_catalog_role to hr;

查看用户表空间的限额

显示当前用户限额
SQL>select * from user_ts_quotas;
显示所有用户限额
SQL> select * from dba_ts_quotas;
max_bytes字段就是了
-1是代表没有限制,其它值多少就是多少了.

不对用户做表空间限额控制:
GRANT UNLIMITED TABLESPACE TO HR(用户); 这种方式是全局性的所有表空间.
alter user HR quota unlimited on USERS(指定的表空间);
这种方式是针对特定的表空间的.
可以分配自然也可以回收了:
revoke unlimited tablespace from ***(用户)

帐户解锁的两种方式

SQL> alter user hr account unlock identified by oracle;
SQL> alter user bi identified by oracle account unlock;

Oracle密码复杂度设置(Oracle_Password_Complexity)

@?/rdbms/admin/utlpwdmg.sql
执行完utlpwdmg.sql脚本之后就启用了Oracle数据库密码复杂度验证规则,规则如下:

  1. 对于非从低版本数据库导入的用户,密码都严格区分大小写。
  2. 密码长度不能小于8个字符,不能超过30个字符。
  3. 密码不能与用户名相同,也不能是用户名倒着拼写,或者后面追加1-100。
  4. 密码不能与服务器名称相同,也不能是服务器名称后面追加1-100。
  5. 密码不能过于简单,例如:welcome1, database1, account1, user1234, password1, oracle, oracle123, computer1, abcdefg1, orchange_on_install。
  6. 密码不能是oracle,或者oracle后面追加1-100。
  7. 密码必须至少包含1个数字和1个字母。
  8. 新密码与老密码必须至少有3个字符不同。
  9. 密码的有效期是180天,延长期是7天。
  10. 如果一个用户连续输入密码10次都不正确,那么该用户将被锁定。
  11. 该策略设定之后,只在新创建用户和修改密码时开始验证,现有用户的密码可继续使用,为了安全起见,建议设置该策略后立即修改SYSTEM用户和所有业务系统用户的密码
  12. 以上的规则对SYS用户无效(SYS是超级管理员用户,有单独文件保存密码,建议设置最为严格的密码)。
    SQL> @?/rdbms/admin/utlpwdmg.sql --先创建这个函数
    SQL> alter profile p1 limit password_verify_function verify_function;
    SQL> alter profile p1 limit password_verify_function VERIFY_FUNCTION_11G;
    SQL> create user a6 identified by test123#;

----取消Oracle密码复杂度检查:
SQL> alter profile P1 limit password_verify_function null;
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type=‘PASSWORD’ AND profile=‘DEFAULT’;

  1. FAILED_LOGIN_ATTEMPTS: 用户在登录尝试失败n次后被锁定。
  2. PASSWORD_LOCK_TIME: 登录尝试失败达到指定次数,用户锁定时长,以“Day”为单位。
  3. PASSWORD_LIFE_TIME: 用户口令的生命周期。
  4. PASSWORD_GRACE_TIME: 表示用户口令使用时间超过其生命周期后,可以延续使用的天数,并且可延续时间内登录会有相应口令即将过期的提示。
  5. PASSWORD_REUSE_TIME: 指定了口令不能重用前的天数。 6) PASSWORD_REUSE_MAX: 在达到PASSWORD_REUSE_TIME指定时间后,要再次使用同一口令前必须改变的次数。
    如:PASSWORD_REUSE_TIME=30,PASSWORD_REUSE_MAX=10,用户可以在30天以后重用该口令,要求口令必须被改变超过10次。
  6. PASSWORD_VERIFY_FUNCTION: Oracle允许将复杂的PL/SQL密码验证脚本做为参数传递给PASSWORD_VERIFY_FUNCTION。并且其自己提供了一个默认的脚本,但是用户可以创建自己的验证规则或使用第三方软件验证。

参数说明:
FAILED_LOGIN_ATTEMPTS:最大登录失败次数
PASSWORD_LOCK_TIME:登录超过有效次数后的锁定时间(天)
PASSWORD_LIFE_TIME:密码有效时间(天)
PASSWORD_GRACE_TIME:密码失效后的锁定时间(天)
PASSWORD_REUSE_MAX:密码历史记录保留次数
PASSWORD_REUSE_TIME:密码历史记录保留时间(天)
PASSWORD_VERIFY_FUNCTION:密码复杂度验证函数

可按以下格式修改密码参数
SQL> ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1/1440
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_VERIFY_FUNCTION verify_function;

修改用数据库用户密码过期

  1. 查看用户的proifle是哪个,一般是default:
    SQL> SELECT username,PROFILE FROM dba_users where username=‘OE’;

  2. 查看指定概要文件(如default)的密码有效期设置:
    sql>SELECT * FROM dba_profiles s WHERE s.profile=‘DEFAULT’ AND resource_name=‘PASSWORD_LIFE_TIME’;

  3. 将密码有效期由默认的180天修改成“无限制”:
    sql>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
    修改之后不需要重启动数据库,会立即生效。

  4. 将过期用户的密码重置
    alter user webws account unlock identified by webws;
    CREATE PROFILE “P2” LIMIT
    PASSWORD_LIFE_TIME 1
    PASSWORD_GRACE_TIME 1
    PASSWORD_REUSE_MAX 3
    PASSWORD_REUSE_TIME UNLIMITED
    PASSWORD_LOCK_TIME 1
    FAILED_LOGIN_ATTEMPTS 3
    PASSWORD_VERIFY_FUNCTION NULL;

用户密码过期延期

  1. 创建一个新profile 叫aaa, password_life_time 为30天
    create profile aaa limit password_life_time 30
    PASSWORD_GRACE_TIME 0;
    select * from dba_profiles where profile like ‘A%’ AND LIMIT <>‘DEFAULT’;
  2. 把过期的用户的profile 修改为新建的profile
    alter user zjk account unlock identified by zjk;
    alter user zjk profile aaa;
  3. select * from dba_users where username=‘ZJK’;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值