应该都是test阿,不管是用 show user 还是select user from dual

解决方案 »

  1.   

    select * from user_users
      

  2.   

    如果你是connect test/password as sysdba,那么show user出来是sys,这是没有错的,因为你其实是以sysdba身份登录到oracle,那么所有以sysdba身份进入oracle的,都被映射成为sys用户.其实我想你的test是不应该能以sysdba进入到oracle,之所以一个很普通的用户也可以映射为sys,那是因为你的操作系统帐户使用的是管理员帐户,你可以使用一个普通帐户比如user1登录os,再使用test as sysdba登录,那么就会报错,告诉你没有权限.
      

  3.   

    修改一下sqlnet.ora
    把以操作系统登陆给去掉,改为none就可以了
      

  4.   

    下面的语句可以令你更加理解!!SQL> connect test/password@yourdba as sysdba
    create table test_table(name varchar(20));
    已连接。
    SQL> desc test_table
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------
     NAME                                               VARCHAR2(20)
    SQL> show user
    USER 为"SYS"但你用下面的语句就行:
    SQL> connect test_table@youdba 
    已连接。
    SQL> show user
    USER 为"SYS"
    SQL> desc test_table
    ERROR:
    ORA-04043: 对象 test_table 不存在为什么呢!因为一个用户以sysdba登陆都会被引用为sys模式!!
    在这个例子中!!test_tabel是在sys的模式下建立的!!
    所以但以connect test/password@youdba登陆的时候
    就是test模式了而不是sys模式了,所以就出错了!!
      

  5.   

    方法一:
    用以下的方式可以監控登入登出的用戶:
    創建如下的兩張表:
    create table login_log -- 登入登出信息表
    (
        session_id int not null, -- sessionid
        login_on_time  date, -- 登入時間
        login_off_time  date, -- 登出時間
        user_in_db varchar2(30), -- 登入的db user
        machine    varchar2(20),    -- 機器名
        ip_address varchar2(20), -- ip地址
        run_program varchar2(20)    -- 以何程序登入
    );create table allow_user -- 網域用戶表
    (
        ip_address varchar2(20), -- ip地址
        login_user_name nvarchar2(20)   -- 操作者姓名
    );創建如下的兩個觸發器:
    create or replace trigger login_on_info -- 紀錄登入信息的觸發器
    after logon on database 
    Begin 
        insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program)
        select AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program
        from v$session where AUDSID = USERENV('SESSIONID');  --當前SESSION
    END;create or replace trigger login_off_info -- 紀錄登出信息的觸發器
    before logoff on database 
    Begin
    update login_log set  login_off_time = sysdate
    where session_id = USERENV('SESSIONID'); --當前SESSION
    exception
        when others then
         null;
    END;方法二:
    用如下的方式可以審計執行drop動作的事件:
    /**
     * drop語句的審計日誌表
     */
    create table drop_log
    (
        session_id int not null,  -- sessionid
        drop_time  date,  -- drop的時間
        ip_address varchar2(20),  -- ip地址
        object_owner varchar2(30),  -- 對象的擁有者
        object_name varchar2(30),  -- 對象名稱
        object_type varchar2(20),  -- 對象類型
        drop_by_user varchar2(30) -- 執行drop語句的用戶
    );create or replace trigger drop_info 
    after drop on mfg0513user.schema  -- 在mfg0513user用戶上創建審計drop的觸發器
    begin 
        insert into drop_log
         (session_id,
         drop_time,
         ip_address,
         object_owner,
         object_name,
         object_type,
         drop_by_user)
         values(USERENV('SESSIONID'),
         sysdate,
         SYS_CONTEXT('USERENV','IP_ADDRESS'),
         sys.dictionary_obj_owner,
         sys.dictionary_obj_name,
         sys.dictionary_obj_type,
         sys.login_user);    
    end;執行drop的語句我沒有辦法給你抓出來,就像你說的那樣,v$sql不紀錄DDL語句,
    不過對象名稱和對象類型都可以抓出來,我想這對你來說應該足夠了.另外:create和alter動作都可以按照上面的方式建類似的表和類似的觸發器做到.
    希望對你有所幫助.