比如 A 用户创建了数据库tab1,创建表a,写了个packages 如下:
CREATE OR REPLACE PACKAGE pack_emsno AS
        PROCEDURE pro_temp
        (
                ...........        );
END pack_emsno;
/
如何建一个用户B 对数据库tab1只有select 权限,和调用存储过程的权限?

解决方案 »

  1.   

    我是用asp访问oracle,设置一个只有select和调用存储过程权限的用户,会加强安全性
      

  2.   

    我是用JAVA访问ORACLE的。我是这样做的,后台不管。在数据库中,我的用户表权限分得比较细。一个超级用户开始进入系统,然后分配用户。用户注册只有定义好的基本功能。想要用户只有查询权就只有查询权。所以不会有太大的安全漏洞。
      

  3.   

    不好意思:< 可能俺没看懂
    如何建一个用户B 对数据库tab1只有select 权限,和调用存储过程的权限?问题本身就是答案吧
    在oracle里面可以设置这样的用户的
      

  4.   

    我意思是 tab1 数据库是 A用户创建的,存储过程也是 A用户创建的,现在想增加一个 B 用户,B用户只能对 tab1 数据库有select 权限和调用其存储过程的权限!
      

  5.   

    用A登录
    grant select on tab1 to B
      

  6.   

    要调用存储过程 pack_eno 呢?
      

  7.   

    Create A procedure 
    1.Get All A user's table List
    2.For each Table Dynamic grant select  to B3.Get All A user's Procedure list
    4.For each Table Dynamic grant "Execute"  to B 
      

  8.   

    PROCEDURE GRANT_READONLY
       ( Fromuser IN Varchar2,
         ToUser IN Varchar2 )
       IS
       TabName User_Tables.table_name%TYPE;
       Cursor Tablist is select TABLE_NAME from All_Tables A where A.owner = FromUser;
    BEGIN
        Open TabList;
        LOOP
            fetch Tablist into TabName;
            Execute immediate 'Grant SELECT ON ' || TabName || ' to ' || ToUser;
            --DBMS_SQL.execute()  Grant TabName to ToUser
            EXIT WHEN TABLIST%NOTFOUND;
        END LOOP;
        Close TabList;
        null;
    END; -- Procedure
      

  9.   

    PROCEDURE GRANT_EXECUTE
       ( Fromuser IN Varchar2,
         ToUser IN Varchar2 )
       IS
       ObjName All_Objects.OBJECT_name%TYPE;
       Cursor Proclist is select OBJECT_NAME from All_Objects A where A.owner = FromUser and A.Object_TYPE = 'PROCEDURE';
    BEGIN
        Open ProcList;
        LOOP
            fetch Proclist into ObjName;
            Execute immediate 'Grant execute ON ' || ObjName || ' to ' || ToUser;
            EXIT WHEN ProcLIST%NOTFOUND;
        END LOOP;
        Close ProcList;
        null;
    END;
      

  10.   

    应该 grant select on tablename to username就可以吧