我有 Oracle 示例模式
HR
、OE
和 SH
,它们分别与用户 hr
、oe
和 sh
相关联。 当我以 sh
用户身份登录时,它会自动访问所有 SH 模式表,就像“oe”用户访问 OE
模式和 hr
用户访问 HR
模式一样。 所以我“假设”用户是上面相应模式的所有者。
作为
sh
用户,我可以使用以下命令成功授予“hr”用户对所有 SH 模式表的读取权限:
`GRANT SELECT ANY TABLE to hr`
但是,当我以“oe”用户身份登录时,尽管我可以访问所有 OE 架构表,但当我运行与上面相同的 SQL 命令以向
hr
用户授予读取访问权限时,我会收到“缺少权限”错误。 错误信息如下所示:
Error starting at line : 4 in command -
GRANT SELECT ANY TABLE TO hr
Error report -
ORA-01031: insufficient privileges
01031. 00000 - "insufficient privileges"
*Cause: An attempt was made to perform a database operation without
the necessary privileges.
*Action: Ask your database administrator or designated security
administrator to grant you the necessary privileges
感谢其他 stackoverflower 的意见来解决这个
grant
问题。还想知道正确的 Oracle SQL 来检查特定模式的所有者。
我有版本为
21.21.1.204
的 SQL Developer 和“Oracle IDE”版本为 21.21.204.1703
。
GRANT SELECT ANY TABLE to hr
不会向执行该语句的用户所拥有的对象授予权限。它向 all 模式拥有的 all 表授予权限,无论谁运行该语句,并且通常只有 DBA 才能执行此操作。显然,在您的安装中,HR 具有 DBA 级别的权限,而 OE 则没有。
Oracle 中没有内置模式级权限。要实现类似的目标,您必须定义一个角色,将给定架构拥有的所有表的 select 权限授予该角色,然后将该角色授予您想要授予访问权限的用户。