我以sysDBA登录类型,用system账号建表后,后来我又以normal登录类型,查询刚建的表,根本无法查询到刚建的表
后来,我以另一个账号登陆,这个账号被我授权由select权限,也是无法查询这个表
对于oracle的用户与角色、表之间的关系,有些浑浊,请知道的给与说明一下,谢谢

解决方案 »

  1.   

    用sysdba登录的话,最后都是使用的sys帐号SQL> conn system/111111
    已连接。
    SQL> show user;
    USER 为"SYSTEM"SQL> conn system/111111 as sysdba
    USER 为"SYS"所以这样的话sysdba创建的对象都在sys的schema里了。这样你normal登录的话,用system访问sys的表空间,需要带上sys.tablanem这样的方式了。
      

  2.   

    不要用sys和system用户做建表等工作,这是特殊帐号,是用来做管理用的专门建个用户或者就用scott/tiger来做练习
      

  3.   

    我们一般是不是以sys和system用户来授权给其他用户相应的权限,如select\create等?
      

  4.   

    当一个用户被授权为connect,并不具有建表的权限,只有被授权为resource,才具有建表的权限,这句话对吧。我在别的地方看到这样的话:Connection:可以建产连接,可以建表
                         Resource:用户可以写procedure,trigger,package
      

  5.   


    是的,往往我们在用system用户创建一个用户之后,直接grant dba to user_name
      

  6.   


    也不要给dba这个权限了,除非你确实需要这个权限一般我们都是给普通用户connect,resource这两种role的身份,connect和resource是oracle里的两种role,这两种role聚合了一定的权限。所以赋予了这样的role,你就拥有这样的权限了。你可以通过
    role_sys_prvis这个数据字典表,知道具体的role的系统权限,注意这里我说到的是系统权限,在ORacle里权限有几种系统权限,角色权限,对象权限,你可以详细看看这里的知识了,或者等待我的blob文来介绍这里我们可以先示范一下查查这个connect的角色具有哪些权限通过role_sys_privs表
    如下
    SQL> select * from role_sys_privs where role='CONNECT';
     
    ROLE                           PRIVILEGE                                ADMIN_OPTION
    ------------------------------ ---------------------------------------- ------------
    CONNECT                        CREATE VIEW                              NO
    CONNECT                        CREATE TABLE                             NO
    CONNECT                        ALTER SESSION                            NO
    CONNECT                        CREATE CLUSTER                           NO
    CONNECT                        CREATE SESSION                           NO
    CONNECT                        CREATE SYNONYM                           NO
    CONNECT                        CREATE SEQUENCE                          NO
    CONNECT                        CREATE DATABASE LINK                     NO
     
    8 rows selected通过上面我们可以看到,如果你给一个用户一个connect的权限的话,实际上这个用户就具有了
    CREATE VIEW
    CREATE TABLE
    ALTER SESSION
    CREATE CLUSTER
    CREATE SESSION
    CREATE SYNONYM
    CREATE SEQUENCE
    CREATE DATABASE LINK
    这样一些权限了。你有兴趣可以把role=‘CONNECT’换成RESOURCE,看看resource具有哪些系统权限。
      

  7.   

    当一个用户有connect权限的时候并不能创建表,是怎么回事
      

  8.   

    主要这里的权限是create table,而不是create any table,所以只能在自己的schema里创建表还有就是,你是不是有表空间的配额的权限。这里这些问题都可能导致你有create table的权限但是还是不能创建表。
      

  9.   


    是不是oracle版本不一样,connect所赋予的权限也不一样?我用的10.2.0.1
    我查出只有在resource下才有建表的权限SQL> select * from role_sys_privs where role='CONNECT';ROLE                           PRIVILEGE                                ADM
    ------------------------------ ---------------------------------------- ---
    CONNECT                        CREATE SESSION                           NOSQL> select * from role_sys_privs where role='RESOURCE';ROLE                           PRIVILEGE                                ADM
    ------------------------------ ---------------------------------------- ---
    RESOURCE                       CREATE SEQUENCE                          NO
    RESOURCE                       CREATE TRIGGER                           NO
    RESOURCE                       CREATE CLUSTER                           NO
    RESOURCE                       CREATE PROCEDURE                         NO
    RESOURCE                       CREATE TYPE                              NO
    RESOURCE                       CREATE OPERATOR                          NO
    RESOURCE                       CREATE TABLE                             NO
    RESOURCE                       CREATE INDEXTYPE                         NO已选择8行。
      

  10.   


    ORACLE安全手册建议我们:
    一般来说“Connection + Resource + OWNER”权限就足够了。
    不要随便用“grant dba to user_name”。