2016-02-08 1 views
0

Кто-нибудь написал хранимую процедуру, которая может удалить все назначенные роли/привилегии от данного пользователя? Мне нравится делать это без поиска каждой назначенной роли или назначенной привилегии. Аналогично приведенному ниже описанию, но без указания каждой роли и привилегий один за другим. Удалите все роли/привилегии в одном объявлении независимо от назначенной роли. Это для процесса завершения пользователя.SAP Hana Отменить все привилегии и роли от пользователя

CALL REVOKE_ACTIVATED_ROLE ('RoleName', 'username');

ответ

0

Нет такой стандартной функциональности, и я рекомендую быть очень осторожным с автоматически отменя привилегий. Если пользователь сам предоставил привилегии, предоставленные ему с помощью ADMIN OPTION или с помощью опции GRANT OPTION другим пользователям, и эти привилегии будут отменены, это приведет к рекурсивному отзыву предоставленных привилегий.

Вкратце: это может стать неприятным.

Для прекращения работы пользователя с точки зрения безопасности достаточно отключить вход в систему.

Помимо этого, достаточно просто запросить системный вид GRANTED_ROLES и GRANTED_PRIVILEGES для создания операторов REVOKE.

+0

> «Если сам пользователь предоставил привилегии, которые он получил, предоставленную с ADMIN > OPTION или GRANT OPTION других пользователей, и эти привилегии получить > аннулировано, это приводит к рекурсивному отзыву тех предоставившего > привилегии «. Вышеуказанное утверждение неверно. Я не думаю, что существует рекурсивный отзыв, если пользователь теряет привилегии. Я мог бы удалить все роли, назначенные для X-пользователя, который предоставил Y-привилегии другому пользователю, и он не отменяется. Мой первоначальный вопрос: когда я завершаю, я удаляю все роли от данного пользователя как часть нашего стандартного процесса. Я пытаюсь автоматизировать процесс того же процесса. –

+0

Приведенное выше утверждение на самом деле справедливо и даже документально: https://help.sap.com/saphelp_hanaplatform/helpdata/en/20/fc91cb75191014ac15eb4d6f2d7dde/content.htm Это очень легко попробовать это тоже: создать пользователь пароль blabla; создать пользователя b пароль blabla; Создать пользователя c пароль blabla; -> as user a: создать роль rA; создать стол столбца atab (id int); грант выбрать на atab до rA; грант rA на b с возможностью администратора; -> теперь пользователь b получил роль rA. В качестве пользователя b: грант rA на c; -> Теперь пользователь с получил роль ¯ra –

+0

-> проверьте: выберите грантополучателя из granted_roles где role_name = 'RA' GRANTEE B C -> Теперь отменить роль ¯ra от б и снова проверить : отменить rA от b; выберите грантополучателя из предоставленных_ролей, где role_name = 'RA'; GRANTEE A -> все. –

1

Ну, если вы действительно хотите эту процедуру, я использую эту, и она работает.

Он удаляет все предоставленные роли от пользователя. Запустите его, если вы знаете, что делаете.

create procedure myCleanupUser(in i_user varchar(20)) as 
begin 
    declare cursor Roles for 
     SELECT ROLE_NAME FROM "PUBLIC"."EFFECTIVE_ROLES" 
     where USER_NAME=i_user AND GRANTEE_TYPE='USER' AND ROLE_NAME <> 'PUBLIC'; 

    for role as Roles do 
     call REVOKE_ACTIVATED_ROLE(role.ROLE_NAME,i_user); 
    end for; 
end;