Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

Проверка имени пользователя и пароля   Найти похожие ветки 

 
kulkse   (2007-02-14 11:17) [0]

Здравствуй)
Подскажите пожалуйста, как можно программно проверить правильность ввода пароля или имени пользователя....или существования базы????
Работаю с базой MS SQL....))) Подключаюсь с помощью ADOConnection...
.....на данный момент я проверяю только возможность подключения к базе....а меня просят сделать так, чтобы конкретно было понятно....из-за чего не подключается программа....может на сервере можно сделать какие-то настройки, политики.....чтобы он как-нибудь передавал...корректное имя пользователя или нет...?? или ещё как-нибудь...т.д.

Кто-нибудь сталкивался с такой проблемой???
За любую информацию по этому поводу....большое спасибо))))


 
Ega23 ©   (2007-02-14 11:21) [1]


Print  "S_AccountProc - процедура для работы с системой доступа"
go
if exists (select * from sysobjects where id = object_id(N"[S_AccountProc]") and OBJECTPROPERTY(id, N"IsProcedure") = 1)
drop procedure [S_AccountProc]
GO

CREATE PROCEDURE S_AccountProc

@ActNam varchar(32)="NONE",
 

-- Classes

@LoginNam varchar(16) ="",
@Passwd varchar(16) ="",
@PCNam varchar(32) ="",
@DatIn datetime =0,

@AccID int =-1,
@RoleID int =-1,
@ArmID int =-1,

-- Остальные входные параметры (для Select"ов)
@ObjID int = -1,

@OutMess varchar(8000) ="" output,

-- Debug Information
@SelOut int = 1,
 @Debug int =0

As
declare  
 @LogObjGUID uniqueidentifier,
 @result int,
 @x int,
 @DatOut0 datetime,
 @PersNam varchar(255),
 @ARMNam varchar(255),
 @ARMLab varchar(255),
 @RoleNam varchar(255);

Set NoCount ON;
Set @Result=0;
Set @OutMess="";
Select @ActNam=RTrim(LTrim(UPPER(@ActNam)));

--------------------------------------------------------------------------------------------------------------

if @ActNam="DOLOGIN"
begin

Set @AccID=-1;

Select @AccID=IsNull(ObjID, -1)
  from Account
  where LoginNam=@LoginNam;

if @AccID=-1
 begin
  Set @OutMess="Пользователь не зарегистрирован";
  Goto Fin_DOLOGIN  
 end;

Set @AccID=-1;

Select @AccID=IsNull(ObjID, -1)
  from Account
  where LoginNam=@LoginNam and Passwd=@Passwd;

if @AccID=-1
 begin
  Set @OutMess="Неверный пароль";
  Goto Fin_DOLOGIN  
 end;

Set @AccID=-1;

Select @AccID=IsNull(ObjID, -1)
  from Account
  where LoginNam=@LoginNam and Passwd=@Passwd and DatOut>getdate();

if @AccID=-1
 begin
  Set @OutMess="Срок действия учётной записи истёк";
  Goto Fin_DOLOGIN  
 end;

Select @PersNam=P.PersNam1+" "+P.PersNam2+" "+P.PersNam3
 from Pers P, Account A
 where P.PersID=A.PersID and A.ObjID=@AccID;

 -- Проверка на ARM
Create Table #Temp_CustomARM
(
  ObjID                int                            not null,
  ObjOwner             int                            null,
  ObjNam               varchar(64)                    not null
   default " ",
  ObjLab               varchar(64)                    not null
   default " ",
  ObjOrd               int                            not null,
  ObjMsk               tinyint                        not null,
  ObjNot               varchar(255)                   null,
  ObjStat              int                            not null
   default 0,
  LogAddr              int                            not null
   default 0,
  PhsAddr              int                            not null
   default 0,
  CompIPAddr           varchar(15)                    not null
   default "0.0.0.0",
  CompNetNam           varchar(64)                    not null
   default " ",
  ARMTypCod            int                            null
   default 0,
  ARMRoleID            int                            null
   default 0,
  ARMCurrAccID         int                            null
   default 0,
  ARMCurrViewCod       int                            null
   default 0,
  ARMDefViewCod        int                            null
   default 0,
 LogObjID       int               null,
  SubAddr              int                            not null
   default 0
);

Insert into #Temp_CustomARM
  exec S_RTTIProc @ActNam="OBJECTSBYCLSID.SEL",
          @CLSGUID="08261195-1987-4EE2-81A0-94C80D2A3BA6";

 Set @ARMID=-1;

/*
Select @ARMID=IsNull(ObjID, -1), @ARMNam=IsNull(ObjNam, "")
 from #Temp_CustomARM
 where Upper(CompNetNam)=Upper(@PCNam);
*/

-- Добавлено Тулаевой Т.Д.

Select @ARMID=IsNull(ta.ObjID, -1), @ARMNam=IsNull(ta.ObjNam, ""), @ARMLab=IsNull(ta.ObjLab, "")
 from #Temp_CustomARM ta, account ac, accrolepl ar
                where ac.loginnam=@LoginNam and ac.Passwd=@Passwd
        and Upper(ta.CompNetNam)=Upper(@PCNam)
                     and ar.accid=ac.objid and ta.objid=ar.armid;

Drop Table #Temp_CustomARM;

if @ARMID=-1
 begin
  Set @OutMess="Данный АРМ не зарегистрирован в системе";
  Goto Fin_DOLOGIN;
 end;


Set @RoleID=-1;

Select @RoleID=IsNull(RoleID, -1)
 from AccRolePL
 where AccID=@AccID and ARMID=@ARMID;

if @RoleID=-1
 begin
  Set @OutMess="Для данной учётной записи не определена конфигурация АРМ";
  Goto Fin_DOLOGIN;
 end;

Select @RoleNam=ObjNam
 from AccessRole
 where ObjID=@RoleID;

Fin_DOLOGIN:

Set NoCount OFF;
Select AccID=@AccID, RoleID=@RoleID, ARMID=@ARMID, OutMess=@OutMess,
    PersNam=@PersNam, RoleNam=@RoleNam, ARMNam=@ARMNam, ARMLab=@ARMLab;

Goto Fin;
end;

--------------------------------------------------------------------------------------------------------------

fin:
set nocount off;
return(@result);

GO

-- exec S_AccountProc @ActNam="DOLOGIN", @LoginNam="", @Passwd="oper"


 
ANB ©   (2007-02-14 11:59) [2]


> Ega23 ©   (14.02.07 11:21) [1]

Это самопальный доступ ?


> kulkse   (14.02.07 11:17)

Включай коннект во время выполнения, перехватывай исключения и анализируй их.
Кистате, как правило, при ошибке в имени или пароле сервера не сообщают, что именно неверно. ИМХО - не зря так сделали (труднее подобрать пару логин/пароль).


 
Ega23 ©   (2007-02-14 12:09) [3]


> Это самопальный доступ ?


Да. Фактически - есть список всех возможных бизнес-действий, разным ролям разные подмножества выдаются. Соответственно, программа сама себя конфигурит.


 
ANB ©   (2007-02-14 14:38) [4]


> Да. Фактически - есть список всех возможных бизнес-действий,
>  разным ролям разные подмножества выдаются. Соответственно,
>  программа сама себя конфигурит.

ЭЭЭ. Некузяво пароль в базе хранить. ИМХО - лучше к стандартным юзерам прикручивать доп.права.


 
Fay ©   (2007-02-15 18:53) [5]

совершенно нормально хранить в базе всё что угодно


 
MOA ©   (2007-02-15 23:28) [6]

ПМСМ, хранение паролей в базе, по крайней мере  для не-веб приложений -  неприемлимо.
Причём, поскольку такое хранение подразумевает SQL авторизацию - это не только моё СМ, это настоятельная рекомендация микрософта. Весьма разумная и обоснованная, поскольку в этом случае пароль превращается в в практически бесполезную фенечку.
Роли, кстати есть стандарные - и стандартные процедуры проверки принадлежности к ним.
Ошибки, ПМСМ, лучше анализировать на клиенте.


 
Petr V. Abramov ©   (2007-02-16 01:18) [7]

> чтобы конкретно было понятно....
конкретные пацаны логин/пароль либо помнят, либо на бумажке пишут. если речь идет о том, что "невходимость в базу" связана с тучей разных причин типа отсутствия сети или дропнутой базы - копай в строну получения нативного кода ошибки, в адо+mssql это долно быть не сложно, если только в мс народ совмем не поопался, что врядли



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.042 c
11-1158738217
BMouradov
2006-09-20 11:43
2007.05.06
KOLPrinters подвешивает программу


2-1176655582
Bambuk
2007-04-15 20:46
2007.05.06
Изменение региональных настроек


4-1165170629
Dmitry_177
2006-12-03 21:30
2007.05.06
Узнать высоту, ширину, цвет точки HBITMAP-а без модуля Graphics


3-1171611402
zorik
2007-02-16 10:36
2007.05.06
Firebird 2. Declare procedure


1-1173274283
alexey_mas
2007-03-07 16:31
2007.05.06
MDI интерфейс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский