【问题标题】:How to create aliases in oracle without sys privilages如何在没有 sys 权限的情况下在 oracle 中创建别名
【发布时间】:2023-04-03 10:16:02
【问题描述】:

我正在尝试为我拥有选择权限的 sh 架构中的表创建别名,我的架构是 cs1761xx。我试图在这些表上获得选择特权,而不必在 sh.xxxx 前面加上前缀。我该怎么做呢?我再次使用的架构是 cs1761xx,我也不打算创建新用户。

    SQL> create synonym customers1 for sh.customers;
    create synonym customers1 for sh.customers
    *
    ERROR at line 1:
    ORA-01031: insufficient privileges

【问题讨论】:

  • 执行上述语句时你登录的是什么shcema?
  • 如上所述,我所在的架构是 cs1761xx,但似乎我没有创建同义词权限,也没有创建公共同义词权限等。根据问题,我不应该也可以创建一个新用户。
  • 这不是创建同义词的重复,但答案可能是我无法实现别名创建。有人可以帮忙吗?
  • 为什么不是重复的?您正在做同样的事情并遇到同样的错误,并且需要您的 DBA 授予您的用户相同的权限。

标签: sql oracle sqlplus


【解决方案1】:

如果您的 DBA 不会授予您创建同义词所需的权限,并且这是一个指代“别名”而不是专门指同义词的课程作业,并且您只需要查询表......那么另一个选项是创建一个视图:

create view customers as select * from sh.customers;

当然,还假设您有这样做的特权。不过,它相当扩展了“别名”的含义。 (您也可以插入、更新和删除,但需要一个代替触发器;但这似乎超出了范围)。

【讨论】:

  • 这实际上是我认为教授的意图。谢谢您的帮助。我很快就会知道我们应该采取什么方法。
【解决方案2】:

使用alter session set current_schema = sh; 以避免必须在架构名称前加上前缀:

SQL> select count(*) from customers;
select count(*) from customers
                     *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> alter session set current_schema = sh;

Session altered.

SQL> select count(*) from customers;

  COUNT(*)
----------
         0

SQL>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    相关资源
    最近更新 更多