Форум: "Базы";
Текущий архив: 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.044 c