【问题标题】:Grant create privilage on Role in OracleDBMS授予对 Oracle DBMS 中角色的创建权限
【发布时间】:2014-11-18 18:48:41
【问题描述】:

我想创建一个角色,它只具有创建表名 emp 和更新 emp 表的权限。 我发现一些网页说这是不可能的。(据我所知) 我也尝试以下代码。

GRANT CREATE ON emp TO C##HR;

但这不起作用。它会触发以下消息。

Do not attempt to grant or revoke EXECUTE privilege on tables.

有什么办法可以做到上述情况。?还是不可能?

注意:- 我使用的是 ORACLED DBMS 12c

【问题讨论】:

    标签: roles sql-grant oracle12c


    【解决方案1】:

    我不太确定我是否完全理解您要完成的工作。

    您可以授予用户(或角色)CREATE TABLE 权限。这允许他们在自己的模式中创建他们想要的任何表。您不能授予用户创建表的能力,但限制他们可以创建的表的名称。我想如果你想变得非常棘手,你可以授予他们CREATE TABLE 特权,然后创建一个 DDL 触发器,阻止他们创建一个未命名为EMP 的表。这是可能的,但这是一个糟糕的架构——用一只手授予特权,用另一只手部分限制它们,这使得理解用户实际拥有哪些特权变得非常困难。

    如果用户拥有一个表,则该用户将始终有权访问该表中的 INSERTUPDATEDELETE 数据,以及运行像 TRUNCATEDROP 这样的 DDL。即使您设法将用户限制为只能创建名为 EMP 的表,该用户仍将完全控制该表。

    现在,您始终可以选择将您想要的任何内容包装在由更高特权用户(即 DBA)拥有的存储过程中,并赋予用户(或角色)执行该存储过程的能力。例如,DBA 用户可以创建一个接受CREATE TABLE 语句的过程,在调用者拥有的模式之外的模式中创建表,然后授予用户UPDATE 对该表的权限。然后,您可以将此过程的EXECUTE 权限授予您的用户(或角色)。当然,我很难理解你为什么要做这样的事情。但你可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2018-10-11
      • 2011-01-25
      相关资源
      最近更新 更多