为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 8
【操作系统】:windows 11
【CPU】: 11th Gen Intel(R) Core(TM) i5-11500 @ 2.70GHz 2.71 GHz
【问题描述】*:
如题:A用户创建的表授权给B用户访问,B查询不到被授权表的外键约束列?
CREATE OR REPLACE VIEW SYS.ALL_CONS_COLUMNS AS
SELECT /*+ PHC_MODE_ENFORCE(13) */
O1.NAME OWNER,
O2.NAME CONSTRAINT_NAME,
O.NAME TABLE_NAME,
COLS.NAME COLUMN_NAME,
CASE WHEN CON.TYPE$ != 'C' THEN
CAST(SF_GET_INDEX_KEY_SEQ(I.KEYNUM, I.KEYINFO, COLS.COLID) AS NUMBER(10,0))
ELSE
CAST(NULL AS NUMBER(10,0))
END POSITION
FROM SYS.SYSOBJECTS O,
SYS.SYSOBJECTS O1,
SYS.SYSOBJECTS O2,
SYS.SYSCONS CON LEFT JOIN SYS.SYSINDEXES I ON I.ID=CON.INDEXID,
SYS.SYSCOLUMNS COLS
WHERE
O2.SUBTYPE$='CONS' AND O.SUBTYPE$ IN ('UTAB', 'STAB') AND O2.PID=O.ID
AND O1.ID=O.SCHID AND O1.TYPE$ = 'SCH'
AND CON.ID=O2.ID
AND COLS.ID=O.ID
AND (SF_COL_IS_IDX_KEY(I.KEYNUM, I.KEYINFO, COLS.COLID) = 1 OR
SF_COL_IS_CHECK_KEY(O2.INFO1, O2.INFO6, COLS.COLID) = 1)
AND SF_CHECK_USER_TABLE_COL_PRIV_OPT(UID(), CURRENT_USERTYPE(), O.ID, O1.PID, (SELECT INFO1 FROM SYS.SYSOBJECTS WHERE TYPE$ = 'UR' AND ID = O1.PID), COLS.COLID, 0) = 1;
这个视图的最后一个过滤条件
AND SF_CHECK_USER_TABLE_COL_PRIV_OPT(UID(), CURRENT_USERTYPE(), O.ID, O1.PID, (SELECT INFO1 FROM SYS.SYSOBJECTS WHERE TYPE$ = 'UR' AND ID = O1.PID), COLS.COLID, 0) = 1;
似乎是判断用户有没有列的权限?
我理解的是如果授权了表,是不是表相关的信息都有权限访问?
你是直接查询的表,还是通过系统视图进行查看的,你授权的表只是对该表有以下权限,如果你想要使用系统视图查看表信息需要授权对应系统角色才能查看
