Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.08.2004, 19:30
|
|||
|---|---|---|---|
Сильно хочется сделать общеиспользуемые удаленные представления |
|||
|
#18+
Как в VFP обойти такую проблему. Приложение клиент-сервер, работает много юзеров, каждый вводит имя пользователя и пароль через форму. Есть база данных Foxpro, в которой хранится куча сложных удаленных представлений. Удаленные представления, ясное дело, ссылаются на именованное соединение. Если задавать в этом удаленном представлении имя пользователя и пароль командой dbsetprop, то, поскольку база сетевая и соединение в ней одно, возникает конфликт - все меняют одни и те же два поля (имени пользователя и пароля) и потом, получается, запускают удаленные представления под именем последнего зарегистрировавшегося юзера. Понятно, что если открывать запросы каждый раз через SQLExec, то проблема не стоит, но возможности локальных курсоров VFP намного более ограничены, чем возможности удаленных представлений как по работе с ними юзеров, так и по удобствам для разработчиков. Например, с обновлением в гриде. Можно, конечно, например, на каждую колонку вешать событие, и после обновления генерить сквозной запрос update, но как-то это скучно и грустно ... И чего делать, если сильно хочется общеиспользуемые удаленные представления ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.08.2004, 08:48
|
|||
|---|---|---|---|
|
|||
Сильно хочется сделать общеиспользуемые удаленные представления |
|||
|
#18+
Давайте будем говорить о 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 ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.08.2004, 09:24
|
|||
|---|---|---|---|
Сильно хочется сделать общеиспользуемые удаленные представления |
|||
|
#18+
Можно попроще. Если Вас устроит доверительное соединение с сервером (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" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.08.2004, 09:52
|
|||
|---|---|---|---|
|
|||
Сильно хочется сделать общеиспользуемые удаленные представления |
|||
|
#18+
И, наконец, пару слов про strizhПонятно, что если открывать запросы каждый раз через SQLExec, то проблема не стоит, но возможности локальных курсоров VFP намного более ограничены, чем возможности удаленных представлений как по работе с ними юзеров, так и по удобствам для разработчиков. Например, с обновлением в гриде. Можно, конечно, например, на каждую колонку вешать событие, и после обновления генерить сквозной запрос update, но как-то это скучно и грустно ... Курсор-результат SQLExec несложно превратить в "свободный" remote view, который будет функционировать аналогично содержащимся в контейнере базы. см. MSDN How to Create Updatable Views by Using SQL Passthrough Q138094 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&mobile=1&tid=1595920]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 332ms |

| 0 / 0 |
