我需要创建一个执行以下操作的过程:
-
撤消直接授予用户的系统权限 . (表: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:at“SYS.DEACTIVATE_USER”,第7行
非常感谢您的帮助!
1 回答
表权限的正确命令是:
要么:
而且,添加TABLE关键字也更好 .
所以EXECUTE IMMEDIATE语句应该是:
要么:
Update
在我的第一个答案中,最重要的是缺少:表所有者 .