在 teradata 过程中创建 table 会出现 SELECT 错误
Creating table inside teradata procedure gives SELECT error
我正在 TeraData Studio 中的 procedure
中创建一个易变的 table。我得到一个错误:
Executed as Single statement. Failed [5315 : HY000] SP_EMPLOYEE:An owner referenced by user
does not have SELECT access to DB_EMP.all_emp.code.
Elapsed time = 00:00:00.109
我知道它与 GRANT
选项有关,但我无法正确应用它。这是一小段代码:
replace PROCEDURE DBX_HOME.SP_Employee(IN variable INTEGER)
begin
CREATE VOLATILE TABLE TEST_TABLE AS(
SELECT distinct ID
FROM DB_EMP.all_emp as prod left join DB_EMP_DWH.ID_no as infra
ON prod.code=infra.code_infra
WHERE AND ID MOD 3 = :variable )WITH DATA ON COMMIT PRESERVE ROWS;
end;
-- Run the code below.
CALL DBX_HOME.SP_Employee(0)
我遵循了这个 link,但我无法正确应用 GRANT OPTION
。谁能建议在何处授予权限以避免此错误?
当对象的所有者(= 存储对象的数据库)与创建者不同时,会弹出此错误。 Teradata 中的一般修复是在数据库级别 GRANT SELECT ON db2 to db1 WITH GRANT OPTION
,只要 db1
是数据库而不是用户,它就是安全的。
对于存储过程,有一个替代方案,即标准 SQL 中的 SQL SECURITY 选项。
取决于谁应该能够 运行 您可能会使用 SQL SECURITY CREATOR
的 SP,它检查创建者的权利(=运行 是 CREATE PROC 的用户)对于在 SP 中提交的 SQL。或者 SQL SECURITY INVOKER
检查调用用户的权限。
Dynamic SQL 规则相当复杂,上面的链接有所有细节。
我正在 TeraData Studio 中的 procedure
中创建一个易变的 table。我得到一个错误:
Executed as Single statement. Failed [5315 : HY000] SP_EMPLOYEE:An owner referenced by user
does not have SELECT access to DB_EMP.all_emp.code.
Elapsed time = 00:00:00.109
我知道它与 GRANT
选项有关,但我无法正确应用它。这是一小段代码:
replace PROCEDURE DBX_HOME.SP_Employee(IN variable INTEGER)
begin
CREATE VOLATILE TABLE TEST_TABLE AS(
SELECT distinct ID
FROM DB_EMP.all_emp as prod left join DB_EMP_DWH.ID_no as infra
ON prod.code=infra.code_infra
WHERE AND ID MOD 3 = :variable )WITH DATA ON COMMIT PRESERVE ROWS;
end;
-- Run the code below.
CALL DBX_HOME.SP_Employee(0)
我遵循了这个 link,但我无法正确应用 GRANT OPTION
。谁能建议在何处授予权限以避免此错误?
当对象的所有者(= 存储对象的数据库)与创建者不同时,会弹出此错误。 Teradata 中的一般修复是在数据库级别 GRANT SELECT ON db2 to db1 WITH GRANT OPTION
,只要 db1
是数据库而不是用户,它就是安全的。
对于存储过程,有一个替代方案,即标准 SQL 中的 SQL SECURITY 选项。
取决于谁应该能够 运行 您可能会使用 SQL SECURITY CREATOR
的 SP,它检查创建者的权利(=运行 是 CREATE PROC 的用户)对于在 SP 中提交的 SQL。或者 SQL SECURITY INVOKER
检查调用用户的权限。
Dynamic SQL 规则相当复杂,上面的链接有所有细节。