![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Коннект к базе IB [D6, IB6.x]
Hadroran © (2006-03-01 17:58:00)Помогите реализовать коннект к базе данных с вводом логина, пароля и роли.
Есть предложенный код на других форумах:
IBTransaction.Active:=true;
IBSQL.SQL.Clear;
IBSQL.SQL.Add('select rdb$relation_name from rdb$user_privileges where rdb$privilege = ''M'' and rdb$user = :username;');
IBSQL.ExecQuery;
Role:=IBSQL.Fields[0].AsString;
IBSQL.Close;
Но значение Role - полная пурга.
Hadroran (2006-03-02 16:23:00) [1]Все навиг вопрос снимаю. Пользователя забыл взять в одинарныекавычки.
Hadroran (2006-03-02 15:52:00) [2]
> 2. При помощи запроса
> select rdb$relation_name from rdb$user_privileges where rdb$privilege
> = ''M'' and rdb$user = :username;
> на сдадии коннекта вводим логин-пароль затем узнаем роль
> пользователя, делаем дисконнект, затем снова коннект логин-
> пароль-роль
И все-таки если использовать этот вариант при исполнении данного запроса выводится ошибка "типа неизвестный пользователь". Ессссстественно вместо :username вводим пользователя прописанного в базе. Если же данный запрос написан в процедуре
BEGIN
FOR
select rdb$relation_name
from rdb$user_privileges
where rdb$privilege = 'M' and rdb$user = :username
INTO :RDB$RELATION_NAME
DO
BEGIN
SUSPEND;
END
END
и права на ее выполнения даны данному пользователю, то результат RDB$RELATION_NAME равняется NULL, хотя при отладке процедуры на сервере все получается.
Виталий Панасенко (2006-03-02 10:08:00) [3]
> Hadroran (02.03.06 09:57) [6]
> Парни не поверите
> IBDatabase.Params.Clear;
> IBDatabase.Params.Append('user_name='+FormGlava.LoginUs);
>
> IBDatabase.Params.Append('password='+FormGlava.PassUs);
> IBDatabase.Params.Append('sql_role=роль');
А если правой кнопкой кликнуть на IBDataBase, можно выбрать Database Editor и там все красиво указать по полям ввода...Т.е. Params заполнить визуально..:-)
Johnmen (2006-03-02 09:59:00) [4]Ну ты колумб...:)
Hadroran (2006-03-02 09:57:00) [5]Парни не поверите
IBDatabase.Params.Clear;
IBDatabase.Params.Append('user_name='+FormGlava.LoginUs);
IBDatabase.Params.Append('password='+FormGlava.PassUs);
IBDatabase.Params.Append('sql_role=роль');
Hadroran (2006-03-02 09:29:00) [6]
> Сплошная пурга.
Помогите от пурги уйти. Как сконнектиться с базой вводя логин, пароль и роль. На пальцах в принципе понятно. Есть как бы два варианта.
1. Пользователь заранее знает свою роль и подключаясь указывает ее.
2. При помощи запроса
rdb$relation_name from rdb$user_privileges where rdb$privilege = ''M'' and rdb$user = :username;
на сдадии коннекта вводим логин-пароль затем узнаем роль пользователя, делаем дисконнект, затем снова коннект логин-пароль-роль.
Вот последнее или первое помогите в код перевести. Ну не доходит ум мой до этого. :)
Johnmen (2006-03-01 21:08:00) [7]Сплошная пурга.
И насчёт применения IBSQL, и насчет ExecQuery....
Просто интересно, на каких других форумах так гонят?
:)
Desdechado (2006-03-01 18:49:00) [8]еще раз, роль юзера должна быть известна заранее, как логин и пароль
возможны варианты, но тогда нужно переподключаться
подробности см. на ibase.ru
Hadroran (2006-03-01 18:18:00) [9]Мля, вводят куда, подключаются к чему? (смайликов чета у меня нет)
Вот сначала вошли, наверное так. А подключаюсь к базе, но надо роль юзера узнать, а как?
IBDatabase.Connected:=false;
IBDatabase.Params.Clear;
IBDatabase.Params.Append('user_name='+FormGlava.LoginUs);
IBDatabase.Params.Append('password='+FormGlava.PassUs);
IBDatabase.DatabaseName:=FormGlava.ServerName+':'+FormGlava.BaseName;
try
IBDatabase.Connected:=true;
except
exit;
end;
IBTransaction.Active:=true;
IBSQL.SQL.Clear;
IBSQL.SQL.Add('select rdb$relation_name from rdb$user_privileges where rdb$privilege = ''M'' and rdb$user = :username;');
IBSQL.ExecQuery;
Role:=IBSQL.Fields[0].AsString;
IBSQL.Close;
Desdechado (2006-03-01 18:03:00) [10]вообще-то роль вводят, потом с ней подключаются
а не читают невесть что из БД
и вообще, вопрос коду не соответсвует в принципе