【问题标题】:Grant Privileges for Oracle授予 Oracle 权限
【发布时间】:2015-11-01 13:03:29
【问题描述】:

我想授予用户对架构中所有表的更新权限,但更新主键除外。有简单的方法吗?或者我应该为每个表单独执行并定义每一列。

它是如何工作的?我相信有一个简单的方法可以做到这一点。我正在阅读所有文档,但它给了我所有通用示例。

【问题讨论】:

    标签: sql database oracle privileges sql-grant


    【解决方案1】:
    declare 
      myquery varchar2(1024);
    begin
      for rc in (select * from user_tab_cols u
      where not exists (
        select * from 
           user_constraints c
          ,user_cons_columns cc        
        where c.constraint_type = 'P'
          and c.constraint_name = cc.column_name
          and u.table_name = cc.table_name
          and u.column_name = cc.column_name
      )) loop
        myquery := 'GRANT  update ('||rc.column_name||') on '||rc.table_name||' to myuser';
        --dbms_output.put_line(myquery);
        execute immediate myquery;
      end loop;
    end;  
    

    附言我不确定描述中的“所有表格”是什么意思。在我对当前架构中所有表的查询中,如果您需要数据库中的所有表将 user*** 更改为 all***,即 user_constraints 到 all_constraints 等。

    【讨论】:

    • 感谢您的回答。但是,我可以授予用户所有权限,然后撤销更新列名吗?这行得通吗?
    【解决方案2】:

    按顺序连接用户以获得授予权限

    对于除了 UPDATE 删除这个

    BEGIN
      FOR x IN (SELECT * FROM user_tables)
      LOOP
        EXECUTE IMMEDIATE 'GRANT SELECT, UPDATE, DELETE, INSERT ON ' || x.table_name || ' TO <user>';
      END LOOP;
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多