Отзовите нескольких пользователей в Oracle Developer - PullRequest
0 голосов
/ 15 октября 2019

Я хочу удалить роль из списка пользователей на основе оператора select. Мой оператор select работает нормально, но когда я пытаюсь реализовать оператор revoke, я получаю «отсутствующую или недействительную привилегию».

Я предполагаю, что что-то пропускаю команду для чтения списка пользователей, но не уверен, что нужно сделать, чтобы она прошла по списку.

REVOKE ORACLE_ROLE FROM (SELECT GRANTEE
  FROM DBA_ROLE_PRIVS 
  JOIN SYS.DBA_USERS ON DBA_ROLE_PRIVS.GRANTEE = DBA_USERS.USERNAME 
  WHERE DBA_ROLE_PRIVS.GRANTED_ROLE = 'ROLE_1'
  AND DBA_USERS.ACCOUNT_STATUS != 'OPEN'
  AND EXISTS (SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE != 'ROLE_1'));

1 Ответ

0 голосов
/ 15 октября 2019

вы можете сделать это следующим образом:

SELECT 'REVOKE ORACLE_ROLE FROM  ' || GRANTEE || ' ;'
  FROM DBA_ROLE_PRIVS 
  JOIN SYS.DBA_USERS ON DBA_ROLE_PRIVS.GRANTEE = DBA_USERS.USERNAME 
  WHERE DBA_ROLE_PRIVS.GRANTED_ROLE = 'ROLE_1'
  AND DBA_USERS.ACCOUNT_STATUS != 'OPEN'
  AND EXISTS (SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE != 'ROLE_1');

затем выполнить выходы.

если хотите, можете сделать это вручную или в execute immediate

...