zoukankan      html  css  js  c++  java
  • oracle一些常见的问题

    1. 对于权限审计和大部分语句,by session无效,无论指定by session/by access还是不指定,审计都自动为by access。
    2. 审计的语句级可以指定ALL,但是ALL只包括大部分语句,它不包括下面这些语句。

    ALTER SEQUENCE, ALTER TABLE, COMMENT TABLE, DELETE TABLE, EXECUTE PROCEDURE, GRANT DIRECTORY, GRANT PROCEDURE, GRANT SEQUENCE, GRANT TABLE, GRANT TYPE, INSERT TABLE, LOCK TABLE, SELECT SEQUENCE, SELECT TABLE, UPDATE TABLE

    1. 对于语句和权限审计,生效从执行语句后下一个登陆用户开始,当前的所有session不受影响。而对象的审计,则从审计语句开始后对当前所有的用户生效。
    2. 可以使用NOAUDIT ALL、NOAUDIT ALL PRIVILEGE取消所有的语句、权限的审计,但是如果在审计的时候指定了用户,则NOAUDIT ALL或NOAUDIT ALL PRIVILEGE的时候,不会取消这些明确用户的审计,必须在NOAUDIT的时候也明确的指出相应的用户。

    例1.只有少数语句审计可以设置BY SESSION,其他的语句审计和所有权限审计都只能设置为BY ACCESS。

    SQL> audit create table;

    审计已成功。

    SQL> audit create any table by session;

    审计已成功。

    SQL> audit create view by access;

    审计已成功。

    SQL> select user_name, privilege, success, failure from dba_priv_audit_opts;

    USER_NAME            PRIVILEGE                    SUCCESS    FAILURE

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

                         CREATE TABLE                 BY ACCESS  BY ACCESS

                         CREATE ANY TABLE             BY ACCESS  BY ACCESS

                         CREATE VIEW                  BY ACCESS  BY ACCESS

    SQL> NOAUDIT ALL PRIVILEGE;

    审计未成功。

    SQL> AUDIT TABLE;

    审计已成功。

    SQL> AUDIT VIEW BY SESSION;

    审计已成功。

    SQL> AUDIT TRIGGER BY ACCESS;

    审计已成功。

    SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

    USER_NAME               AUDIT_OPTION            SUCCESS    FAILURE

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

                            TRIGGER                 BY ACCESS  BY ACCESS

                            TABLE                   BY ACCESS  BY ACCESS

                            VIEW                    BY ACCESS  BY ACCESS

    SQL> AUDIT LOCK TABLE BY SESSION;

    审计已成功。

    SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

    USER_NAME               AUDIT_OPTION            SUCCESS    FAILURE

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

                            TRIGGER                 BY ACCESS  BY ACCESS

                            TABLE                   BY ACCESS  BY ACCESS

                            VIEW                    BY ACCESS  BY ACCESS

                            LOCK TABLE              BY SESSION BY SESSION

    通过测试,我们发现对于大部分的语句和权限,只能设置为BY ACCESS。

    例2.接着上面的例子

    我们取消对所有语句的审计,但是发现对于LOCK TABLE无效

    SQL> NOAUDIT ALL;

    审计未成功。

    SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

    USER_NAME              AUDIT_OPTION           SUCCESS    FAILURE

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

                           LOCK TABLE             BY SESSION BY SESSION

    SQL> NOAUDIT LOCK TABLE;

    审计未成功。

    SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

    未选定行

    例3.

    SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

    未选定行

    SQL> SELECT USERID, ACTION#, OBJ$NAME, PRIV$USED FROM SYS.AUD$;

    未选定行

    SQL> AUDIT TABLE;

    审计已成功。

    SQL> AUDIT CREATE ANY TABLE;

    审计已成功。

    SQL> AUDIT SELECT ON TEST;

    审计已成功。

    SQL> CREATE TABLE TEST_AUDIT (ID NUMBER);

    表已创建。

    SQL> CREATE TABLE TEST.TEST_AUDIT (ID NUMBER);

    表已创建。

    SQL> SELECT COUNT(*) FROM TEST;

      COUNT(*)

    ----------

         18651

    SQL> SELECT USERID, ACTION#, OBJ$NAME, PRIV$USED FROM SYS.AUD$;

    USERID                     ACTION# OBJ$NAME                 PRIV$USED

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

    YANGTK                         103 TEST

    SQL> DROP TABLE TEST_AUDIT;

    表已丢弃。

    SQL> DROP TABLE TEST.TEST_AUDIT;

    表已丢弃。

    SQL> SELECT USERID, ACTION#, OBJ$NAME, PRIV$USED FROM SYS.AUD$;

    USERID                     ACTION# OBJ$NAME                 PRIV$USED

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

    YANGTK                         103 TEST

    我们发现只有对象审计生效了,要使语句级审计和权限级审计生效,必须重新登陆。

    SQL> CONN YANGTK/YANGTK@TEST

    已连接。

    SQL> CREATE TABLE TEST_AUDIT (ID NUMBER);

    表已创建。

    SQL> CREATE TABLE TEST.TEST_AUDIT (ID NUMBER);

    表已创建。

    SQL> SELECT COUNT(*) FROM TEST;

      COUNT(*)

    ----------

         18651

    SQL> SELECT USERID, ACTION#, OBJ$NAME, PRIV$USED FROM SYS.AUD$;

    USERID                     ACTION# OBJ$NAME                 PRIV$USED

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

    YANGTK                           1 TEST_AUDIT                      41

    YANGTK                         103 TEST

    YANGTK                         103 TEST

    YANGTK                           1 TEST_AUDIT                      40

    例4.

    SQL> NOAUDIT ALL;

    审计未成功。

    SQL> NOAUDIT ALL PRIVILEGE;

    审计未成功。

    SQL> NOAUDIT SELECT ON TEST;

    审计未成功。

    SQL> AUDIT TABLE;

    审计已成功。

    SQL> AUDIT VIEW BY YANGTK;

    审计已成功。

    SQL> AUDIT TABLE BY TEST;

    审计已成功。

    SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

    USER_NAME               AUDIT_OPTION            SUCCESS    FAILURE

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

                            TABLE                   BY ACCESS  BY ACCESS

    TEST                    TABLE                   BY ACCESS  BY ACCESS

    YANGTK                  VIEW                    BY ACCESS  BY ACCESS

    SQL> NOAUDIT ALL;

    审计未成功。

    SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

    USER_NAME               AUDIT_OPTION           SUCCESS    FAILURE

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

    TEST                    TABLE                   BY ACCESS  BY ACCESS

    YANGTK                  VIEW                    BY ACCESS  BY ACCESS

    SQL> NOAUDIT TABLE BY TEST;

    审计未成功。

    SQL> NOAUDIT VIEW BY YANGTK;

    审计未成功。

    SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

    未选定行

    审计从审计表中不成功的删除

    Audit delete on sys.aud$ whenever not successful;

    利用下列sql语句来审计从所有表中不成功的删除

    Audit not exists;

    利用下列语句来审计有system用户所执行的过程上的所有授权和取消授权语句

    Audit grant procedure by system;

  • 相关阅读:
    F2E Tool(前端工程师的工具箱)
    SQLServer 语句存档整理
    MySQL DATE_FORMAT() 函数
    sqlserver 自连接 生成一列数据
    mysql存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试
    好书推荐
    Flashfxp 3.4的注册码
    mysql事务处理
    mysql 时间函数 格式化
    【转】PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11113527.html
Copyright © 2011-2022 走看看