我需要创建一个执行以下操作的过程:
- 撤销直接授予用户的系统权限。(表:dba_sys_privs)
- 撤销直接授予用户的对象权限。(表:dba_tab_privs)
- 它撤销直接授予用户的角色。(表:dba_role_privs)
它必须遍历表并为用户删除所有表。到目前为止,我有 #1 和 #3 工作。但我需要添加#2,我似乎不知道该怎么做。这是我的 #2 代码,但我不断收到错误消息:
//REVOKING OBJECT PRIVILEGES
CREATE or REPLACE PROCEDURE deactivate_user
(p_username IN VARCHAR2) AS
l_username VARCHAR2(30) := UPPER(p_username);
BEGIN
FOR rec IN (SELECT * FROM dba_tab_privs WHERE GRANTEE = p_username)
LOOP
EXECUTE IMMEDIATE 'REVOKE ALL PRIVILEGES ON TABLE '||rec.owner||'.'||rec.table_name||' FROM '||rec.grantee;
END LOOP;
END;
/
当我尝试执行代码:SQL> exec deactivate_user('BLAKE'),我得到这个错误:错误:在第 1 行:ORA-06550:表或视图不存在 ORA-06512:在“SYS.DEACTIVATE_USER”,第 7 行
非常感谢您的帮助!