我需要给用户 TARGETUSER 授予对用户 SOURCEUSER 所有表的选择/插入/更新权限(我可以从这里找到所有信息),并允许他们运行所有存储过程。
基本上,如果我能让 TARGETUSER 能够执行 SOURCE_USER 对象的所有非 DDL 活动,我就不会抱怨了。我该如何做到这一点?
基本上,如果我能让 TARGETUSER 能够执行 SOURCE_USER 对象的所有非 DDL 活动,我就不会抱怨了。我该如何做到这一点?
BEGIN
FOR Rec IN (SELECT object_name, object_type FROM all_objects WHERE owner='SOURCEUSER' AND object_type IN ('TABLE','VIEW','PROCEDURE','FUNCTION','PACKAGE')) LOOP
IF Rec.object_type IN ('TABLE','VIEW') THEN
EXECUTE IMMEDIATE 'GRANT SELECT, UPDATE, INSERT, DELETE ON SOURCEUSER.'||Rec.object_name||' TO TARGETUSER';
ELSIF Rec.object_type IN ('PROCEDURE','FUNCTION','PACKAGE') THEN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON SOURCEUSER.'||Rec.object_name||' TO TARGETUSER';
END IF;
END LOOP;
END;
不确定您还需要什么。您可以修改以上内容,以添加其他授权和/或对象类型,以提供给目标用户所需的权限。正如@stili所示,您可以使用角色完成很多工作,但请小心 - 某些权限授予角色时可能无法正常工作。
SELECT 'GRANT SELECT, UPDATE, DELETE, INSERT ON ' || table_name || ' TO other_user;'
FROM all_tables WHERE owner = 'other_user';
UNION ALL
SELECT 'GRANT EXECUTE ON ' || object_name || ' TO other_user;'
FROM all_objects
WHERE owner = 'other_user'
AND object_type IN ('FUNCTION', 'PROCEDURE', 'PACKAGE');
admin_option
和 default_role
。SELECT 'GRANT ' || granted_role || ' TO other_user;'
FROM user_role_privs;
或者,您可以查询 dba_role_privs
来获取特定用户的角色:
SELECT 'GRANT ' || granted_role || ' TO other_user;'
FROM dba_role_privs WHERE grantee = 'source_user';