【问题标题】:How to run a function from system?如何从系统运行功能?
【发布时间】:2017-05-16 17:41:09
【问题描述】:

所以我有一个名为 doLogin 的函数,它接收两个参数,并且我创建了一个名为 user_login 的用户。 我已授予 user_login 以下权限:

GRANT CREATE SESSION TO user_login;
GRANT EXECUTE ON DoLogin TO user_login;
GRANT SELECT ON Utilizadores TO user_login; --do Login gets information from this table

但是当使用 user_login 连接并尝试运行该函数时,我收到以下错误:

错误:java.sql.SQLException:ORA-06550:第 1 行,第 13 列:PLS-00201:必须声明标识符“DOLOGIN” ORA-06550:第 1 行,第 7 列:PL/SQL:忽略语句

编辑:我希望只有 system 和 user_login 可以访问此功能

【问题讨论】:

  • 也许您需要使用 SCHEMA.DoLogin 调用它,或者定义一个公共同义词?
  • 我该怎么做呢?
  • @Aleksej 我试过了:ALTER SESSION SET CURRENT_SCHEMA = user_login

标签: sql oracle function plsql grant


【解决方案1】:

假设您在架构中定义了函数DoLogin(例如yourSchema),并且您需要在不同的用户中使用它,例如user_login

您可以决定使用

调用该函数
yourSchema.DoLogin

或从yourSchema 中创建一个公共同义词,然后在不添加架构名称的情况下调用该函数:

create public synonym DoLogin for DoLogin

【讨论】:

  • 非常感谢您的回答!这确实解决了我的问题,但可以更好地解释什么是同义词,我看过这个问题:stackoverflow.com/questions/2364818/… 但我不是很理解
  • 顺便说一句,所有用户都可以访问创建的同义词(如果是这样,那不是我想要的)
  • 如果您创建一个公共同义词,它将对每个用户可见,只有具有 EXECUTE 权限的用户才能运行该函数。换句话说,您可以将公共同义词视为避免编写 SCHEMA.object 的一种方式,但它们没有授予任何权限
  • 或在user_login 中创建一个private 同义词并使其引用yourSchema.DoLogin,这样您就可以在user_login 的任何地方使用它而无需将其暴露给其他用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 2020-04-09
  • 2017-09-27
  • 2015-03-06
相关资源
最近更新 更多