【问题标题】:Why I get this error? SQL0551N The statement failed because the authorization ID为什么我会收到此错误? SQL0551N 语句失败,因为授权标识
【发布时间】:2023-01-28 03:51:39
【问题描述】:

我想从我拥有 select 语句权限的另一个视图创建一个视图。但是,我不能,而且我收到了这个错误。你知道为什么吗?我需要其他类型的选择权限吗?

SET CURRENT SCHEMA = SCHEMA1;

CREATE VIEW NEWSCHEMA.MYVIEW AS SELECT  * FROM DB1.SCHEMA1.VIEW1

WITH NO ROW MOVEMENT;

SET CURRENT SCHEMA = NEWSCHEMA;

COMMIT;

完整的错误信息:

类别行位置时间戳持续时间消息错误 3 0 01/27/2023 11:24:05 AM 0:00:00.007 - DB2 数据库错误:错误 [42501] [IBM][DB2/AIX64] SQL0551N 语句失败,因为 授权 ID 没有所需的授权或特权 执行操作。授权 ID:“NEWSCHEMA”。手术: “选择”。对象:“SCHEMA1.VIEW1”。

SELECT GRANTEE, GRANTEETYPE, CONTROLAUTH, SELECTAUTH FROM SYSCAT.TABAUTH WHERE (TABSCHEMA, TABNAME) = ('SCHEMA1', 'VIEW1') AND GRANTEETYPE IN ('U', 'R')

结果:

【问题讨论】:

  • 使用完整的错误消息编辑您的问题。
  • @MarkBarinstein 刚刚做了,谢谢!
  • 您真的尝试使用由三部分组成的名称 DB1.SCHEMA1.VIEW1 在联合对象上创建视图吗?或者这是一个拼写错误,您尝试在本地视图(或引用联合对象的昵称)上创建视图?
  • DB1 是数据库名称,然后 View1 在 Schema1 中。我正在尝试在同一个 DB1 中的个人模式中创建一个视图。所以它将是 DB1.NEWSCHEMA.MYVIEW
  • 使用以下查询的结果编辑您的问题。 SELECT GRANTEE, GRANTEETYPE, CONTROLAUTH, SELECTAUTH FROM SYSCAT.TABAUTH WHERE (TABSCHEMA, TABNAME) = ('SCHEMA1', 'VIEW1') AND GRANTEETYPE IN ('U', 'R')

标签: db2 db2-luw toad-data-point


【解决方案1】:

之所以高赞是因为有以下CREATE VIEW授权要求:

授权
授权 ID 所拥有的特权 声明必须至少包含以下权限之一:

IMPLICIT_SCHEMA 对数据库的权限,如果视图的隐式或显式模式名称不存在
如果视图的模式名称引用现有模式,则模式的 CREATEIN 特权
如果视图的模式名称引用现有模式,则模式的 SCHEMAADM 权限 DBADM权限

对于每个表、视图或 在任何全查询中标识的昵称:

控制该表、视图或昵称的特权
选择该表、视图或昵称的特权
对包含表、视图或昵称的模式的 SELECTIN 特权 对包含表、视图或昵称的模式的 DATAACCESS 权限
数据访问权限
...
对于 CREATE VIEW 语句中指定的任何表或视图,不考虑组权限。

因此,您可能真的有能力从这个视图中进行选择,但您可能通过某些组成员资格拥有它,但不是个人或通过某些角色。
这就是您收到此错误的原因。
您可以要求您的 SECADM 或视图所有者授予您的授权 ID SELECT 特权以解决该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 2022-01-23
    • 2018-06-22
    • 2016-01-01
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多