oracle 11g ocp 笔记(6)-- oracle安全

1、创建和管理账号

 用户、用户帐户、模式术语
    用户、用户帐户、模式常替换使用,但这些术语并不完全相同.
    用户通过建立到实例的会话连接到用户帐户,并基于用户帐户名登录。
    模式(schema)是用户帐户拥有的一组对象。

用户账户的属性:

    用户名

  身份认证方式

  默认表空间

  表空间配额

  临时表空间

  用户配置文件

  状态

1)用户名: 字母开头、只能包含字母、数字、美元符$、下划线_,不能是保留字,字母自动转化成大写,不按规则则需要双引号指定,不能超过30个字符。一旦创建不能修改。
    ·身份验证方法:

 2)默认表空间:如果没指定 则使用数据库的默认表空间,如果数据库也没有指定则使用system表空间。

                   alter database default tablespace tablespace_name;        -- 修改数据库的默认表空间
                   alter user username default tablespace tablespace_name;   -- 修改用户帐户的默认表空间

3)配额:select user_name,default_tablespace,temporary_tablespace from dba_users.

                alter user    [username ]  quota 100M on [tablespace_name]

         alter user    [username ]  quota unlimited on [tablespace_name]

4)临时表空间

·临时表空间   alter user username temporary tablespace tablespace_name; -- 修改用户的临时表空间.用户不需要临时表空间上的配额.

5)配置文件

6)用户状态(dba_users.account_status)   
      OPEN: 打开
      LOCKED: 锁定
      EXPIRED: 过期
      EXPIRED & LOCKED: 过期并锁定
      EXPIRED(GRACE): 正常过期,在配置的时间段内,可以更改口令
      LOCKED(TIMED): 登录尝试失败,帐户被锁定
      EXPIRED & LOCKED(TIMED): 过期并超时锁定
      EXPIRED(GRACE) & LOCKED(TIMED): 正常过期并超时锁定

  alter user username account lock;                 -- 锁定帐户
      alter user username account unlock;               -- 解锁帐户
      alter user username password expire;              -- 强制用户更改口令
      alter user username identified by password;       -- 更改用户口令
      alter user username identified by value password; -- 更改用户口令(直接更改加密后的值).

身份认证方法:

 对比用户名和密码

操作系统认证

口令文件认证

(1)操作系统和口令文件身份验证
    要启用操作系统和口令文件身份验证(二者是相配的),必须为用户授予SYSDBA或SYSOPER权限:
    grant [sysdba|sysoper] to username;
    如果向用户授予这些权限之一或所有权限,则会将用户口令从数据字典复制到外部口令文件中,此时,即使数据库未处于打开状态,实例也可以读取口令。
    
    select * from v$pwfile_users; -- 口令文件用户,查看哪些用户被授予SYSDBA或SYSOPER


    -- 重建口令文件(口令文件默认位置:$ORACLE_HOME/dbs/orapwSID)
    orapwd file=<fileName> passwod=<password> entries=<users> 


    操作系统身份验证:
    connect / as [sysdba|sysoper];
    口令文件身份验证
    connect username/password[@db_alias] as [sysdba|sysoper];


    (2)口令身份验证
    connect username/password[@db_alias];
    使用口令身份验证进行连接时,数据库必须处于打开状态,实例将验证数据字典中存储的用户口令。
    不允许SYS用户以口令身份验证的方式进行连接,SYS只能使用口令文件、操作系统或LDAP身份验证。
    任何用户都可以随时更改自己的用户帐户口令,有充足权限的用户(如SYSTEM)可以更改任何用户帐户口令。
    alter user username identified by password;       -- 更改用户口令
    
    (3)外部身份验证:
    如果使用外部身份验证创建用户帐户,Oracle会将身份验证委托给外部服务。
    启用Advanced Security选项: 可用外部服务: Kerberose服务器、Radius服务器、Windows本地身份验证服务.
    未启用Advanced Security选项,只能使用操作系统身份验证,普通用户也适用.


    普通用户使用操作系统身份验证:
    使用与操作系统用户帐户同样的名称创建Oracle用户帐户,但创建的用户需要加上前缀ops$,前缀默认设置为参数os_authent_prefix的值:
    select value from v$parameter where name='os_authent_prefix';
    create user ops$username identified externally;
    grant create session to ops$username;
    以username身份登录linux,以操作系统身份登录Oracle数据库。
    sqlplus /
    
    (4)全局身份验证
    使用LDAP服务器.

1.3 创建和删除用户帐户
    创建用户帐户:
    create user scott identified by tiger
      default tablespace users temporary tablespace temp
      quota 100m on users, quota unlimited on example
      profile default
      password expire
      account unlock;


    删除用户帐户:
    drop user scott cascade;

------------------------------------------------------

5.授予和撤消权限
    系统权限: 允许用户执行影响数据字典的操作.
    对象权限: 允许用户执行影响数据的操作.


    (1)系统权限
    常用系统权限:
    ·CREATE SESSION
    ·RESTRICTED SESSION
    ·ALTER DATABASE
    ·ALTER SYSTEM
    ·CREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE
    ·CREATE TABLE
    ·GRANT ANY OBJECT PRIVILEGE
    ·CREATE ANY TABLE
    ·DROP ANY TABLE
    ·INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE
    ·SELECT ANY TABLE


    用户的系统权限:
    select privilege from dba_sys_privs where grantee='username';    -- 查看用户拥有的系统权限


    授权与撤消语法:
    grant privilege[,privilege...] to username [with admin option];  -- 授予权限
    revoke privilege[,privilege...] from username;                   -- 撤消权限


    grant create session, alter session, create table to username;


    允许权限传递(with admin option),撤消权限时不会级联撤消.
    connect system/oracle;
    grant create table to scott with admin option;
    connect scott/tiger;
    grant create table to username;
    connect system/oracle;
    revoke create table from scott;

grant select any table to scott。any字样的会覆盖原来的权限,通常会带来恶劣的影响(比以前要好一些,不能查sys模式中的表)
    
    (2)对象权限
    ·SELECT:  授权对象为表、视图、同义词、序列
    ·INSERT:  授权对象为表、视图、同义词
    ·UPDATE:  授权对象为表、视图、同义词
    ·DELETE:  授权对象为表、视图、同义词
    ·ALTER:   授权对象为表、序列
    ·EXECUTE: 授权对象为过程、函数、包、同义词


    select grantee,privilege,grantor,grantable from dba_tab_privs; -- 查看表权限


    授权与撤消语法:
    grant privilege[,privilege...] on schema.object to username [with grant option];  -- 授予权限
    revoke privilege[,privilege...] on schema.object from username;                   -- 撤消权限


    grant select on hr.employees to scott;
    grant update(salary) on hr.employees to scott;
    grant all on hr.regions to scott;


    允许权限传递(with grant option),撤消权限时级联撤消.
    connect hr/hr;
    grant select on employees to scott with grant option;
    connect scott/tiger;
    grant select on hr.employees to username;
    connect hr/hr
    revoke select on employees from scott;

------------------------------------------------------------------------------------------------

6.创建和管理角色
    角色不是模式对象,不属于任何人,与用户共享同一命名空间,角色与用户不能同名。
    预定义角色:
    ·CONNECT:             只有CREATE SESSION权限,11g前还具有创建数据存储对象的系统权限.
    ·RESOURCE:            可以创建数据对象和过程对象,12c前还有UNLIMITED TABLESPACE权限.
    ·DBA:                 拥有大多数系统权限,及多个对象权限和角色,可以管理数据库的所有方面,不能启动和关闭数据库.
    ·SELECT_CATALOG_ROLE  
    ·SCHEDULER_ADMIN
    ·PUBLIC:              此角色将授予每个用户,比较特殊,不会出现在dba_roles视图中.


    select role from dba_roles;     -- 查看角色
    select * from dba_role_privs;   -- 查看角色权限

-------------------------------------------------------------------------------------

7.创建和管理配置文件
    配置文件(profile)功能: 实施口令策略,限制会话可以占用的资源.
    配置文件的口令策略始终实施,而配置文件的资源限制只有在实例参数resource_limit=true时才实施。


    select username,profile from dba_users;             -- 为用户帐户分配的配置文件,默认的配置文件为DEFAULT
    select * from dba_profiles where profile='DEFAULT'; -- 配置文件的内容


    口令限制:
    ·FAILED_LOGIN_ATTEMPTS    登录时口令允许连续错误次数
    ·PASSWORD_LOCK_TIME       到达FAILED_LOGIN_ATTEMPTS后,锁定帐户的天数
    ·PASSWORD_LIFT_TIME       口令过期前的天数
    ·PASSWORD_GRACE_TIME      口令过期后第一次成功登录后的天数
    ·PASSWORD_REUSE_TIME      可以重新使用口令前的天数
    ·PASSWORD_REUSE_MAX       允许重新使用口令的次数
    ·PASSWORD_VERIFY_FUNCTION 检验口令的复杂程度的函数


    资源限制:
    ·SESSIONS_PER_USER
    ·CPU_PER_SESSION
    ·CPU_PER_CALL
    ·LOGICAL_READS_PER_SESSION
    ·LOGICAL_READS_PER_CALL
    ·PRIVATE_SGA
    ·CONNECT_TIME
    ·IDLE_TIME
    ·COMPOSITE_LIMIT


    打开实例参数设置的资源限制参数
    alter system set resource_limit=true;


    配置文件的创建和分配
    create profile dba_profile limit sessions_per_user unlimited
      password_lift_time 7 password_grace_time 1;
    alter user sys profile dba_profile;
    alter user system profile dba_profile;


    alter profile default limit sessions_per_user 1;  -- 修改配置文件


    启用更高级口令管理的方式,运行脚本:
    $ORACLE_HOME/rdbms/admin/utlpwdmg.sql


    删除配置文件,重新分配DEFAULT配置文件.
    drop profile profile_name cascade;

---------------------------------------------------------------------

最小化原则:

-------------------------------------------------------------------------

使用标准数据库审核

一.审计SYSDBA活动
    启用审计SYSDBA活动,作为SYSDBA或SYSOPER连接数据库的用户所发布的每条语句都会被写入操作系统的审计跟踪,从而能够给出dba所进行操作的完整记录。
    审计跟踪必须受到保护,如果dba能够删除审计记录,那么创建这些审计记录就毫无意义。因此,dba不应该拥有操作系统的超级用户权限。
    关于审计的参数:
    audit_sys_operations  -- 是否启用审计SYSDBA活动,默认情况为TRUE
    audit_file_dest       -- 审计跟踪文件所在目录
    select name,value from v$parameter where name like 'audit%';
    
二.数据库审计
    设置数据库审计之前,必须设置audit_trail参数,参数值:
    ·NONE(或者FALSE): 禁用数据库审计
    ·OS: 审计记录会被写至操作系统的审计跟踪目录(audit_file_dest所在目录).
    ·DB:审计记录会被写入数据字典表sys.aud$.
    ·DB_EXTENDED: 与DB大体相同,不过包含生成审计记录的、具有绑定变量的SQL语句.
    ·XML: 与OS的作用大体相同,但使用XML标记设置格式.
    ·XML_EXTENDED: 与XML大体相同,但使用SQL语句和绑定变量.
    设置audit_trail参数后,就可以使用数据库审计来捕获登录尝试、系统权限与对象权限的使用以及SQL命令的执行,还可以指定当这些事件成功和/或因权限控制而失败时是否对它们进行审计。审计对没有成功执行的命令特别有用,此时生成的任何记录都会说明用户试图违反自己的访问权限。
    使用audit命令可以配置数据库审计:
    SQL> audit create any trigger;
    SQL> audit select any table by session;  
    SQL> audit select any table by access;
    -- by session审计会为违反审计条件的每个会话生成一条审计记录,不考虑违反条件的次数.
    -- by access为每次违反条件的情况生成一条记录。
    SQL> audit insert on ar.hz_parties whenever successful;  -- 在指定表插入一行就会生成审计记录
    SQL> audit all on ar.ra_interface_lines_all;             -- 审计针对指定表执行DDL语句的每个会话.
    -- whenever successful 审计记录限制为操作成功的记录
    -- whenever not successful 
    SQL> audit session whenever not successful;              -- 审计登录
    
    如果要审计操作系统(audit_trail参数设置为OS或XML),使用适当的编辑器,查看在操作系统审计跟踪中创建的文件,查看审计结果。
    如果审计针对数据库(audit_trail参数设置为DB或DB_EXTENDED),审计记录写入数据字典表sys.aud$中,但一般使用视图dba_audit_trail查看审计结果。
    
    审计视图
    dba_audit_trail
    dba_audit_object
    dba_audit_statement
    dba_audit_session
    
三.使用触发器执行基于值的审计
    数据库审计可以捕获到针对某个表执行一条命令的事实,但是没有跟踪受影响的行。例如,如果执行audit insert on hr.employees命令,只要在指定表中插入一行就会生成一条审计记录,但是该审计记录不会包含插入行的实际值。有些时候,我们希望捕获这些实际值,此时就需要使用数据库触发器。
    
CREATE OR REPLACE TRIGGER system.creditrating_audit
AFTER UPDATE OF creditrating
ON oe.customers
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
  IF :old.creditrating != :new.creditrating THEN
    INSERT INTO system.creditrating_audit VALUES(sys_context('userenv','os_user'),sys_context('userenv','ip_address'),:new.cust_id||' credite trating changed from '||:old.creditrating||' to '||:new.creditrating);      
  END IF;
END;
/


四.细粒度审计(fine-grained auditing,FGA)
    细粒度审计可以被配置为只在访问特定行或特定行的特定列时生成审计记录,此外还可以被配置为在违反审计条件时运行一个PL/SQL代码块.
    配置细粒度审计需要使用程序包dbms_fga.创建审计策略使用过程add_policy.
    过程add_policy的参数:
    ·object_schema
    ·object_name
    ·policy_name
    ·audit_condition
    ·audit_column
    ·handler_schema     -- 达到审计条件时所运行过程的用户名
    ·handler_module     -- 达到审计条件时所运行的PL/SQL过程
    ·enable             -- TRUE/FALSE,启用和禁用
    ·statement_types    -- 审计的语句类型: SELECT、INSERT、UPDATE、DELETE
    ·audit_trail
    ·audit_column_opts  -- DBMS_FGA_ANY_COLUMNS/DBMS_FGA_ALL_COLUMNS
    
    创建审计策略例子:
    dbms_fga.add_policy(object_schema => 'HR',
                        object_name => 'EMPLOYEES',
                        policy_name => 'POL1',
                        audit_condition = 'department_id=80',
                        audit_column => 'SALARY');
    
    审计视图:
    dba_audit_trail                    
    dba_fga_audit_trail

    dba_common_audit_trail




    创建角色:
    create role rolename;
    grant create session to rolename [with admin option|with grant option];
    revoke rolename from rolename2;


    grant select on hr.regions to rolename;
    grant rolename to rolename2 with admin option;
    revoke rolename from rolename2

                

猜你喜欢

转载自www.cnblogs.com/hezt1114/p/8975317.html