在变量声明中使用 %TYPE 需要哪些 GRANT 权限
What GRANT privileges are required to use %TYPE in variable declaration
作为 User1
我有 table:
CREATE TABLE USER1.test ( id NUMBER );
如User2
我有程序:
CREATE PROCEDURE USER2.passInATestId(
in_id USER1.TEST.ID%TYPE
)
IS
BEGIN
NULL;
END;
/
然而,编译失败:
PLS-00201: identifier 'USER1.TEST' must be declared
如果我授予 REFERENCES
权限
GRANT REFERENCES ON USER1.TEST TO USER2;
然后我得到:
PLS-00904: insufficient privilege to access object USER1.TEST
如果我授予 SELECT
权限,那么它将编译 - 但是,User2
可以在 table 上执行选择,我不希望他们直接这样做。是否有我可以使用的特权,允许我引用列的类型,而无需同时授予 table?
的 SELECT
能力
一个可能的解决方案是在 USER1
:
拥有的包中创建一个 SUBTYPE
CREATE PACKAGE USER1.TYPE_DEFINITIONS
AS
SUBTYPE TYPE__TEST__ID IS USER1.TEST.ID%TYPE;
END;
/
然后:
GRANT EXECUTE ON USER1.TYPE_DEFINITIONS TO USER2;
程序可以改写为:
CREATE PROCEDURE USER2.passInATestId(
in_id USER1.TYPE_DEFINITIONS.TYPE__TEST__ID
)
IS
BEGIN
NULL;
END;
/
我更喜欢允许变量类型声明直接引用列类型的解决方案,而不是通过间接级别(但这似乎不可能)。
作为 User1
我有 table:
CREATE TABLE USER1.test ( id NUMBER );
如User2
我有程序:
CREATE PROCEDURE USER2.passInATestId(
in_id USER1.TEST.ID%TYPE
)
IS
BEGIN
NULL;
END;
/
然而,编译失败:
PLS-00201: identifier 'USER1.TEST' must be declared
如果我授予 REFERENCES
权限
GRANT REFERENCES ON USER1.TEST TO USER2;
然后我得到:
PLS-00904: insufficient privilege to access object USER1.TEST
如果我授予 SELECT
权限,那么它将编译 - 但是,User2
可以在 table 上执行选择,我不希望他们直接这样做。是否有我可以使用的特权,允许我引用列的类型,而无需同时授予 table?
SELECT
能力
一个可能的解决方案是在 USER1
:
SUBTYPE
CREATE PACKAGE USER1.TYPE_DEFINITIONS
AS
SUBTYPE TYPE__TEST__ID IS USER1.TEST.ID%TYPE;
END;
/
然后:
GRANT EXECUTE ON USER1.TYPE_DEFINITIONS TO USER2;
程序可以改写为:
CREATE PROCEDURE USER2.passInATestId(
in_id USER1.TYPE_DEFINITIONS.TYPE__TEST__ID
)
IS
BEGIN
NULL;
END;
/
我更喜欢允许变量类型声明直接引用列类型的解决方案,而不是通过间接级别(但这似乎不可能)。