在teradata过程中创建表时出现SELECT错误



我正在TeraData Studio中的procedure中创建一个易失性表。我得到一个错误:

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)

我遵循了此链接,但无法正确应用GRANT OPTION。有人能建议在哪里授予权限以避免这个错误吗?

当对象的所有者(=存储对象的数据库(与创建者不同时,会弹出此错误。Teradata中的一般修复方法是在数据库级别上使用GRANT SELECT ON db2 to db1 WITH GRANT OPTION,只要db1是数据库而不是用户,这是安全的。

对于存储过程,还有一种选择,即标准SQL中的SQL SECURITY选项。

根据应该能够运行SP的用户,您可以使用SQL SECURITY CREATOR来检查创建者(=运行CREATE PROC的用户(对SP内提交的SQL的权限。或者使用SQL SECURITY INVOKER来检查CALLing用户的权限。

对于动态SQL,规则相当复杂,以上链接提供了所有详细信息。

最新更新