我新建立了一个账户,给了dba权限,用sysdba登录可以操作表,但是用normal登录却不行,我应该怎么修改权限?在normal状态下用 select   table_name   from   user_tables;   可以看到表名
但使用select * from table 却说表不存在...

解决方案 »

  1.   

    select table_name,OWNER  from  user_tables; 看看owner是谁。看看table_name是大写还是小写另外,你建表的时候是否是用create table “table”这样的形式,如果是这样的形式的话,需要用“table”这样来访问的。另外
    我新建立了一个账户,给了dba权限,用sysdba登录可以操作表,但是用normal登录却不行这里能不能把你用sysdba的登录的命令 贴上来dba和sysdba不是一个概念的。
      

  2.   

    谢谢楼上的朋友,我详细的说明一下我是用别人的dmp还原的数据库,
    还原之后所有表的owner都是 sys然后我新建立了一个test用户,给了所有的角色权限和部分系统权限我还用了 grant select any table to TEST; 执行后返回授权成功然后test 以 sysdba登录,可以用select * from testtable访问并且返回结果但是用 normal登录就说表不存在
      

  3.   

    按你的描述,这个对象的owner已经是sys了所以访问需要加上sys就可以了
    SQL>select * from sys.testtable;
      

  4.   


    任何用户当他以sysdba登录的时候,使用的都是sys的schema,所以建的对象的owner也是sys。
      

  5.   

    那我如果不加sys的话,是不是要用test的normal方式登录数据库然后还原dmp?
      

  6.   

    给用户赋予查询的权限,如下:SQL> show user
    USER 为 "SYS"SQL> select * from zzw_temp8;        ID
    ----------
             1
             2
             8
             8
             8SQL> create user test678 identified by test678
      2  /用户已创建。SQL> grant create session,resource to test678;授权成功。SQL> conn test678/test678;
    已连接。
    SQL> select * from sys.zzw_temp8;
    select * from sys.zzw_temp8
                      *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在
    SQL> conn / as sysdba
    已连接。
    SQL> show user
    USER 为 "SYS"
    SQL> grant select on zzw_temp8 to test678;授权成功。SQL> conn test678/test678;
    已连接。
    SQL> select * from sys.zzw_temp8;        ID
    ----------
             1
             2
             8
             8
             8SQL>
      

  7.   


    上面的兄弟,其实是用个实例给你演示了,需要通过sys.table这样的方式来访问你的sysdba方式登录建的表。
      

  8.   


    应该是不行的,按你原来的做法,你没有注意sysdba的schema是sys的问题,所以虽然你登录是test用户,但是是用sysdba登陆的,所以建立的所有对象都在sys这个schema里,而且系统表空间里有很多的系统表,所以直接transport表空间没有意义。你可以通过下面两种方式来做,如果表少的话,还比较方便,如果表多,你就麻烦了这两种方法多需要
    a. 建立自己的表空间
    b. 把test的默认表空间指定到建立的表空间上去。记住不要在用test以sysdba登录了
    方法1. 给test dba的权限,用exp和imp来做, 基于表的导出导入
    方法2. 给test dba的权限, 通过 create table test.tablename as select * from sys.tablename;的形式在test用户下建立相同的表,然后drop table sys.tablename cascade constraints;把sys下的表drop掉。
      

  9.   

    ok了,直接用test用户导入就ok..