【问题标题】:Grant privileges on database to a user [closed]向用户授予数据库权限[关闭]
【发布时间】:2012-08-29 13:48:12
【问题描述】:

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

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

有什么方法可以在 Oracle 中实现这一点?

【问题讨论】:

  • -1 表示没有研究工作:|

标签: oracle sql-grant


【解决方案1】:

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。这使您可以轻松地将相同的角色分配给组织中需要相同权限集的每个人,而不是为m 用户管理n 对象的权限。

【讨论】:

  • 您可能希望查看using roles 来管理权限,然后将适当的角色授予用户,以简化未来的更改。 (这显然是针对@chetan,而不是 Justin!)
【解决方案2】:

是的,它带有 GRANT 语句: GRANT in Oracle documentation

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

【讨论】:

  • 你没有有一个单独的create user声明;如果您 grant 使用 identified by 子句,则如果用户不存在,则将创建该用户。那是您链接到的mentioned in the documentation。但是正如贾斯汀指出的那样,您不能对模式中的所有对象进行全局授权。最接近的可能是授予具有所有必需权限的角色。
猜你喜欢
  • 2013-03-13
  • 1970-01-01
  • 2012-01-29
  • 2014-03-14
  • 2021-02-05
  • 2021-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
相关资源
最近更新 更多