如何向 DB2 z/OS 中的用户授予完整数据库的授权 select
How to give grant select on full database to user in DB2 z/OS
我想将数据库中所有 table 的 select 权限授予 db2 z/OS 或大型机中的特定用户。
我知道通过以下查询,我们可以通过 运行 ibmuser.
在 table 上向用户授予 select
GRANT SELECT ON <TableName> TO <UserName>
但是我在 ibmuser 中使用 Db2 z/OS 存储过程进行了相同的尝试:
CREATE PROCEDURE GRANT_SELECT_ON_DB(
IN DatabaseName varchar(255),
IN UserName varchar(255))
LANGUAGE SQL
BEGIN
DECLARE v_NAME VARCHAR(64);
DECLARE v_CREATOR VARCHAR(64);
DECLARE v_GrantQuery VARCHAR(320);
DECLARE c1 CURSOR FOR
(SELECT NAME,CREATOR FROM SYSIBM.SYSTABLES tabs WHERE upper(dBname)=upper(DatabaseName));
OPEN c1;
fetch_loop:
LOOP
FETCH c1 INTO v_NAME,v_CREATOR ;
SET v_GrantQuery = 'grant select on '|| v_CREATOR ||'.'|| v_NAME ||' to '|| UserName;
EXECUTE IMMEDIATE v_GrantQuery;
END LOOP fetch_loop;
CLOSE c1;
END%
调用存储过程时,它卡在加载中,没有产生任何结果或错误。
call IBMUSER.GRANT_SELECT_ON_DB('<DatabaseName>','<UserName>')%
另外 GRANT SELECT ON <DatabaseName> TO <UserName>
不工作,因为它在 DB2 z/OS 中不受支持。
请建议。可能是我缺少一些基础知识。
你可以试试下面的方法,对我有用:
CREATE PROCEDURE GRANT_SELECT_ON_DB(IN DatabaseName varchar(255),
IN UserName varchar(255))
LANGUAGE SQL
MODIFIES SQL DATA
BEGIN
DECLARE v_NAME VARCHAR(400);
DECLARE v_CREATOR VARCHAR(400);
DECLARE v_GrantQuery VARCHAR(1000);
FOR v1 AS
c1 CURSOR FOR
SELECT NAME,CREATOR FROM SYSIBM.SYSTABLES tabs WHERE upper(dBname)=upper(DatabaseName)
DO
SET v_NAME = NAME;
SET v_CREATOR = CREATOR;
SET v_GrantQuery = 'grant select on '|| v_CREATOR ||'.'|| v_NAME ||' to '|| UserName;
EXECUTE IMMEDIATE v_GrantQuery;
END FOR;
END%
call IBMUSER.GRANT_SELECT_ON_DB('<DatabaseName>','<UserName>')%
我想将数据库中所有 table 的 select 权限授予 db2 z/OS 或大型机中的特定用户。 我知道通过以下查询,我们可以通过 运行 ibmuser.
在 table 上向用户授予 selectGRANT SELECT ON <TableName> TO <UserName>
但是我在 ibmuser 中使用 Db2 z/OS 存储过程进行了相同的尝试:
CREATE PROCEDURE GRANT_SELECT_ON_DB(
IN DatabaseName varchar(255),
IN UserName varchar(255))
LANGUAGE SQL
BEGIN
DECLARE v_NAME VARCHAR(64);
DECLARE v_CREATOR VARCHAR(64);
DECLARE v_GrantQuery VARCHAR(320);
DECLARE c1 CURSOR FOR
(SELECT NAME,CREATOR FROM SYSIBM.SYSTABLES tabs WHERE upper(dBname)=upper(DatabaseName));
OPEN c1;
fetch_loop:
LOOP
FETCH c1 INTO v_NAME,v_CREATOR ;
SET v_GrantQuery = 'grant select on '|| v_CREATOR ||'.'|| v_NAME ||' to '|| UserName;
EXECUTE IMMEDIATE v_GrantQuery;
END LOOP fetch_loop;
CLOSE c1;
END%
调用存储过程时,它卡在加载中,没有产生任何结果或错误。
call IBMUSER.GRANT_SELECT_ON_DB('<DatabaseName>','<UserName>')%
另外 GRANT SELECT ON <DatabaseName> TO <UserName>
不工作,因为它在 DB2 z/OS 中不受支持。
请建议。可能是我缺少一些基础知识。
你可以试试下面的方法,对我有用:
CREATE PROCEDURE GRANT_SELECT_ON_DB(IN DatabaseName varchar(255),
IN UserName varchar(255))
LANGUAGE SQL
MODIFIES SQL DATA
BEGIN
DECLARE v_NAME VARCHAR(400);
DECLARE v_CREATOR VARCHAR(400);
DECLARE v_GrantQuery VARCHAR(1000);
FOR v1 AS
c1 CURSOR FOR
SELECT NAME,CREATOR FROM SYSIBM.SYSTABLES tabs WHERE upper(dBname)=upper(DatabaseName)
DO
SET v_NAME = NAME;
SET v_CREATOR = CREATOR;
SET v_GrantQuery = 'grant select on '|| v_CREATOR ||'.'|| v_NAME ||' to '|| UserName;
EXECUTE IMMEDIATE v_GrantQuery;
END FOR;
END%
call IBMUSER.GRANT_SELECT_ON_DB('<DatabaseName>','<UserName>')%