powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Безопасность в 5.1-2007
11 сообщений из 11, страница 1 из 1
Безопасность в 5.1-2007
    #34773345
CJIECAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Как настроить права пользователя, чтобы он мог выполнять SQL выражения для таблиц из области %SYS?
Выполнение запроса "SELECT * FROM %Library.SysLogTable" удалось добиться только если у пользователя есть роль "%All". Самое интересное, что при попытке дать доступ к этой таблице через "[SQL Tables]" в портале управления, система отчитывается об успешном выполнении операции, но таблица так и не добавляется. Почему так происходит?

2) Имеется csp-приложение, в котором пользователь авторизован как UnknownUser. На одной из страниц выполняется метод
Код: plaintext
D ##class(%SysLog).ClearLog()
Для успешного выполнения в рамках процесса добавляется роль "%DB_CACHESYS":
Код: plaintext
S $ROLES=$ROLES_",%DB_CACHESYS"
При выполнении происходит ошибка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Error: <PROTECT>zOnPageBODY+ 9 ^kernel.reference.error.errlist. 1 
ErrorNo:  5002 
CSP Page: /csp/kernel/Reference/Error/ErrList.csp
Namespace: KERNEL
Class: kernel.reference.error.errlist
Routine: kernel.reference.error.errlist. 1 
Location: zOnPageBODY+ 9 
Line: S $ROLES=$ROLES_",%DB_CACHESYS"
Собственно вопрос: как определить какие роли можно устанавливать в $ROLES?

3) Возможно ли определение пользователя с ролью "%All" таким образом, чтобы ему был недоступен портал управления, студия и терминал, но выполнение
Код: plaintext
D $SYSTEM.Security.Login(USER,PASS)
с его логином и паролем в коде приложения происходило успешно?
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34773855
CJIECAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По пункту 2: оказалось, что для програмного изменения переменной $ROLES, пользователю как раз нужен ресурс %DB_CACHESYS с возможностью записи, что по-моему не очень хорошо.

По пункту 3: как я понял такое не возможно, пользователь с ролью %All имеет все права и ограничить их кроме как отключить учётную запись никак нельзя.

Первый вопрос остаётся в силе.
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34776136
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того, чтобы Ваш запрос выполнился SELECT * FROM %Library.SysLogTable
необходимо прописать привилегии пользователя на доступ к таблице %Library.SysLogTable
В настройках безопасности в SMP
[Security Managment]->[User]->[Edit User]
Там есть такая вкладка SQL Tables. Выбираешь схему %Library.SysLogTable и будет тебе счастье.
Роль пользователя у меня была %Development,%SQL,%DB_CACHESYS хотя можно сделать свою, ограничив его в правах.
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34776145
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CJIECAPb
По пункту 3: как я понял такое не возможно, пользователь с ролью %All имеет все права и ограничить их кроме как отключить учётную запись никак нельзя.


Вообще, такое сделать можно.
1. Создается роль, role1
%DB_%DEFAULT
%DB_CACHESYS
%DB_USER
%Development
%Service_Console
%Service_Terminal
2. Создается пользователь test1
В настройках пользователя Default Tag^Routine указывается рутина.
В нужной области создается рутина, которая указана, а в данной рутине можно написать любой код.
У пользователя нет ресурса %Service_CSP, поэтому он не может попасть в SMP
В терминале он не сможет запустить ничего другого, кроме указанной рутины.
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34776290
CJIECAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Peter ZarubinДля того, чтобы Ваш запрос выполнился SELECT * FROM %Library.SysLogTable
необходимо прописать привилегии пользователя на доступ к таблице %Library.SysLogTable
В настройках безопасности в SMP
[Security Managment]->[User]->[Edit User]
Там есть такая вкладка SQL Tables. Выбираешь схему %Library.SysLogTable и будет тебе счастье.
Роль пользователя у меня была %Development,%SQL,%DB_CACHESYS хотя можно сделать свою, ограничив его в правах.
Дык я так и делаю. В том то и проблема: после добавления таблицы каша говорит "Modification saved.", но в спике эта таблица так и не появляется...
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34776310
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CJIECAPb
Дык я так и делаю. В том то и проблема: после добавления таблицы каша говорит "Modification saved.", но в спике эта таблица так и не появляется...

То, что изменения(при назначении привилегий на схемы в %SYS) не отображаются в SMP - это баг каше (об этом я говорил в Support)
Но, в действительности, все назначенные привилегии работают.
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34776424
CJIECAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного разобрался. Действительно, привилегия действует. Проблема как оказалось связана с тем, что в приложении я выполняю этот запрос не в области "%SYS". Как быть в этом случае? Как предоставить привелегии для таблиц смаппированных из "%SYS"? Конечно перед запросом можно выполнять zn "%SYS" но меня это не устраивает, т.к. запрос на самом деле прописывается не мной, а генерируется давно написанной и отлаженной компонентой, внутрь которой не очень хочется лезть, кроме того в этом случае встаёт проблема выполнения более сложных запросов, в которых фигурируют как таблицы из текущей области, так и из области "%SYS". Есть идеи?
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34776462
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CJIECAPbНемного разобрался. Действительно, привилегия действует. Проблема как оказалось связана с тем, что в приложении я выполняю этот запрос не в области "%SYS". Как быть в этом случае? Как предоставить привелегии для таблиц смаппированных из "%SYS"? Конечно перед запросом можно выполнять zn "%SYS" но меня это не устраивает, т.к. запрос на самом деле прописывается не мной, а генерируется давно написанной и отлаженной компонентой, внутрь которой не очень хочется лезть, кроме того в этом случае встаёт проблема выполнения более сложных запросов, в которых фигурируют как таблицы из текущей области, так и из области "%SYS". Есть идеи?


Что приходит на ум: это сделать mapping системных классов, которые ты хочешь использовать.
Это можно сделать и программно. Тогда в прикладной области можно будет к ним обратиться.
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34776878
CJIECAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Peter Zarubin CJIECAPbНемного разобрался. Действительно, привилегия действует. Проблема как оказалось связана с тем, что в приложении я выполняю этот запрос не в области "%SYS". Как быть в этом случае? Как предоставить привелегии для таблиц смаппированных из "%SYS"? Конечно перед запросом можно выполнять zn "%SYS" но меня это не устраивает, т.к. запрос на самом деле прописывается не мной, а генерируется давно написанной и отлаженной компонентой, внутрь которой не очень хочется лезть, кроме того в этом случае встаёт проблема выполнения более сложных запросов, в которых фигурируют как таблицы из текущей области, так и из области "%SYS". Есть идеи?


Что приходит на ум: это сделать mapping системных классов, которые ты хочешь использовать.
Это можно сделать и программно. Тогда в прикладной области можно будет к ним обратиться.

Маппинг системных классов делается автоматически во все области. Если бы проблема была в этом, то выдавалось бы сообщение "Not found", а не "SQL Privilege Violation", кроме того запрос также не работал бы при наличии роли %All.

Можно ли программно изменять SQL привилегии роли и пользователя? Возможно именно так удастся решить проблему.
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34779626
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CJIECAPb
Можно ли программно изменять SQL привилегии роли и пользователя? Возможно именно так удастся решить проблему.

Да, программно можно изменить SQL привилегии. Это делается сл. образом:
Код: plaintext
1.
2.
s filexml="privsys.ddl"
d $SYSTEM.SQL.DDLImport("CACHE",$USERNAME,filexml)

Файл privsys.ddl содержит ни что иное как SQL запросы и имеет сл. вид:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Cachй SQL DDL Export
-- File: privsys.ddl
-- Date: 24 april 2007
-- Export of: USERS ROLES PRIVILEGES
-- From Namespace: RSPU
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

-- Export of all User definitions --

SET OPTION SUPPORT_DELIMITED_IDENTIFIERS = TRUE
go

SETUSER SUPERUSER
go

GRANT SELECT ON %SYS.Audit TO secadmin
go

GRANT SELECT ON %SYS_Task.History TO secadmin
go

GRANT SELECT ON Security.Roles TO secadmin
go

GRANT SELECT ON Security.Users TO secadmin
go

GRANT SELECT ON Security.Applications TO secadm
go

GRANT SELECT ON Security.Domains TO secadm
go

GRANT SELECT ON Security.Events TO secadm
go

GRANT SELECT ON Security.Resource TO secadm
go

GRANT SELECT ON Security.Resources TO secadm
go

GRANT SELECT ON Security.Roles TO secadm
go

GRANT SELECT ON Security.Services TO secadm
go

GRANT SELECT ON Security.System TO secadm
go

GRANT SELECT ON Security.Users TO secadm
go

DELETE FROM Security.Users WHERE ID='_public'
go

DELETE FROM Security.Users WHERE ID='unknownuser'
go




Такую схему я использовал на этапе инсталляции Cache (при установке Cache делались соответствующие гранты соответствующим ролям)
...
Рейтинг: 0 / 0
Безопасность в 5.1-2007
    #34780566
CJIECAPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выполнил $SYSTEM.SQL.DDLImport из нужной мне области с файликом следующего содержания:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- CachИ SQL DDL Export
-- File: /home/cjiecapb/ddlexport.ddl
-- Date: 06 Sep 2007 14:41:55
-- Export of: USERS ROLES PRIVILEGES
-- From Namespace: KERNEL
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

GRANT REFERENCES ON %Library.SysLogTable TO %DB_KERNEL_CONTROL
go

GRANT SELECT ON %Library.SysLogTable TO %DB_KERNEL_CONTROL
go


Всё заработало. Спасибо.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Безопасность в 5.1-2007
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]