Программирование >>  Oracle 

1 ... 355 356 357 [ 358 ] 359 360 361 ... 469


Многоуровневая аутентификация 1495

ная программа cdemo2 - реализация SQL*Plus в миниатюре. Этот код выполняет подключение к серверу, но не начинает сеанс:

checkerr(error handle,

OGIHandleAlloc(environment handle,

(dvoid **)sdata server handIe, OGI HTYPE SERVER, 0, NULL)

checkerr(error handle,

OGIHandleAlloc((dvoid*) environment handle,

(dvoid **) sapplication server service handle, OGI HTYPE SVGGTX, 0, NULL)

checkerr(error handle,

OGIServerAttach(data server handle, error handle,

(text *)database?database: , strlen(database?database: ), 0)

checkerr(error handle,

OGIAttrSet((dvoid *) application server service handle, OGI HTYPE SVGGTX, (dvoid *) data server handle, (ub4) 0, OGI ATTR SERVER, error handle)

Теперь можно инициализировать, а затем аутентифицировать дескриптор сеанса сервера приложений. В данном случае используется либо внешняя аутентификация, либо имя пользователя/пароль:

checkerr(error handle,

OGIHandleAlloc(<dvoid *) environment handle,

(dvoid **)&application server session handle, (ub4) OGI HTYPE SESSION, (size t) 0,

(dvoid **) 0)

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

if (username != NULL && password != NULL && *username && *password)

checkerr(error handle,

OGIAttrSet((dvoid *) application server session handle,



1496

Глава 22

(ub4) OCI HTYPE SESSION,

(dvoid *) username, (ub4) strlen((char *)username), (ub4) OCI ATTR USERNAME, error handle)

checkerr( error handle,

OCIAttrSet((dvoid *) application server session handle, (ub4) OCI HTYPE SESSION, (dvoid *) password, (ub4) strlen((char *)password), (Ub4) OCI ATTR PASSWORD, error handle)

checkerr(error handle,

OCISessionBegin (application server service handle, error handle,

application server session handle, OCI CRED RDBMS,

(ub4) OCI DEFAULT)

А это - для выполнения аутентификации операционной системой: else

checkerr(error handdle,

OCISessionBegin(application server service handJ e, error handle,

application server session handle,

OCI CRED EXT,

OCI DEFAULT)

Теперь все готово для инициализации сеанса от имени клиента (пользователя, который регистрируется на сервере приложений, и от имени которого нам доверяют выполнять действия). Сначала инициализируем сеанс:

checkerr (errorhandle,

OCIHandleAlloc((dvoid *) environmenthandle,

(dvoid **)&first client session handle, (ub4) OCI HTYPE SESSION, (size t) 0, (dvoid **) 0)

Потом устанавливаем имя пользователя, от имени которого этот сеанс будет работать:

checkerr(error handle,

OCIAttrSet((dvoid *) first client session handle, (ub4) OCI HTYPE SESSION, (dvoid *) argv[2],



Многоуровневая аутентификация 1497

(ub4) strlen(argv[2]), OGI ATTR USERNAME, error handle)

Затем добавляем список ролей, которые необходимо включить для данного сеанса, - если пропустить этот вызов, будут включены все стандартные роли соответствующего пользователя:

checkerr( error handle,

OGIAttrSet((dvoid *) first client session handle, (ub4) OGI HTYPE SESSION, (dvoid *) roles, (ub4) nroles, OGI ATTR INITIAL GLIENT ROLES, error handle)

Теперь все готово для начала реального сеанса. Сначала мы свяжем клиентский сеанс (от имени которого должны выполняться действия в базе данных) с сеансом сервера приложений (промежуточной учетной записью):

checkerr(error handle,

OGIAttrSet((dvoid *) first client session handle, (ub4) OGI HTYPE SESSION,

(dvoid *) application server session handle,

(ub4) 0, GGI ATTR PROXY GREDENTIALS, error handle)

checkerr(error handle,

OGIAttrSet((dvoid *)application server service handle, (ub4) OGI HTYPE SVGGTX, (dvoid *)first client session handle, (ub4)0,

(ub4)OGI ATTR SESSION, error handle)

A затем начнем сеанс:

checkerr(error handle,

OGISessionBegin(application server service handle, error handle,

first client session handle,

OGI GRED PROXY,

OGI DEFAULT)

Теперь, поскольку это OCI-программа версии 7 (cdemo2.c - программа версии 7), необходимо преобразовать регистрационные данные Oracle 8i в форму, которую можно будет использовать. Здесь будет преобразована информация о подключении версии 8 в OCI LDA (Login Data Area - область данных регистрации) версии 7 и возвращен результат:



1 ... 355 356 357 [ 358 ] 359 360 361 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика