При работе с файлами, на стороне сервера приложений, срабатывает множество неявных проверок на полномочия:
- Проверка со стороны ОС
- Проверка на обработку директорий
- Проверка на обработку файлов
- Прочие системные проверки
Далее более подробно о каждой из них.
Проверки операционной системы
Сервер приложений, запускается под определенным пользователем ОС, для этого пользователя должны быть настроены проверки полномочий на уровне ОС. Если для пользователя не будет хватать прав, операторы файлового интерфейса будут возвращать код ошибки sy-subrc отличный от нуля, либо вызывать исключения. В зависимости от ОС, настройка полномочий будет отличаться, более подробно необходимо смотреть в справочной информации к ОС.
Доступ к директориям
Для операторов OPEN DATASET, READ DATASET, TRANSFER и DELETE DATASET срабатывают автоматические проверки, описанные в системной таблице – SPTH:
Поле | Значение |
PATH | Путь к директории |
SAVEFLAG | Если значение «X», файлы из директории PATH включаются в процедуру резервного копирования. |
FS_NOREAD | Если данное поле имеет значение «X», файлы из директории PATH, не могут быть открыты для чтения из ABAP. Данное значение перекрывает поле FS_NOWRITE, и FS_BRGRU, а так же проверки объекта S_DATASET. |
FS_NOWRITE | Если данное поле имеет значение «X», файлы из директории PATH не могут быть открыты для записи в ABAP. Данное значение перекрывает FS_BRGRU, а так же проверки объекта S_DATASET. |
FS_BRGRU | В данном поле содержится группа полномочий. Группа определяется в объекте S_PATH:
Ведение групп полномочий осуществляется в ракурсе: V_SPT |
Пример таблицы:
PATH | SAVEFLAG | FS_NOREAD | FS_NOWRITE | FS_BRGRU |
* | — | X | X | — |
/tmp | — | — | — | — |
/tmp/myfiles | X | — | — | FILE |
Записи означают следующее:
- В первой строке включается запрет на изменение и запись всех файлов на сервере приложений, за исключением директории /tmp.
- Во второй строке разрешается изменение и чтение всех файлов (за исключением директории /myfiles), не зависимо от группы полномочий, при этом файлы не участвуют в системе резервного копирования.
- В третьей строке разрешается запись и изменение файлов, при наличии группы полномочий FILE, файлы из данной директории включаются в резервное копирование.
Проверки, относящиеся к специальным файлам
Доступ к файлам с расширением .pse (Personal Security Environment), проверяется через объект полномочий: S_RZL_ADM, необходимо чтобы в поле ACTVT было значение 01.
Доступ к файлам через объект S_DATASET
Каждый раз, когда происходит обработка файлов через интерфейс, система неявно вызывает проверку объекта полномочий S_DATASET (тр. SU21):
Данный объект содержит следующие поля: PROGRAM — в котором определено имя программы, FILENAME — физическое имя файла, и ACTVT — обозначающее действие над файлом. Если пользователь не обладает необходимыми полномочиями, вызывается обрабатываемое исключение. Для того чтобы избежать вызова исключения, можно заранее проверить полномочия с помощью ФМ: AUTHORITY_CHECK_DATASET, или стандартной проверкой полномочий оператором AUTHORITY-CHECK.
Пример проверки полномочий:
1 2 3 4 5 6 7 8 9 10 |
TYPE-POOLS sabc. CALL FUNCTION 'AUTHORITY_CHECK_DATASET' EXPORTING program = 'ZDATASET' activity = sabc_act_read filename = '/tmp/sapv01' EXCEPTIONS no_authority = 1 activity_unknown = 2. |
Блокировка файлов
Файловый интерфейс не содержит встроенного механизма блокировки. Могут возникать ситуации, когда один файл обрабатывается сразу несколькими программами одновременно. Если несколько программ ведут запись в один файл одновременно, результат подобных действий будет непредсказуемым.
Для того чтобы избежать подобных ситуаций, можно воспользоваться концепцией блокировок SAP, либо использовать уникальные имена файлов через генерацию GUID (UUID).