Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сильно хочется сделать общеиспользуемые удаленные представления / 4 сообщений из 4, страница 1 из 1
27.08.2004, 19:30
    #32669600
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно хочется сделать общеиспользуемые удаленные представления
Как в VFP обойти такую проблему.
Приложение клиент-сервер, работает много юзеров, каждый вводит имя
пользователя и пароль через форму. Есть база данных Foxpro, в которой
хранится куча сложных удаленных представлений. Удаленные представления,
ясное дело, ссылаются на именованное соединение. Если задавать в этом
удаленном представлении имя пользователя и пароль командой dbsetprop, то,
поскольку база сетевая и соединение в ней одно, возникает конфликт - все
меняют одни и те же два поля (имени пользователя и пароля) и потом,
получается, запускают удаленные представления под именем последнего
зарегистрировавшегося юзера. Понятно, что если открывать запросы каждый раз через SQLExec, то проблема не стоит, но возможности локальных курсоров VFP намного более ограничены, чем возможности удаленных представлений как по работе с ними юзеров, так и по удобствам для разработчиков.
Например, с обновлением в гриде. Можно, конечно, например, на каждую колонку вешать событие, и после обновления генерить сквозной запрос update, но как-то это скучно и грустно ...
И чего делать, если сильно хочется общеиспользуемые удаленные представления ?
...
Рейтинг: 0 / 0
29.08.2004, 08:48
    #32670095
vklepko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно хочется сделать общеиспользуемые удаленные представления
Давайте будем говорить о MSSQL Server сервере в качестве back-end.
Создайте на SQL Server-е в Вашей БД application role - myAppRole. Для простоты примера дайте ей права db_owner.
Создайте на SQL Server-е пользователя. Назовите его, скажем, dummy и пароль ему дайте _dummy. Дайте ему право только на коннект к Вашей БД. Прав на select, insert, ..... не давайте. Они ему не нужны - он dummy.
Насколько я понял, все удалённые представления используют одно и тот же именованое соединение с именем пользователя и паролем. Измените имя пользователя на dummy ну и пароль на _dummy соответственно.
На этот момент ни одно из существующих представлений открываться не должно - у dummy нет прав на чтение.
Создайте удалённое представление специально для dummy
CREATE SQL VIEW dummys_favourite REMOTE CONNECTION myConn SHARED AS;
select getdate() as conn_date
Это удаленное представление dummy откроет - таблицы в нём не участвуют.
Ну а дальше:
1) на старте программы открываем "dummys_favourite" и не закрываем его до конца работы . Лучше реализовать всё это в одельном классе пронаследованном от session в private datasession.
2) Определите ConnectionHandle на открытом "dummys_favourite". Активизируйте myAppRole с помощью SQLExec(connHandle,"exec sp_setapprole 'myAppRole',......")
3) С этого момента все удалённые представления открываются с правами данными myAppRole. Проверьте, что все они SHARED - что обязательное требование.

Главное не закрывать "dummys_favourite"


Идёт в разрез, конечно, с современными тенденциями, connectionless, stateless .....
...
Рейтинг: 0 / 0
30.08.2004, 09:24
    #32670497
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно хочется сделать общеиспользуемые удаленные представления
Можно попроще. Если Вас устроит доверительное соединение с сервером (MS SQL), то допишите в конце строки коннекта такую вещь

DRIVER=sql server;SERVER=MyServer;UID=;PWD=;DATABASE=MyBase;Trusted_Connection=Yes

Ключевое слово Trusted_Connection=Yes говорит о том, что при подключении к MS SQL серверу следует использовать логин и пароль, которые были введены при включении Windows. Разумеется, если у сервера настроен режим Windows-идентификации. В этом случае явно указывать логин и пароль в строке коннекта не имеет смысла, они все равно будут проигнорированы.

Эту строку соединения пишите в объекте Connect базы данных вместо DSN. Раздел "Specify Data Source" переключатель "Connection String"
...
Рейтинг: 0 / 0
30.08.2004, 09:52
    #32670531
Онуфрий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно хочется сделать общеиспользуемые удаленные представления
И, наконец, пару слов про
strizhПонятно, что если открывать запросы каждый раз через SQLExec, то проблема не стоит, но возможности локальных курсоров VFP намного более ограничены, чем возможности удаленных представлений как по работе с ними юзеров, так и по удобствам для разработчиков.
Например, с обновлением в гриде. Можно, конечно, например, на каждую колонку вешать событие, и после обновления генерить сквозной запрос update, но как-то это скучно и грустно ...

Курсор-результат SQLExec несложно превратить в "свободный" remote view, который будет функционировать аналогично содержащимся в контейнере базы.
см. MSDN
How to Create Updatable Views by Using SQL Passthrough
Q138094
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сильно хочется сделать общеиспользуемые удаленные представления / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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