用ADO对数据库进行访问,想在连接成功之后做一下当前用户权限的判断,看是否拥有管理员权限,如果不是管理员,则返回重新填写登陆信息,有什么命令可以判断当前用户是否拥有管理的吗?或者是有什么语句只有管理员级别的才可以执行,如果当前用户执行该语句出错,则该用户不为管理员权限?

解决方案 »

  1.   

    你可以试试查询几个动态性能视图(如v$session,v$transaction) 或者数据字典(以dba_开头的表,dba_data_files,dba_tables,dba_tablespaces) 如果有权限查询这些表基本就说明有dba权限了 当然 最好还是有正规点的办法
      

  2.   

    连线过,select userenv('ISDBA') from dual;
    返回true --> 有DBA权限.
    返回false --> 无DBA权限.
      

  3.   


    SQL> select * from session_roles;ROLE
    ------------------------------
    CONNECT
    RESOURCE
    DBA
    SELECT_CATALOG_ROLE
    HS_ADMIN_ROLE
    EXECUTE_CATALOG_ROLE
    DELETE_CATALOG_ROLE
    EXP_FULL_DATABASE
    IMP_FULL_DATABASE
    GATHER_SYSTEM_STATISTICS
    SCHEDULER_ADMINROLE
    ------------------------------
    WM_ADMIN_ROLE
    JAVA_ADMIN
    JAVA_DEPLOY
    XDBADMIN
    XDBWEBSERVICES
    OLAP_DBA
    PLUSTRACE18 rows selected.SQL> select userenv('ISDBA') from dual;USEREN
    ------
    FALSESQL> conn system/oracle
    Connected.
    SQL> select userenv('ISDBA') from dual;USEREN
    ------
    FALSESQL> conn system/oracle as sysdba
    Connected.
    SQL> select userenv('ISDBA') FROM DUAL;USEREN
    ------
    TRUE
    意思好像是只有sysdba才是true哦。。是不是我的环境有什么问题?
      

  4.   

    看看,这应该就是整天唱戏玩票儿,不花时间去锻炼专业技术的结果吧 :)select count(*) from dba_role_privs where grantee='SYSTEM' and GRANTED_ROLE='DBA';
    1
    select count(*) from dba_role_privs where grantee='SCOTT' and GRANTED_ROLE='DBA';
    0
      

  5.   

    一般用户有connect与resource这两个权限就够了,如果你要导数据,备份,建议还是用DBA权限吧,
    用有DBA权限的帐号登陆,然后给你所用的用户赋权   
    grant dba to useraccount; 
      

  6.   

    判断是否为dba角色未必准确哦.
    如果我是单独把dba角色的所有权限一项项赋予某个用户,这样这个用户实际拥有dba的所有权限,但是没有dba橘色.