Переключение на Главную Страницу Страницы: [1] 2 3 ... 8 ОтправитьПечать
Очень популярная тема (более 25 ответов) OFF: windows авторизация на SQL'е (число прочтений - 33219 )
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
OFF: windows авторизация на SQL'е
13. Августа 2009 :: 06:51
Печать  
Кто-нибудь переводил 7-ку на виндовую авторизацию?
Есть желание попробовать, хотелось услышать о глюках.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: OFF: windows авторизация на SQL'е
Ответ #1 - 13. Августа 2009 :: 08:57
Печать  
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #2 - 13. Августа 2009 :: 09:41
Печать  
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #3 - 17. Августа 2009 :: 18:40
Печать  
Кажется разобрался.

Для тех, кто читал приведенный выше линк: в предлагаемой схеме меня не устаивало то, что всем пользователям давались права sysadmin. Это сводило на нет всю идею win-авторизации.

Если тема кому-то инетесна-пишите, готов поделиться мыслями. Пока тестирую.
В ближайшее время переведу всех на win-авторизацию.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: OFF: windows авторизация на SQL'е
Ответ #4 - 18. Августа 2009 :: 04:15
Печать  
Очень интересна. Прошу поделиться опытом.
  
Наверх
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #5 - 18. Августа 2009 :: 07:45
Печать  
Расскажу подробно, как я делал. Может кто оптимизирует.

Часть I.

1. Правим BKEnd.dll, как описано в линке выше.
Изначально


Правим на



2. Как было написано в источнике 1С очень хитро работает с табличкой _1SCONNECT.
В профайлере видно, что она ее удаляет, потом заново создает с каким-то UUID. И все это происходит в момент входа первого пользователя. Я не знаю точно, но как мне кажется 1С-ка связывает этот UUID c  каталогом, где лежит MD-шник. Если я не прав, пусть меня поправят. Для входа следующих пользователей она сверяет этот UUID с тем, который лежит в _1SCONNECT.
Но тут возникает проблема - 1С-ка смотрит табличку, соответствующую текущему пользователю

  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #6 - 18. Августа 2009 :: 07:54
Печать  
Часть II.

1.Смотрим в профайлере, какой запрос уходит на сервер для всех пользователей...ищем его в BKEnd.dll  Ужас



Правим его



Собственно на месте запроса, вставляем вызов функции и хранимой процедуры. Их нам предстоит еще написать... Очень довольный
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #7 - 18. Августа 2009 :: 08:01
Печать  
Часть III.
Пишем функцию - туда мы копируем тот запрос, вместо которого мы  вставили наши вызовы.  

Функция:

Код
Выбрать все
CREATE FUNCTION huy()
RETURNS int
AS
BEGIN

	DECLARE @res int

	Select @res = COUNT(*) from master..sysprocesses where dbid=DB_ID('_Proba1') and program_name='1CV7'

	RETURN @res
END
 




Пишем хранимую процедуру:

Код
Выбрать все
CREATE PROCEDURE [dbo].[huy1]
AS
BEGIN
	SET NOCOUNT ON;

	if dbo.huy() = 1 -- Для первого юзера очищаем все таблицы _1sconnect и выходим
		Begin
			exec SP_MSforeachtable @command1 = 'Delete from ? ', @whereand = ' and o.name = ''_1sconnect'' '
			Return
		End

	declare @res char(36)
	declare @curuser varchar(200)

	Set @curuser = CURRENT_USER

	-- для последующих юзеров - собираем во временную таблицу все UUID cо всех таблиц _1sconnect
	-- по идее это UUID должен быть не пустым только в какой-то одной - соответствующей первому пожключению

	Create table #_1SProba (CONNECTUUID char(36) not null)
	execute SP_MSforeachtable @command1='insert #_1SProba Select * from ?', @whereand=' and o.name = ''_1sconnect'''
	select top 1 @res = CONNECTUUID from #_1sproba

	If exists (select * from sysobjects where id = object_id(@curuser + '._1SCONNECT') and sysstat & 0xf = 3)
		-- наверное это можно не делать, ну на всякий пожарный почистим
		exec ('Delete from ' + @curuser + '._1SCONNECT')
	else
		Create table _1SCONNECT (CONNECTUUID char(36) not null)

	-- вставляем найденный UUID в "родной" _1sconnect
	exec ('insert ' + @curuser + '._1SCONNECT VALUES(''' + @res + ''')')
END
GO
 



  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #8 - 18. Августа 2009 :: 08:10
Печать  
Часть IV.

Прописываем SQL-х пользователей, выдаем роли db_owner.

В параметрах коннекта в 1С нужно обязательно оставить SQL-льного пользователя, например sa. Пароль конечно удаляем.

Вроде все.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: OFF: windows авторизация на SQL'е
Ответ #9 - 18. Августа 2009 :: 08:16
Печать  
Огромное спасибо!
А нельзя ли в личку патченую bkend.dll?
leshik@stav1c.ru
  
Наверх
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #10 - 18. Августа 2009 :: 08:22
Печать  
Можно, только у меня BKEnd пропатчен был предварительно вот этим
http://infostart.ru/projects/739/?p=3

  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: OFF: windows авторизация на SQL'е
Ответ #11 - 18. Августа 2009 :: 08:34
Печать  
Согласен Улыбка
  
Наверх
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #12 - 18. Августа 2009 :: 09:44
Печать  
Маленькое исправление:

Код
Выбрать все
CREATE FUNCTION huy()
RETURNS int
AS
BEGIN

	DECLARE @res int

	Select @res = COUNT(*) from master..sysprocesses where dbid=DB_ID(DB_NAME()) and program_name='1CV7'

	RETURN @res
END 

  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: OFF: windows авторизация на SQL'е
Ответ #13 - 18. Августа 2009 :: 11:50
Печать  
А имя хранимки по какому принципу выбирал? Смех
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: OFF: windows авторизация на SQL'е
Ответ #14 - 18. Августа 2009 :: 11:54
Печать  
JohnyDeath писал(а) 18. Августа 2009 :: 11:50:
А имя хранимки по какому принципу выбирал? Смех


Честна сказать по принципу "заговОра".
Когда долго ничего не получается, начинаешь злиться, ну и называешь таким образом переменные, функции....обычно помогает  Очень довольный
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 8
ОтправитьПечать