是否可以在存储过程中向用户授予角色?

Is it possible to Grant Roles to Users in a Stored Procedure?

我正在研究 DB2 数据仓库。我正在尝试编写一个涉及向输入用户授予角色的存储过程。

CREATE OR REPLACE MYSCHEMA.PROCEDURE SP_CHECKIN_USER (
IN userid varchar(9),
IN groupid varchar(10)
) LANGUAGE SQL
BEGIN

-- do some work here
GRANT ROLE groupid TO USER userid;

END

当我尝试 运行 时,出现错误:

"GROUPID" is undefined name .. SQLCODE=-204, SQLSTATE=42704, DRIVER=...
Run of routine failed.

是的,如果您在存储过程中对 grant role 使用动态 SQL 是可能的。

例如:

   declare v_sql varchar(1024);
   set v_sql = 'grant role '||trim(p_groupid)||' to user '||trim(p_userid)||' ';
   execute immediate v_sql;

请记住,所有其他规则仍然适用,角色必须预先存在,用户必须预先存在,authid 必须具有所有相关权限等。