Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Здравствуйте!

Пишу дипломку на cache 2005 "Web-site образовательного учреждения"!

У меня есть проверка на сайте на логин и пароль. Она только проверяет и все. У меня вопрос по доступу.

Может кто-нибудь подсказать как сделать так, чтобы зарегистрированные пользователи могли заходить на определенные страницы, а незарегистрированные пользователи нет? Использовать Coocie или можно использовать глобалы? И как сделать так чтобы при загрузке страницы она проверяла зареген пользователь или нет? Я новичок в каше поэтому может что-то неправильно описал.

Заранее ответившим спасибо!
8 май 07, 13:02    [4113602]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
Роль Каше в этом вопросе на втором плане :)
Ты это умееш делать не в Каше?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
8 май 07, 13:45    [4114149]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Нет, я и в каше и в web-технологиях новичок!
8 май 07, 13:49    [4114185]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
Дело осложняется... :(
Вот один из примеров редиректа
<html>
<title>Передод на страницу...</title>
<head>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=WINDOWS-1251">
<script language='javascript'>
function Go() {
   top.location="menu.csp"
}
</script>
</head>
<body onload='Go()'>
<p>Переход на другую страницу...</p>
<p>Если переход на другую страницу не происходит автоматически то нажмите
<a href='menu.csp'>сюда</a>.
</p>
</body>
</html>
Только тут он делается без анализа и после загрузки страницы... А тебе нужно другое событие, не onload... Выполняемое в самом начале, просто я сейчас не помню к чему там лучше привязаться...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
8 май 07, 14:01    [4114312]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
А как нибудь так нельзя типа:кодом каше

<script language='Cache'>
if (^ok=1) then
...
else
....
</script>

^ok -- глобальная переменная
8 май 07, 14:19    [4114447]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
Думаю что тут желательно разграничить "обязанности"...
Каше пусть занимается данными... А управлением страниц пусть займется что-то вебовское...

Для начала тебе нужно решить какие данные будут использоваться в задачке... Как их хранить... После этого можно двигаться дальше.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
8 май 07, 14:28    [4114512]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
Напиши на ksa@npcair.ru пришлю тебе для ознакомления курс молодого кашевара Почитай...
Просто тут не крепится... Файл большеват :(
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
8 май 07, 14:33    [4114545]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
Делать наверно нужно примерно так

1. Берем параметры логин-пароль.
2. Проверяем их, если проверка прошла, записываем их внутри базы (типа такой-то зашел под такой сессией)
3. В каждой странице в методе OnPreHTTP проверяем залогинился ли под этой сессией какой-нибудь пользователь, и можно ли ему открывать эту страницу.
Если OnPreHTTP возращает 1, то загрузка тела страницы продолжается, если 0, то обрывается
8 май 07, 14:38    [4114576]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Ну у меня на сайте будет 5 ролей

это

пользователь
студент
преподаватель
декан
администратор

пользователь - не может делать ниче только просмотреть сайт
студент - может просмотрть базу "оценки" добавлять комментарии к лекциям
преподаватель - может смореть базу "оценки" и список студентов а также добавлять лекции
декан - может смотреть список преподавателей, список студентов, базу "оценки"
администратор - может смотреть редактировать все.

так нормально будет? Может Вы посоветуйте как-нить получше!
8 май 07, 14:42    [4114603]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Блок А.Н.

2. Проверяем их, если проверка прошла, записываем их внутри базы (типа такой-то зашел под такой сессией)


А сессии всегда же разные, или нет?

Если я зашел в 1 раз сессия допустим 2885876
если зашел в 2 раз то сессия 45135443

или я не прав?
8 май 07, 14:47    [4114647]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
В течении одного сеанса сессия одна, но между сеансами уникальная
Поэтому нужно хранить связку сессия/пользователь, а связку эту делать в момент логина.
8 май 07, 15:08    [4114773]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Блок А.Н. А вы не могди бы на небольшом примере показать? Как примерно это выглядит!
8 май 07, 15:11    [4114784]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
aleshap
Member

Откуда: Москва
Сообщений: 24
Я думаю не стоит усложнять задачу, необходимо простейший пример для дипломной работы, крутых наворотив с супер безопасности тут не нужно.

Просто в OnPreHTTP метода страницы размещаешь примерно следующий код

ClassMethod OnPreHTTP() As %Boolean [ Final, ServerOnly = 1 ]
{
 	if %session.Get("status")="" d %session.Set("status","пользователь")  //минимальный достоп	
	if (%request.Get("app")="login") {
		//сюда поподаем после submit на форме регистрации
		s login = %request.Get("Login")
		s password = %request.Get("Password")
		// проверка данных авторицазии
		if OK { 
			d %session.Set("status","роль пользователя") 
			d %session.Set("userID",ID) // ID - пользователя
		} else {
			d %session.Set("status","пользователь")	
		}
	}
	q $$$OK
}

Далее в коде можно проверять %session.Get("status") и в зависимости от роли, давать или не давать пускать или не пускать.
8 май 07, 15:46    [4115127]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Спасибо всем ответившим! Постараюсь разобраться, если не получится в этот же топик обращусь!
8 май 07, 15:58    [4115256]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
Попробую, только придется много выкидывать из текста, и кое-что добалять, так что не факт, что будет работать без отладки. Я постараюсь покороче
Страница входа:
<HTML>
<HEAD>
</server>
<script language=javascript>
 function login()
 {#call(..login(loginForm.user.value,loginForm.password.value))#;
 }
</script>
</HEAD>
<BODY>
<div style="height:33%"></div>
<center>
<form name=loginForm>
<table>
 <tr> <td>Имя <td><input type=text name=user onkeypress="if(event.keyCode==13)password.focus()" >
 <tr> <td>Пароль<td><input type=password name=password onkeypress="if(event.keyCode==13)login()">
 <tr> <td colspan=2><center><button onclick=login()>Вход</button>
</table>
</form>
</BODY>
</HTML>
<script language=cache method=login arguments="user:%String,password:%String">
 s flag=##class(Auth.SysUser).Login(user,password,%session.SessionId)
 w:flag "location.href='main.csp';"
 w:'flag "alert('Вход не произведен');"
 q
</script>

Класс
Пользователя
Class Auth.SysUser Extends %Persistent
{

Parameter EXTENTSIZE = 2;

Property Session As %String(TRUNCATE = 1);

Property Enabled As %Boolean [ InitialExpression = 1 ];

Property Login As %String(TRUNCATE = 1) [ InitialExpression = 1, Required ];

Property Hash As %String(TRUNCATE = 1) [ Private ];

Property Password As %String(TRUNCATE = 1) [ Transient ];

Index LoginIndex On Login [ Unique ];

Index SessionIndex On Session;

Method PasswordSet(pass As %String) As %Status
{
 q:pass=""
 s ..Hash=$system.Encryption.MD5Encode(pass)
}

ClassMethod SetPassword(login As %String, pass As %String)
{
	s hash=$system.Encryption.MD5Encode(pass)
 	&sql(update Auth.SysUser set hash=:hash where login=:login )
}

ClassMethod CheckPassword(login As %String, pass As %String) As %Boolean
{
	s hash=$system.Encryption.MD5Encode(pass)
 	&sql(select login from Auth.SysUser where login=:login and hash=:hash and enabled=1)
 	q:SQLCODE=0 1
 	q 0
}

ClassMethod Login(login As %String, pass As %String, session As %String) As %Boolean
{
 if ..CheckPassword(login,pass)
	{&sql(update Auth.SysUser set session='' where session=:session) 
	 &sql(update Auth.SysUser set session=:session where login=:login)
	 q 1
	}
 q 0
}

ClassMethod Create(login)
{
 &sql(insert into Auth.SysUser(login) values(login))
}
///возвращает текущего пользователя
ClassMethod CurrentUser(session) as %String
{
 &sql(select login into :login from Auth.SysUser where session=:session)
 q:SQLCODE=0 login
 q ""
}
}


И примерно так main.csp или другая csp-шка
<script language=cache method=OnPreHTTP arguments= "" returntype=%Boolean>
 s login=##class(Auth.SysUser).CurrentUser(%session.SessionId)
 if (/*если пользователю нельзя заходить на эту страницу или логин не был произведен */)
  { //Какие-то действия
    q 0
  }
 q 1
</script>

<html>
 ......
</html>


Да, так как каше - все-таки объектная система, то например метод OnPreHTTP можно определить в классе и наследовать от него CSP-шки тегом
<CSP:CLASS SUPER="какой-то класс">

Примерно так, я думаю.
В этом примере один пользователь может зайти только с одной машины. Если он зайдет с другой сессией, то предыдущая сотрется.
8 май 07, 16:09    [4115356]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Ptn
Guest
Вот так и выкладывают "исходники"
8 май 07, 16:54    [4115647]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
автор
Вот так и выкладывают "исходники"

А вы про что?
8 май 07, 17:31    [4115897]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
А я что-то не очень доверяю сессиям... :( Т.к. они "исчезают" через некоторый таймаут...
В основном используем %request
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
10 май 07, 08:19    [4118684]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
ОГРОМНОЕ СПАСИБО всем кто ответил! Постараюсь разобраться!
10 май 07, 10:16    [4119021]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
А я что-то не очень доверяю сессиям... :( Т.к. они "исчезают" через некоторый таймаут...

Запросы можно гонять в отдельном окне или фрейме.
10 май 07, 11:50    [4119723]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
Дело не в запросах... А в самой природе сессий...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
10 май 07, 13:28    [4120460]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
Ну правильно, такая у них природа, мрут без работы.
Заставляйте их работать ;-)
10 май 07, 13:48    [4120623]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
Блок А.Н.
Заставляйте их работать ;-)

Так мы сосвоим ПО не работаем
10 май 07, 15:58    [4121702]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Ptn
Guest
А как еще с ПО нужно работать.

Если ПО работает (включено) - сесиия живет. Не работает (выключено) - сессия дохнет.

Да здраствует сессии неработающего ПО ?
10 май 07, 17:47    [4122474]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
Наши пользователи очень любят зайти в приложение и ничего в нем не делать... Таймаут кончается... Сессия помирает... :(
Потом они загораются желанием поработать но уже поздно. :)
Вот отсюда ноги и растут...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
11 май 07, 08:07    [4123754]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Alexandr Minzer
Member

Откуда:
Сообщений: 99
в своих CSP приложениях "заставляем работать" следующим образом:
<SCRIPT language="JavaScript">
var fun=setTimeout("ReCon();",600000);
function ReCon()
{
	var rez=#server(Lib.Utils.ReCon())#;
	var fun=setTimeout("ReCon();",600000);
	return true;
}
</SCRIPT>
Метод ReCon() возвращает, например, 1.
11 май 07, 08:25    [4123782]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
aleshap
Member

Откуда: Москва
Сообщений: 24
Можно использовать совместно куки и сессии, тогда не надо постоянно поддерживать их жизнь.
11 май 07, 09:08    [4123871]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13059
aleshap
Можно использовать совместно куки и сессии

Примерчик с куками можете подогнать?

С куками проблема... Пользователь их может отключить... :(
11 май 07, 10:03    [4124082]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Ptn
Guest
krvsa
Наши пользователи очень любят зайти в приложение и ничего в нем не делать... Таймаут кончается... Сессия помирает... :(
Потом они загораются желанием поработать но уже поздно. :)
Вот отсюда ноги и растут...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT


Дык про то и речь - почему приложение себя так ведет ? Оператору предположим делать нечего - а приложению ? Даже TCP-приложение "поддерживают коннект" - не так ли.
11 май 07, 11:59    [4124972]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
VadimF
Member

Откуда: InterSystems Russia
Сообщений: 512
Хотел бы пару моментов написать, но не про сессии (поведение, которых, кстати, изменилось в Cache' 5.1. по сравнению с более ранними версиями), а про хранения пользователей, роли пользователей, их привелегии и т.д.

Для хранения информации о пользователях рекомендую использовать стандартные возможности Cache' 5.1, 5.2, 2007.1, ...

Нужно завести роли: пользователь, студент, преподаватель, декан, администратор.

Далее можно создать набор ресурсов Вашего приложения в Портале Управления Системой.
Это описано в документации Cache'.

Назначить в портале права ролей пользователей на эти ресурсы.

В Вашем приложении Вы можете в определенных местах (например, где формируется меню доступа к страницам) проверять есть ли права у пользователя:

$SYSTEM.Security.Check("Teacher Resource", "WRITE")

Если право есть, отрисовывать или давать возможность перехода на страницу по ссылке.
Если нет - не пускать.

То есть можно воспользоваться готовой системой безопасности Cache'.

В ZEN все это сделано автоматически. Можно ставить в соответствие ресурс и компонент (например, пункт меню).
Если есть возможность лучше делать Web-приложение на ZEN, но для этого нужно иметь Cache' 2007.1.


Вадим
11 май 07, 15:38    [4126763]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Я так понимаю, что на каждую таблицу надо установить роли, и потом при обращении к этой таблицы проверять?
14 май 07, 07:49    [4132050]     Ответить | Цитировать Сообщить модератору
 привет!  [new]
Jannet
Member

Откуда:
Сообщений: 5
У нас темы дипломных проектов схожи! у меня тоже сайт про униветситет! ты не мог бы выслать мне свой,jakonda666@mail.ru? я могу своим поделиться.....не могу администрирование сделать никак(((((
14 май 07, 14:42    [4134352]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
автор
Я так понимаю, что на каждую таблицу надо установить роли, и потом при обращении к этой таблицы проверять?

Ну по крайней мере в каше 5.2 и ниже разрешения на таблицу не установите.
Лучше разрешения ставить на интерфейс, и проверять - эта страница разрешена? А эта кнопка на странице разрешена?
14 май 07, 15:13    [4134604]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Alesha
Member

Откуда: Москва
Сообщений: 55
krvsa
aleshap
Можно использовать совместно куки и сессии

С куками проблема... Пользователь их может отключить... :(

Отключить можно все... и куки и скрипты и flash... можно и браузер удалить и винду...
Думаю это уже проблема пользователей, другое дело, то что их об этом необходимо оповещать.
14 май 07, 16:31    [4135175]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
VadimF
Member

Откуда: InterSystems Russia
Сообщений: 512
Блок А.Н.
автор
Я так понимаю, что на каждую таблицу надо установить роли, и потом при обращении к этой таблицы проверять?


Ну по крайней мере в каше 5.2 и ниже разрешения на таблицу не установите.
Лучше разрешения ставить на интерфейс, и проверять - эта страница разрешена? А эта кнопка на странице разрешена?


Не совсем понимаю, почему?
На уровне SQL в Cache' всегда было можно ограничить доступ к таблицам, видам и хранимым процедурам.

В Cache' 2007.1. будет еще разграничение доступа к таблице на уровне записей.


Другое дело, что если говорить про создания Web-приложения, то Вы правы, более правильно разграничить доступ на уровне приложения к фрагментам Web-приложения.

С уважением, Вадим
14 май 07, 23:56    [4136551]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
VadimF

Блок А.Н.
Ну по крайней мере в каше 5.2 и ниже разрешения на таблицу не установите.

На уровне SQL в Cache' всегда было можно ограничить доступ к таблицам, видам и хранимым процедурам.

Ага, соврал :-(.
Хотел сказать, что нельзя таблицам присвоить имя ресурса.
Ведь для ресурса в каше 5можно проверить, доступен ли он
$System.Security.Check
А как это сделать для таблицы?
15 май 07, 05:08    [4136710]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
oxcom
Member

Откуда: >>>REAL WORLD<<<
Сообщений: 59
Выкладываю работу!
Может поможет немного разобраться!

Файл Diplom.xml импортировать локально в Cache 5
Папку "Images" скопировать на диск C:\

К сообщению приложен файл (Diplom.rar - 7Kb) cкачать
15 май 07, 09:42    [4137105]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5583

Hi!

VadimF

То есть можно воспользоваться готовой системой безопасности Cache'.

Для диплома, безусловно, можно. Но в боевой системе все не так просто.

1. Если что-то работало в предыдущей версии Cache, то оно может не заработать в следующей
или будет работать по-другому. Cache весьма быстро развивается и меняется. Для будущих
заказчиков это показатель крутизны, а для существующих - проблема. Поскольку разработчикам
и тестерам нужно забивать в план работ довольно серъезные сроки на перенос системы на другую
версию Cache. И это нередко останавливает от попыток использовать что-то готовое крайне быстро
эволюционирующее. Выше крыши хватает мелкософта, который вынуждает всех конкурентов
тратить время не на развитие прикладных систем, а на постоянный перенос их с одной версии
винды на другую.

2. На одном сервере может крутиться несколько баз с весьма разной архитектурой безопасности.
А пользователи и привилегии в Cache назначаются на сервер в целом, а не на конкретную базу с конкретным
приложением. Одно дело, когда есть DBA, который отвечает за функционирование сервера в целом,
создание бекапов и т.д., но ему нет дела до особенностей бизнес-логики конкретного приложения,
а совсем другое, когда администратор безопасности именно конкретного приложения добавляет/удаляет
пользователей, раздает доступ на ресурсы в соответствии с бизнес-логикой приложения, но ему нет
дела до технических проблем, бекапов, производительности, наличия места на дисках, знания, что
в каких таблицах находится и т.д.

И если разные приложения разработаны разными независимыми компаниями, то в целях
избежания головной боли от совместимости лучше будет ставить их на разные физические
сервера со своей Cache. Но тут уже совсем другая лицензия нужна.

3. Вопрос, тесно связанный с предыдущим пунктом, это невозможность бэкапа информации
по пользователям, их правам доступа к данным вместе с самими данными конкретной базы.
И соответственно, востановления из бэкапа так, чтобы это не повляло на пользователей,
других приложений, которые крутятся на этом сервере.

Или, к примеру, стандартная процедура апгрейда приложения. Делается бекап боевой базы с первого
сервера, восстанавливается на физически отдельном втором тестовом сервере (где может стоять другая
версия Cache), либо если боевой сервер можно остановить, то в него втыкается винчестер, туда
копируется CACHE.DAT и этот винчестер переносится на второй сервер. Понятно, что копировать
базу по сети бессмысленно. На тестовом сервере ставится новая версия приложения, проверяется
и отрабатывается процедура перехода. Затем она воспроизводится на боевом сервере (либо просто
юзеров переключают с первого сервера на второй). Вопрос: как перенести информацию о 500
пользователях, привилегиях и правах доступа с первого сервера на второй? Попытка просто
скопировать базы CACHESYS и CACHEAUDIT привела к неработоспособности второго
сервера из-за того, что он оказался в другом Windows домене. Т.е. завязка на аутентификацю
операционной системы или Kerberos - рискованная штука. Бэкап базы трехлетней давности может
запросто не подняться, если одновременно с ним не поднять бэкап на контроллере домена.

4. Если разграничение доступа является существенной частью бизнес-логики приложения, то вероятнее всего
будут и особые требования к функционалу системы безопасности. Казалось бы, вполне примитивное
требование, что рядовой пользователь, не являясь админом, должен иметь возможность поменять пароль
сам себе. В то-же время, админ не должен знать пароли пользователей и сам их менять. Разве что задавать
начальный пароль пользователю при регистрации в системе нового пользователя, но должен поставить
галочку "Требовать от пользователя смены своего пароля при первом входе в систему".
Тем не менее, мне не удалось найти такой простой возможности "в готовой" системе безопасности Cache.

То есть, если заказчик такую функцию потребует, то останется только сказать: "Обращайтесь к Интерсистемсу,
и тогда, возможно, когда-нибудь..."

А кроме такой мелочи, могут быть и более интересные вещи. У нас, к примеру иерархическая система
групп (ролей). В состав группы могут входить другие группы и пользователи, в то-же время пользователь
и группа может входить в состав нескольких групп. Кроме разрешений бывают еще и запреты. Если у группы
"А" есть разрешение на ресурс "1" и ресурс "2", а у группы "Б" есть запрет на ресурс "2" (про ресурс "1"
ничего не сказано), то пользователи, входящие только в группу "А" получат разрешение на оба ресурса,
входящие только в группу "Б" - ни на один ресурс, входящие и в группу "А" и в группу "Б" - разрешение
только на ресурс "1". Когда в системе под 500 пользователей, гибкость и удобство системы разграничения
доступа, а также пользовательский интерфейс имеют значение. Попробуйте реализовать Drag & Drop
пользователей из группы в группу на WEB - интерфейсе встроенной в Cache системы безопасности.
Вообще, перевод администрирования Cache на CSP - не самое удобное IMHO с точки зрения возможностей
пользовательского интерфейса решение. Интерфейс можно улучшить, если сделать навороченный апплет
на яве, но тогда чем он будет отличаться от старого доброго "толстого" клиента? Разве что
кроссплатформенностью.

С каждым пользователем и группой может быть ассоциирована масса информации и индивидуальных настроек
внешнего вида приложения, а не только логин или пароль. Например, рабочий телефон, e-mail, фотография
и т.д. Часть этой информации может поменять только администратор, часть - сам пользователь.

Да и создание/удаление/перемещение из группы в группу пользователя может потребовать выполнения
определенных операций. К примеру, удаление пользователя, это не DELETE FROM. Просто помечается,
что пользователь больше не может входить в систему, часть информации удаляется (например личные
почтовые ящики вместе с сообщениями), но основная идентифицирующая часть остается. Дело в том,
что ведется журнал, и может возникнуть вопрос, "кто менял этот документ три года назад" и тогда
нужно получить информацию по пользователю, даже если он пару лет назад уволился и с тех пор
доступа в систему не имеет.

Возможности перехватить операцию встроенной системы безопасности Cache по созданию/удалению/и т.д.
пользователей и выполнить какие-то собственные действия не имеется. Раньше (в Cache 5.0) было можно
перехватить логин к ODBC, выполнить собственные проверки и даже заменить имя пользователя. В частности,
это давало возможность при подключении пользователя задавать логин и пароль не тот, что указан в SQL-менеджере,
а тот, что указан в моем приложении. После проверки пароля, моя функция заменяет имя на _SYSTEM
(или любое другое) и с точки зрения Cache пользователь выглядит, как _SYSTEM и для него используются
гранты, заданные для _SYSTEM, а с точки зрения моего приложения он выглядит как мой пользователь.
То есть, можно было задействовать как встроенную систему безопасности SQL так и мою логику,
сочетая их возможности. Сейчас (Cache 5.2) возможность переопределения функции логина пропала. См. пункт 1.
____________________________
С уважением, Лисеев Дмитрий.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73

Posted via ActualForum NNTP Server 1.4

20 май 07, 04:56    [4160076]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5583

Hi!

VadimF

В Cache' 2007.1. будет еще разграничение доступа к таблице на уровне записей.

Угу. И сильно подозреваю, что по своим возможностям не дотянет до того,
что я сделал еще 6 лет назад.

Учитывая, что логика разграничения доступа сильно зависит от специфики приложения,
а реализовать ее на триггерах - раз плюнуть. Допустим, есть у нас дерево папок. То есть
в таблице имеется поле Parent с внешним ключем родительской папки. Перенос папки
из одной родительской в другую с точки зрения сервера это UPDATE на запись
переносимой папки с изменением Parent. А вот с точки зрения юзера переносимая папка
не меняется, зато производится удаление из старой родительской и вставка в новую родительскую.
Юзер не оперирует терминами SQL - операций. Ему надо не только право на изменение
атрибутов и удаление папки, но и отдельно право на создание/удаление в ней дочерних подпапок.
____________________________
С уважением, Лисеев Дмитрий.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73

Posted via ActualForum NNTP Server 1.4

20 май 07, 04:56    [4160077]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
u78
Member

Откуда: Москва
Сообщений: 559
krvsa
А я что-то не очень доверяю сессиям... :( Т.к. они "исчезают" через некоторый таймаут...

некий тайм аут можно изменить, я у себя поставил 28000 секунд и красота наступила.
а сессию закрывать при наступлении события onunload на страничке.
24 май 07, 22:34    [4182514]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
VadimF
Member

Откуда: InterSystems Russia
Сообщений: 512
Дмитрий, не могу сейчас, к сожалению, подробно ответить на Ваше сообщение.
Отмечу только один момент:

Dmitry V. Liseev

3. Вопрос, тесно связанный с предыдущим пунктом, это невозможность бэкапа информации
по пользователям, их правам доступа к данным вместе с самими данными конкретной базы.
И соответственно, востановления из бэкапа так, чтобы это не повляло на пользователей,
других приложений, которые крутятся на этом сервере.



%SYS>D ^SECURITY
 
1) User setup
2) Role setup
3) Service setup
4) Resource setup
5) Application setup
6) Auditing setup
7) Domain setup
8) SSL configuration setup
9) System parameter setup
10) Exit
 
Option? 9
 
1) Edit system options
2) Edit authentication options
3) Edit LDAP options
4) Display system options
5) Export All Security settings
6) Import All Security settings
7) Exit
 
Option? 5

С уважением, Вадим
25 май 07, 00:21    [4182740]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
Блок А.Н.
для ресурса в каше 5можно проверить, доступен ли он
$System.Security.Check
А как это сделать для таблицы?
Спустя 11 лет задаю тот же вопрос: можно ли проверить разрешения пользователя для таблицы?
21 фев 18, 12:57    [21207726]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2539
Блок А.Н.
Блок А.Н.
для ресурса в каше 5можно проверить, доступен ли он
$System.Security.Check
А как это сделать для таблицы?
Спустя 11 лет задаю тот же вопрос: можно ли проверить разрешения пользователя для таблицы?
Можешь уточнить, какие разрешения для таблицы?
В какой момент, и для кого нужно проверять разрешения?
21 фев 18, 13:00    [21207734]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
DAiMor,

например, разрешения на вставку или удаление строк в некоторую таблицу. Я понимаю, что там все может быть гораздо тоньше, но мне достаточно этого.
21 фев 18, 13:39    [21207921]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2539
$system.SQL.CheckPriv()
Do $SYSTEM.SQL.CheckPriv($username,"1,HHR.ProductionValues","s,i,u,d","USER",1)
Do $SYSTEM.SQL.CheckPriv("Miranda","3,SQLUser.Person","s","PRODUCT",0)
21 фев 18, 15:46    [21208610]     Ответить | Цитировать Сообщить модератору
 Re: Доступ!  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
DAiMor,

На этот раз, хотя я делаю это не на Каше 5, а аж на 2010.2, в которой эти возможности уже должны быть, удача оказалась не на моей стороне. Сервер собран с какой-то странной версией класса %SYSTEM.SQL, в которой этих методов нет. Попробовал всех перехитрить и посмотреть, как компилируется EmbeddedSQL, но оказалось, что ESQL не использует безопасность.
Но буду иметь в виду, спасибо :-)
21 фев 18, 21:19    [21209785]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить