Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2012, 20:26   #1
Freimaks
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 42
По умолчанию Определение прав пользователя при подключении к MySQL

Всем привет!
Есть вот такая процедура подключения к MySQL:
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
    with SQLConnection1.Params do
      begin
      Clear;
      Add('DriverName=DevartMySQL');
      Add('HostName='+labelededit1.Text);
      Add('DataBase='+labelededit2.Text);
      Add('User_Name='+labelededit3.Text);
      Add('Password='+labelededit4.Text);
      end;
    sqlconnection1.Connected:=false;
try
      sqlconnection1.Connected:=true;
      form1.sqltable1.TableName:='projects';
      form1.sqltable1.Active:=true;
      form1.ClientDataSet1.Active:=true;
      Form1.label1.Caption:='Количество зарегистрированных проектов: '+inttostr(Form1.DBGrid1.DataSource.DataSet.RecordCount)+' шт.';
      SQLQuery1.Close;
      SQLQuery1.SQL.Text:='SELECT SubString(USER(), 1, InStr(User(), "@")-1)';
      SqlQuery1.Open;
      Form1.Label3.Caption:='Пользователь '+SQLQuery1.Fields[0].AsString;
      SQLQuery1.Close;
      form2.Close;
      SetGridColumnWidths(Form1.DBGrid1);
      form1.Enabled:=true;
      Form1.Show;
except
    label1.Font.Color:=clred;
    label1.Caption:='Подключение не удалось';
    form1.Enabled:=false;
    end;
end;
Хотелось бы добавить определение прав пользователя который подключился к БД. Есть такая команда SHOW GRANTS, которая как раз и показывает права, но мне не понятно как из той огромной строки, которую она выдает вычленить именно права и в зависимости от них, например, заблокировать определенные кнопки на Form1. Сейчас бесит, что у всех пользователей есть доступ ко всем функциям, просто если работать из-под урезанного юзера, то вываливаются ошибки. Постоянно обрабатывать try наверно не очень грамотно - наверно грамотнее просто заблокировать кнопки.

Может кто подскажет?
Freimaks вне форума Ответить с цитированием
Старый 01.06.2012, 21:08   #2
Freimaks
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 42
По умолчанию

В общем сам я пока дошел только вот до такого:
1. Делаем запрос:
Код:
 SQLQuery1.Close;
      SQLQuery1.SQL.Text:='SHOW GRANTS FOR '+labelededit3.Text;
      SqlQuery1.Open;
2.Обрабатываем ответ:
Код:
copy(SQLQuery1.Fields[0].AsString,1,pos('*',SQLQuery1.Fields[0].AsString)-1)
3. Сравнивать строку с эталоном. Права то все-равно фиксированы (ну я планирую только 2-3 вида пользователей).
Freimaks вне форума Ответить с цитированием
Старый 01.06.2012, 22:08   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Постоянно обрабатывать try наверно не очень грамотно
Почему же? Вполне грамотно. На каждое обращение к БД - своя обертка try. И в ней отлов и анализ класса ошибки.
Видишь ли, гранты может задавать админ без понимания работы твоей программы (допустим), а соответственно ты не сможешь предугадать все возможные гранты или роли, которые в дальнейшем будут (допустим будут) заданы.
Поэтому Try - самый разумный из универсальных способов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка UTF-8 при подключении к MySQL Librarian БД в Delphi 4 08.05.2012 12:07
LNK2019 при подключении .h файла (при подключении .cpp все компилится) RomanA Visual C++ 3 16.04.2012 07:47
Ошибка при подключении <MySQL.h> Lokran C/C++ Базы данных 1 01.07.2011 13:35
Проблемы при подключении MySQL к Delphi Umen БД в Delphi 13 18.04.2011 18:06
добавление элемента массива при подключении нового пользователя Lokos Работа с сетью в Delphi 10 01.11.2010 02:27