Oracle 用户管理

一、用户的创建及权限、角色的分配:

  1. 用户的创建:
         create user <username> identified by <password> [default tablespace <tsName>] [temporary tablespace <tsName>][password expire][account <lock|unlock>]。  
  2. 用户创建时默认的表空间和临时空间:
          如果在创建用户的时候不输入default tablespace <tsName> temporary tablespace <tsName>,则user的表空间和临时空间为全局默认的default tablesplace和temporary tablespace。同时全局的default tablesplace和temporary tablespace不能drop。除非指定了新的default tablesplace和temporary tablespace。默认的default tablesplace和temporary tablespace可以通过以下语句查询:
    SELECT *  FROM database_properties
          默认表空间的更改通过以下语句实现:
    alter database default tablespace <ts_name>
    alter database temporary tablespace <ts_name>  
  3. 账号的锁定和删除:
        锁定和解锁:alter user <username> account [lock|unlock]
        删除:drop user <username> cascade。此语句不可回退。在删除用户时,一般先锁定用户一段时间。观察一段时间,确定用户的删除不会对数据库产生影响后在删除。
  4. 用户密码的管理:
    a、10g的登录次数:
              在oracle 10g中,默认如果输入密码错误10次后,将lock用户。这是由用户绑定的profile 决定的: 
     select * from dba_profiles where resource_name='FAILED_LOGIN_ATTEMPTS'。
    可以通过以下语句恢复到无限制:  
    alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited (在user没有DBA权限的时候这条语句是不能被执行的,那么如何通过sys用户更改:)
    实际上用户登录失败次数是记录在USER$.LCOUNT字段中的。
    b、11g中的密码大小写区分:
          在11g中密码默认是区分大小写的。这是通过SEC_CASE_SENSITIVE_LOGON来控制的。当其为false时,不区分大小写:
        alter system set sec_case_sensitive_logon=false; 
    同时11g中还给出了DBA_USERS_WITH_DEFPWD视图用户查询那些具有缺省密码的用户
    c、口令负责度校验:
         默认未开启用户密码复杂度校验。通过运营$ORACLE_HOME/rdbms/admi/utlpwdmg.sql来创建启用。此文件创建一个verify_function 函数并修改用户默认的profile参数。
    d、密码的修改:
          alter user <username> identified by <password|externally>
         密码失效:alter user <username> password expire。
  5. 权限和角色的授予:
    a、权限分为系统权限和对象权限,前者包括:create session、create tablespace、create table等。后者包括:
        表权限:select、delete、update、insert、alter等。
        视图权限:select、delete、insert、update等。
        过程和函数权限:execute、debug等。
    新创建的user想连接数据库并create table必须具有 create session和create table权限。同时对需要create table的tablespace 具有一定的quota。更改用户的quota可通过以下语句:
       alter user <username> quota <size(eg:10m)> on <tsname(eg:users)>
    b、权限的授予和回收:
         授予:grant <role|privilege>  [on <objectName>] to <username> [with <admin|grant> option]
         回收:revoke <role|privilege> [on <objectName>] from <username>
       对于sys privilege 不能跨用户revoke,但是对于对象权限可以跨用户回收。
    c、系统权限的查看:select * from dba_sys_privs where grantee=''。其中结果中的admin_option由grant中的with admin option子句决定。当存在子句时为true。否则为false。为true时表明被grant的user有权将此privilege或者role 授予其他用户。
       对象权限的查看:select * from dba_tab_privs where grantee=''
       系统所有角色的查看:select * from dba_roles
       角色授予的查看:select * from dba_role_privs where grantee='’
    d、默认向用户grant resource角色时,用户会获得unlimited tablespace 权限。其可以在system tablespace无限制的使用。更严格的管理是回收该权限。对不同的表空间quota单独grant:
      revoke unlimited tablespace from <username>;alter user <username> quota unlimited  on <tsname> 。类似于这种独立的quota授予可以再dba_ts_quota表中查询的到。
    e、对于对象权限除对象的所有者之外,具有 grant any object privilege 或者with admin option 的用户也可以将该对象的权限授权他人。
    f、角色(role):
       创建角色:create role <roleName>。角色对于grank给另外一个角色。
        在数据库内部,user和role都存储在user$表中,通过type#字段区分。其中0是role ,1是user。通过DBA_ROLES的定义可以看出系统中存在两个特殊的角色PUBLIC 和_NEXT_USER :
    select name, decode(password, null, 'NO', 'EXTERNAL', 'EXTERNAL',
                          'GLOBAL', 'GLOBAL', 'YES')
    from  user$
    where type# = 0 and name not in ('PUBLIC', '_NEXT_USER')
    PUBLIC 是一个特殊的角色。其所拥有的权限(一般为对象权限,可通过dba_tab_privs查看)会被所有用户所拥有。所有控制PUBLIC 角色的权限对安全有着很大的影响。
  6. 过度授权:execute/create ANAY PROCEDURE 是非常重要的权限,一般都不授予给普通用户
二、用户认证:
  1. 外部认证:
    如果用户可以直接连接到操作系统,在创建用户的时候可以指定用户不通过口令登录数据库,而是通过外部系统认证的方式登录数据库。在windows下通过修改注册表实现外部认证:
    在注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1下添加字符串键名:OSAUTH_PREFIX_DOMAIN=FALSE。然后通过以下方式建立用户create user <ops$name> identified externally。这样在登录数据库的时候就不需要显示的输入密码。用户名的前缀OPS$是为了兼容以前版本。通过参数OS_AUTHENT_PREFIX可以设置,将其设置为空字符时,那么创建用户时就不需要输入前缀,更加方便:
       alter system set os_authent_prefix='' scope=spfile;
    然后重启数据库。通过如下方式创建用户:
    create user <name> identified externally
    (测试不成功)
  2. 操作系统认证方式:
    在windows下可以通过connect / as sysdba登录数据库。这是通过操作系统认证方式登录数据库的。在windows系统中我们可以在管理-用户和组-组中找到ora_dba组,可以看到我们登录操作系统的用户在其中,如果将其删除,则不能使用connect / as sydba登录数据库。
    在$oracle_home/network/admin下可以找到sqlnet.ora文件,其中存在一个SQLNET.AUTHENTICATION_SERVICES = (NTS)
    ,当期被注释或者为none时,操作系统认证将被关闭(windows)。在linux下则注释为启用操作系统认证,为NONE时关闭操作系统认证。
三、用户审计:
  1. sys用户审计:
               audit目录可以通过show parameter audit_file_dest查看。默认audit只记录sys用户的登录,如果参数       audit_sys_operations=ture时,则审计sys用户的所有信息。
              如何查看具体的审计文件:每个审计文件的格式都是ora_processId.aud格式。其中processid表示当前       session对应的数据库进程ID,通过以下方式查询:
                     select p.SPID "processID",s.SID "sessionId"
                         from v$process p join v$session s on p.ADDR = s.PADDR
                    where s.SID=(select sid from v$mystat where rownum=1)
           (我的adump目录为空。。是不是关闭了什么。ps:找到解释了:audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。)
  2. 用户行为审计:
      参考http://my.oschina.net/dtpanda/blog/127451
  3. fga:
    参考:http://my.oschina.net/dtpanda/blog/127453
四、代理登陆:

    简单的说就是把一个用户的登陆权付给一个代理用户,登陆代理用户就相当于登陆了其代理的用户。步骤如下:
   create user proxy identified by proxy
   grant connect to proxy
   alter user <target_user(eg:study)> grant connect through <proxy_user(eg:proxy)>;(可以将多个用户执行这个操作)
   connect proxy[study]/proxy;
  结果显示已连接:执行show user 显示用户为study。

  ps:相关sql语句

  1. select * from dba_users;--查看所有用户
  2. select * from dba_roles;--查看所有的角色
  3. select * from system_privilege_map;--查看所有的权限
  4. select * from session_privs;--查看当前session的权限
  5. select * from session_roles;--查看当前session的角色
  6. select * from dba_sys_privs d where d.grantee='';--查看对应用户或者角色的权限
  7. select * from dba_role_privs where grantee=''—查看相应用户或者角色的对应的角色
  8. select * from database_properties;--查看当前数据库的属性。可以查看默认表空间
  9. select * from dba_tab_privs;--擦查看被授予的对象权限。
   

   profile:给用户分配profile(alter user study profile PROFILE_TEST;)
    然后 alter system set resource_limit=true。




转载于:https://my.oschina.net/dtpanda/blog/127455

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值