Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
У меня вот такой вот вопросик. Я пишу приложение, вход в которое осуществляется через авторизацию, при этом, необходимо запретить вход под одним и тем же логином на двух и более машинах, нужно выдавать сообщение типа "Запрашиваемый логин уже занят ......"
Отсюда у меня два вопроса.
1- для того, чтобы определить занят ли текущий логин я каждый раз при входе пользователя создаю временную таблицу с названием = Код пользователя(он уникален) + "tmp_". Корректны ли такие действия?? Если нет, то может кто чего посоветует??

2-какеи ограничения накладываются на имя временной таблицы?? Иногда несмотря на то, что под этим логином никто еще не работает мне возвращается, что данная таблица уже есть

На всякий случай пишу текст процедуры, которая возвращает мне нолик, если пользователя пускать в систему нельзя и 1, если можно

в качестве fam передаю Код пользователя + "tmp_"
CREATE PROCEDURE RunAppNext @fam nvarchar
AS
set nocount on
declare @sql varchar(800)
begin
if (not object_id ('tempdb..##' + @fam ) is NULL)
select res = 0
else
set @sql=' CREATE TABLE ##' + @fam + ' (cod int) '
exec(@sql)
select res = 1
end
GO
12 апр 04, 10:53    [623463]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Использовать вместо глобальной временной таблицы (##), локальную (#)...
12 апр 04, 10:55    [623475]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
CGD
Member

Откуда:
Сообщений: 21
А когда пользователь выходит из программы ты таблицу удаляешь?
12 апр 04, 10:56    [623477]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Я пишу приложение, вход в которое осуществляется через авторизацию


Вы пытаетесь создать свой механизм авторизации?

автор
при этом, необходимо запретить вход под одним и тем же логином на двух и более машинах


Интересно, а для чего такие ограничения нужны?
12 апр 04, 10:59    [623487]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
tpg - если я создаю локальную временную таблицу, то запуск приложения второй раз, когда где-то оно уже открыто всегда проходит, ведь при запуске я не увижу локальные таблицы, созданные в другом соединении

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

pkarklin - да, мне нуреализовать свой механизм авторизации, поскольку доступ к данным из базы - это не единственное, что делается в приложении, поэтому не только сервер должен знать кто с ним работает, но и мое приложение тоже. А к вопросу зачем это - прихоть начальства, и не безосновательная.
12 апр 04, 11:13    [623524]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
А к вопросу зачем это - прихоть начальства, и не безосновательная.


Стандартными средставми сиквела, без лишнего гемороя такое нет решить. Если имеется ввиду именно авторизация. Кастати, а как организована система? Доменная структура или рабочая группа, авторизация сиквельная или виндовая?
12 апр 04, 11:17    [623528]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
при этом, необходимо запретить вход под одним и тем же логином на двух и более машинах, нужно выдавать сообщение типа

Если под логином подразумевается SQL Server login то почему бы просто не анализировать системную таблицу sysprocesses? Или результат систменой же процедуры sp_who ?
12 апр 04, 11:20    [623531]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
Дмитрий777
Member

Откуда: Тула
Сообщений: 81

DECLARE @USR as Nvarchar(50)
DECLARE @Vw1 as Nvarchar(50)

SET @USR = 'Login_'+REPLACE(SYSTEM_USER,'\','_')
SET @Vw1 = @USR+'v_НПП'

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = @Vw1 )
EXECUTE('DROP VIEW dbo.' +@Vw1)

-- !!! Вьюхи делать только с префиксом dbo, иначе на каждого пользователя они создаются снова (при чем до этого не удаляются) и ничего не работает


EXEC ('CREATE VIEW dbo.'+@Vw1+' AS SELECT * FROM dbo.НакладныеПоПокупателям')

В sp процедуре я создаю View объекты для каждого пользователя свои, потому что ПО у всех юзверов одинаковое, а входящие параметры для запросов разные.
В вашем случае если View существует не пускаете пользователя, если нет, пускаете. Не забудьте удалять View при выходе.
12 апр 04, 11:23    [623538]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
Дмитрий777
Member

Откуда: Тула
Сообщений: 81
Вот только с отключением света не знаю как :)
12 апр 04, 11:27    [623548]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
не до конца понимаю слово "сиквельная", но расскажу все как я понимаю, если что не так - поправьте.
у меня много отделов, которые работают в моем приложении, практически в каждом количесво машин в два, а то и в три раза меньше количества сотрудников. Естественно, практически все машины в отделе загружаются (в смысле в винду) под одним логином, но внутри отдела различные сотрудники должны иметь доступ к различным характеристикам, параметрам и т.д., что-то типа за каждым сотрудником закреплен свой параметр. Поэтому необходимо авторизовать сотрудника - запросить его логин в приложении и пароль, данные о чем я храню в базе на SQL-сервере. Кроме того, у пользователей куча своих личных настроект на внешний вид, форму отображения и т.д., так что еще раз повторюсь авторизация необходима не только для доступа к базе.
Вот дальше наверное расскажу то, что вам не понравится. К SQL-серверу абсолютно все сотрудники и внутри отдела и внутри всей организации обращаются через один единственный логин (с правами администратора), поскольку механизм разрешения и запрета на доступ к данным оооооочень сложный (не подчиняется правилам, сегодня разреши ему делать это, а завтра все, кроме вот этого ......) и фактически мое ограничение на то, что к этой записи ты не имеешь доступ происходит еще на этапе формирования строки запроса - пользовательно просто не может создать запрос с недопустимыми ему параментрами. Вот. А вопрос о том, как же сделать, чтобы если пользователь загрузил приложение, то вторую копию под этим же логином запускать нельзя остается открытым!!!!
12 апр 04, 11:30    [623557]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
IMHO, вы боритесь со следствием, а не с причиной.

автор
поскольку механизм разрешения и запрета на доступ к данным оооооочень сложный (не подчиняется правилам, сегодня разреши ему делать это, а завтра все, кроме вот этого ......)


Вот и должен быть у вас этот механизм реализован в базе на уровне бизнес-логики.

автор
фактически мое ограничение на то, что к этой записи ты не имеешь доступ происходит еще на этапе формирования строки запроса - пользовательно просто не может создать запрос с недопустимыми ему параментрами.


А вот запросы должны быть оформлены в виде хп, а что показывать - что нет, должно решаться на уровне ваших настроечных таблиц прав пользователей.

автор
К SQL-серверу абсолютно все сотрудники и внутри отдела и внутри всей организации обращаются через один единственный логин (с правами администратора)


Если система самописанная, то это не в какие ворота не лезет. Вот отсюда надо начинать решать проблему.

А все остальные решения легко обходяться подключением другим, отличным от вашего приложением.
12 апр 04, 11:41    [623588]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
pkarklin - ок, тогда прошу помощи!!!!
можно побеспокоить по аське???
12 апр 04, 11:49    [623600]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Можно и в аське, а можно и здесь. Ибо в аське я одни, а тут и умнее моей головы есть.
12 апр 04, 11:51    [623604]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
CGD
Member

Откуда:
Сообщений: 21
может проверять на существование таблицы подругому
например:
if exists (select * from tempdb.dbo.sysobjects where name='##ИмяТаблицы')
12 апр 04, 11:55    [623614]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
Alexander Popov
Member

Откуда:
Сообщений: 663
У меня похожая проблема. Необходимо что бы в одной программе разные люди имели разный уровень доступа к данным, отсюда и разный интерфейс самого кл. приложения.
Пока решения выглядят следующим образом. Все юзеры разделены на группы и доступ данных тоже реализован на группах. Авторизация виндовая. При входе в программу юзер проходит "Декорационную" (еще одну авторизацию) и ему присваивается параметр группы на основе которого строится его личный интерфейс. Мне этот способ не нравится. Думал делать проверку при загрузки любой формы есть на эту форму у юзера права. Слишком часто придется дергать сервер -плохо.
12 апр 04, 12:03    [623628]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
как ни странно if exists (select * from tempdb.dbo.sysobjects where name='##ИмяТаблицы') помогло.

pkarklin - нет, я наверное не совсем верно выразилась, естественно права доступа пользователю я задаю не select фамилия. У меня есть в базе таблица, в которой я определяю права доступа к тому или иному набору записей. Я вот только в администрировании сервера только сейчас пытаюсь разобраться, да и опыт работы еще весьма трепетный. Запросы оформить в виде ХП - это не проблема, только вот вопрос чем это лучше?

А когда я говорила, что доступ определяется на уровне формирования строки запроса, так я имела в виду, что у меня нет кучи пользователей, в настройках которых стояли бы те или иные запреты, поскольку запреты не на обновление, удаление или добавление, а именно на эту строку, вот эту или эту.

Что действительно плохо- это именно один пользователь на сервере. Ок, если я заведу кучу логинов на сервере, то чем именно это будет лучше. И как тогда быть при регистрации нового пользователя приложения?
12 апр 04, 15:02    [624021]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Что действительно плохо- это именно один пользователь на сервере. Ок, если я заведу кучу логинов на сервере, то чем именно это будет лучше. И как тогда быть при регистрации нового пользователя приложения?

Ответьте пока на один вопрос - каким образом вы ведете лог того кто именно совершил к примеру какие изменения в таблице ?
12 апр 04, 15:05    [624029]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Что действительно плохо- это именно один пользователь на сервере.


А так же один пользователь бд.

автор
У меня есть в базе таблица, в которой я определяю права доступа к тому или иному набору записей.


А как вы отличаете пользователей друг от друга? Из приложения что-то передаете?

автор
Ок, если я заведу кучу логинов на сервере, то чем именно это будет лучше.


Вам надо будет еще и пользователей бд завести. Именно их надо использовать в привязке "бизнес-прав".

автор
И как тогда быть при регистрации нового пользователя приложения?


А у вас должен быть визуальный интерфейс для облегчения заведения логинов, пользователей и раздачи прав. У меня цельный модуль в системе за это отвечает. Ибо система разграничения доступа такая сложная, что в Бухгалтерии - одно решение, в учете договоров - другое.
12 апр 04, 15:08    [624040]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
ок, работает примерно вот так.
есть таблица с описанием всех пользователей, каждому пользователю присвоен уникальный код. При моей авторизации я определяю код пользователя и в дальнейшем для определения прав доступа в базе использую только его. Следующим образом. Есть таблица как бы разрешений. В ней перечислены все возможные параметры и поле Доступ, которое имеет примерно следующий вид .23.67.12.8.26., это означает, что к этому параметру имеют доступ пользователи с кодом 23, 67, 12, 8, 26. По группам как было предложено они у меня тоже делятся - это как бы деление по отделам, но они неоднозначно определяют все права. Вот. Когда мне нужно получить например список всех разрешенных пользователю параметров, то я пишу запрос через INNER JOIN с таблицей разрешений, где Доступ LIKE '%.КодПользователя.%' Ок, я заведу много пользователей БД, то разве смогу указать в настройках этого пользователя на самом сервере, что когда он просит сделать запрос, то все делать через INNER JOIN с таблицей разрешений???
12 апр 04, 15:15    [624065]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
При моей авторизации я определяю код пользователя и в дальнейшем для определения прав доступа в базе использую только его.


КАК вы его определяете? На основании чего? С клиента передаете? ЧТо-то другое?

автор
Ок, я заведу много пользователей БД, то разве смогу указать в настройках этого пользователя на самом сервере, что когда он просит сделать запрос, то все делать через INNER JOIN с таблицей разрешений???


В настройках вы должны указывать какому пользователю, например, какой параметр разрешен. И, не пользователь же просит у вас запрос, а вы его пишете заранее, лучше если это будет хп. Вот в ней и должна идти связь с таблицей прав.
12 апр 04, 15:20    [624085]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
ну да, с клиента передаю логин пользователя, по логину из таблицы, в которой описаны все пользователи проверяю правильность пароля, и из этой же таблицы вытягиваю код пользователя
12 апр 04, 15:23    [624095]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
насчет пользователей в бд я поняла, вынесу все запросы в хп, в ней через INNER JOIN свяжу с таблицей разрешений.

Но не ругайтесь на меня, но никак не могу понять, почему тогда обязательно заводить много пользователей, есть через Хп я все равно обрежу только в соответствии с правами текущего
12 апр 04, 15:26    [624104]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
по логину из таблицы, в которой описаны все пользователи проверяю правильность пароля
Пароль тоже в таблице хранится ?

почему тогда обязательно заводить много пользователей
Зачем хранить пользователя/пароль в своей таблице, когда SQL уже предоставляет такую возможность ?
12 апр 04, 15:33    [624138]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
gluc
Member

Откуда:
Сообщений: 55
а на чем клиентскую часть пишете?
12 апр 04, 15:38    [624157]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы.  [new]
ange
Member

Откуда:
Сообщений: 181
в таблице с пользователями я храню логин, пароль, код пользователя, принадлежность пользователя к группе(отделу), должность пользователя (поскольку при формировании отчетов некоторые из пользователей не должны отображаться, тогда должность=скрытая, или отображаться в соответствии с должностной иерархией). Кроме того, тогда я могу получить код пользователя - это число целое, в этом случаем разрешения типа .2.5.67. - я могу быть уверена через LIKE '%.Код пользователя.%', что права определятся правильно, если же буду права в таблице разрешений определять через логин типа "chsn", "vav" и т.д., то есть возможность, что существует логин "vov" и "vov.an" тогда в таблице разрешений в поле доступ будет написано .vov.an. и дступ будет проходить и для vov и для vov.an
12 апр 04, 15:44    [624178]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить