从oracle中的模式中获取当前和新表

时间:2015-10-24 22:37:31

标签: oracle oracle11g

如果不使用GRANT SELECT ANY TABLE,我将如何仅从一个模式授予对所有表的访问权限。

实施例: 有三个用户。 u1,u2,u3。 u1需要访问u2所有的表,但不需要访问u3所拥有的表。 我可以循环遍历所有表并单独授予它们。 但是u2后来创建的新表呢? u1也需要这些表格。

我怎样才能自动授予这些新表?

1 个答案:

答案 0 :(得分:1)

我相信您可以使用AFTER CREATE触发器执行此操作。以下示例不处理您的所有U1 / U2 / U3逻辑 - 您必须添加它 - 但它应该给您基本的想法:

CREATE TRIGGER AUTO_GRANT
  AFTER CREATE ON SCHEMA
BEGIN
  IF ORA_DICT_OBJ_TYPE = 'TABLE' THEN
    EXECUTE IMMEDIATE 'GRANT SELECT ON ' || ora_dict_obj_owner || '.' ||
                       ora_dict_obj_name ' TO U1';

  END IF;
END AUTO_GRANT;

Docs here

祝你好运。