向用户授予对数据库的权限

时间:2012-08-29 13:48:12

标签: oracle grant

我想为Oracle中的特定用户授予select权限。它可以在mysql中使用以下查询

GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED      
BY 'password';

我们有什么办法可以在Oracle中实现这一目标吗?

2 个答案:

答案 0 :(得分:2)

MySQL称之为“数据库”更类似于Oracle所谓的“模式”。 Oracle无法将架构中的所有对象授予特定用户的权限,您必须单独授予每个对象的权限。您可以使用一些动态SQL来简化初始授权

BEGIN
  FOR x IN (SELECT *
              FROM dba_tables
             WHERE owner = <<name of schema>>)
  LOOP
    EXECUTE IMMEDIATE 'GRANT select, insert, delete ON ' || 
                         x.owner || '.' || x.table_name ||
                         ' TO <<username>>';
  END LOOP;
END;

但是,每次在架构中创建新对象时,您都需要向用户授予对新用户相同的权限,或者您需要重新运行上面的PL / SQL块。如果您真的想要,DDL触发器可以提交一个作业,该作业将在创建新对象时自动授予权限但不特别推荐。

从可管理性的角度来看,您通常会创建一个将分配所有这些权限的角色,然后assign that role to whatever set of users actually need those DML privileges。这使您可以轻松地为组织中需要相同权限集的每个人分配相同的角色,而不是为n个用户管理m个对象的权限。

答案 1 :(得分:0)

是的,是GRANT声明: GRANT in Oracle documentation

您必须先使用CREATE USER创建用户。