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

Откуда: Волгодонск
Сообщений: 954
Подскажите пожалуйста - как внутри CLR процедуры добраться до параметров сервера, пользователя, подключения.

Прежде всего интересует информация из sysprocesses
SELECT spid, hostname, program_name,  hostprocess, nt_domain, nt_username, net_address, loginame FROM master.dbo.sysprocesses where spid=@@SPID

Хотя если там же рядом найдется еще и имя сервера и БД, то буду только рад.

Вроде бы как что то подобное должно быть быть где то в TrigerContext, но я не смог добраться до него из SP. Пока что ничего не придумал умнее, чем городить запрос к БД. Но мне кажется, что вытаскивать эту информацию путем SQL запросов - немного портит весь смысл использования "типа шустрого" CLR для реализации сложной логики.

Если ктото уже встречал место, где лежат эти параметры - дайте пожалуйста знать.
Спасибо.
22 ноя 12, 03:39    [13511020]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31779
Константин Заровный
Хотя если там же рядом найдется еще и имя сервера и БД, то буду только рад.
Найдётся, поле dbid и функция @@SERVERNAME
Или просто 2 функции: @@SERVERNAME и одна из функций SUSER_NAME, SUSER_SNAME, USER_NAME
22 ноя 12, 08:50    [13511264]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31779
alexeyvg
и одна из функций SUSER_NAME, SUSER_SNAME, USER_NAME
Перепутал, функция DB_NAME()
22 ноя 12, 08:51    [13511269]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Константин Заровный
Member

Откуда: Волгодонск
Сообщений: 954
alexeyvg
Перепутал, функция DB_NAME()

Да суть не в этом.
Суть в следующем: чтобы получить данный параметр получается необходимо вызвать SQL запрос. Соответственно данный запрос будет парситься, затем этот запрос надо еще выполнить, потом надо вернуть результаты выполнения программе. Ну в общем получается - правой рукой достаем левое ухо под коленкой.

Тут должны быть другие варианты (попроще как например в XP есть srv_pfield).
22 ноя 12, 11:56    [13512073]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а что, не хватает "new SqlConnection("context connection=true")"??
22 ноя 12, 11:58    [13512084]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31779
Константин Заровный
alexeyvg
Перепутал, функция DB_NAME()

Да суть не в этом.
Суть в следующем: чтобы получить данный параметр получается необходимо вызвать SQL запрос. Соответственно данный запрос будет парситься, затем этот запрос надо еще выполнить, потом надо вернуть результаты выполнения программе. Ну в общем получается - правой рукой достаем левое ухо под коленкой.

Тут должны быть другие варианты (попроще как например в XP есть srv_pfield).
А, быстро прочитал, не заметил, что вам надо без запроса :-)

Да, может можно получить из объекта SqlConnection, как Crimean написал...
22 ноя 12, 12:29    [13512301]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Crimean
Member

Откуда:
Сообщений: 13148
alexeyvg
может можно получить из объекта SqlConnection, как Crimean написал...


ээ.. мысль была не "может можно получить", а зачем ЭТО получать? чтобы подключиться к себе же, но "автономным коннектом"?
22 ноя 12, 12:38    [13512370]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Константин Заровный
Member

Откуда: Волгодонск
Сообщений: 954
Crimean
а зачем ЭТО получать?


Как говорится - случаи они ведь разные бывают. (© не мой)

Для начала нужно не совсем стандартное разграничение прав доступа и журнал вызовов. А подключиться автономно - это слишком просто - стандартный пример из BOL, а мы не боимся трудностей, и если надо то умеем создавать их себе сами.
22 ноя 12, 16:45    [13514492]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Константин Заровный,

а на вопрос ответите? для чего мало "контекста" и конекшена, который можно открыть на его основе?
22 ноя 12, 16:48    [13514517]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Константин Заровный
Member

Откуда: Волгодонск
Сообщений: 954
Crimean
а на вопрос ответите?

На этот легко:
Данную SP нужно разрешить запускать не со всех ПК.
И самое интересное - нельзя запускать ее больше чем с n-го количества ПК одновременно.

А вы на мой вопрос ответите?
22 ноя 12, 17:00    [13514632]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Константин Заровный,

может все таки привязываться надо не к ПК,а группе ? Дать права только группе на запуск и не придумывать лисапед ?
22 ноя 12, 17:03    [13514669]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> Данную SP нужно разрешить запускать не со всех ПК.

hostname вам в руки

> нельзя запускать ее больше чем с n-го количества ПК одновременно

регистрируйте запуски в табличке и контролируйте количество

пока все перечисленное легко решается в рамках t-sql и совершенно без SQL CLR
22 ноя 12, 17:19    [13514793]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31779
Константин Заровный
Данную SP нужно разрешить запускать не со всех ПК.
И самое интересное - нельзя запускать ее больше чем с n-го количества ПК одновременно.
А зачем тогда получать имя сервера и базы???

Тогда имя клентского компа нужно.
22 ноя 12, 18:11    [13515242]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Константин Заровный
Member

Откуда: Волгодонск
Сообщений: 954
Crimean,

Не все
Например в TSQL нету функций хэширования, шифрования, подключения к левым службам, хитрой математики, работы с файлами. И этот список можно продолжить.

Если бы в TSQL все есть, то зачем тогда придумали CLR и XP ?


alexeyvg

Вы действительно думаете, что лучше меня знаете, что мне нужно?
22 ноя 12, 18:50    [13515453]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
Константин Заровный
Crimean,

Не все
Например в TSQL нету функций хэширования, шифрования, подключения к левым службам, хитрой математики, работы с файлами. И этот список можно продолжить.
Точно? Проверяли?
22 ноя 12, 18:57    [13515481]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Glory
Member

Откуда:
Сообщений: 104760
Константин Заровный
Например в TSQL нету функций хэширования,

HashBytes ( '<algorithm>', { @input | 'input' } )
Returns the MD2, MD4, MD5, SHA, or SHA1 hash of its input.

Константин Заровный
шифрования,

EncryptByCert ( certificate_ID , { 'cleartext' | @cleartext } )
Encrypts data with the public key of a certificate.

Константин Заровный
подключения к левым службам

CREATE ENDPOINT ?
Константин Заровный
хитрой математики

Типа доказать теорему Ферма или еще хитрее ?

Константин Заровный
работы с файлами.

Например ?
22 ноя 12, 18:57    [13515485]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Glory
Константин Заровный
работы с файлами.

Например ?

тоже есть
sp_OACreate + FileScipting.Object
xp_cmdschell

а хитрую математику ,если сильно хоцца мона и через сборку прикрутить
22 ноя 12, 19:02    [13515506]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31779
Константин Заровный
alexeyvg

Вы действительно думаете, что лучше меня знаете, что мне нужно?
В смысле??? Я просто ответил на ваш вопрос, не нужно обижаться.
22 ноя 12, 21:21    [13516021]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Константин Заровный
Member

Откуда: Волгодонск
Сообщений: 954
Glory,

То, что работает сейчас больше похоже на то, как шифруется ZIP архив (по простому паролю).

Использование шифрования с открытым ключом, конечно же заманчиво, но не выльется ли это в дополнительные проблемы с обслуживанием сертификатов. И потом все равно image не поддерживается.


Maxx
мона и через сборку прикрутить

А это как?

xp_cmdschell - и вы его кому то доверите?
22 ноя 12, 23:31    [13516405]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Константин Заровный
Maxx
мона и через сборку прикрутить

А это как?


Сборка = CLR-процедура. Ну то есть Maxx подтвердил ваши слова, что в T-SQL нет "хитрой математики"
23 ноя 12, 10:07    [13517287]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Glory
Member

Откуда:
Сообщений: 104760
Константин Заровный
Использование шифрования с открытым ключом, конечно же заманчиво, но не выльется ли это в дополнительные проблемы с обслуживанием сертификатов. И потом все равно image не поддерживается.

Вам перекопировать сюда полный список функций шифрования что ли ?

Константин Заровный
То, что работает сейчас больше похоже на то, как шифруется ZIP архив (по простому паролю).

И поэтому " TSQL нету функций хэширования, шифрования" ?
23 ноя 12, 10:27    [13517372]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Crimean
Константин Заровный,

а на вопрос ответите? для чего мало "контекста" и конекшена, который можно открыть на его основе?


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

Покритикуйте, если не прав.
ЗЫ. вопрос производительности и т.д. не стоит.
23 ноя 12, 12:29    [13518361]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Winnipuh,

уж лучше линк на себя же с отключенными транзакциями тогда :)
как-то так:

- регим себя же линкедом к себе же
- разрешаем RPC
- запрещаем транзакции
- указываем заранее запасенный логин
- ну и проверяем:

-- select * from sys.servers

set nocount on
go

create database a1
go

alter database a1 set recovery simple
go

use a1
go

-- основная табличка
create table dbo.t1 ( id int primary key , flag int not null )
go

-- протокольчики
create table dbo.logs ( id int identity primary key , txt varchar(20) not null )
go

-- проца для записи протокольчиков
create proc dbo.p_writelog @txt varchar(20) as set nocount on insert into dbo.logs( txt ) values( @txt )
go

create trigger dbo.t_t1_1 on dbo.t1 for insert as set nocount on
if exists( select 1 from inserted where flag between 1 and 100 ) begin
exec R2.a1.dbo.p_writelog 'wrong flag!'
rollback tran
return
end
go

-- эта должна пройти
insert into t1 ( id , flag ) select 0 , 0
go

-- эта должна зафейлить
insert into t1 ( id , flag ) select 1 , 1
go

select * from dbo.t1
go

select * from dbo.logs
go

use master
go

drop database a1
go


вуаля. ловкость рук, не более того. если все сделано правильно, то получим:

Server: Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.
id flag
----------- -----------
0 0

id txt
----------- --------------------
1 wrong flag!

то есть первая запись добавилась, вторая - нет, но в протоколе запись об этом есть

К сообщению приложен файл. Размер - 10Kb
23 ноя 12, 12:51    [13518614]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
2 Crimean

В данном случае да, но вот не всегда удается сделать такое

"- регим себя же линкедом к себе же"

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

Т.е надо отдавать решение, подходящее всем юзерам.

Хоят я бы, отвечая на свой вопрос, наверное сделал бы такое через брокер
23 ноя 12, 13:46    [13519165]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать параметры подключения и сервера из CLR SP  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> В данном случае да, но вот не всегда удается сделать такое
> "- регим себя же линкедом к себе же"

почему бы это? я специально использую EXEC а не другие операции. имя сервера "логирования" легко параметризуется
сам сервер через системные хранимки элементарно добавляется, @@servername никто не отменял, имя зарегенного линкеда легко пишется в настройки и дальше exec @procname аж бегом
да, нужна будет учетка, от имени которой будет работать логирование, но это вообще не вопрос - ей нужно право только на 1 хранимку собственно логирования и такую учетку можно делать "стандартной"

> т.е. есил я поставляю систему с базуо юзерам, то это пукнт может быть проблематично сделать, а руками у
> юзера не всегда получается, поскольку юзеры бывают разные..

небольшая (но не нерешаемая) проблема может быть только при использовании массированного хостинга кучи "таких" баз на 1 инстансе

> Т.е надо отдавать решение, подходящее всем юзерам.

все еще не вижу проблем

> наверное сделал бы такое через брокер

а ничего, что он "слегка" транзакционный? то есть тупо не способен решить эту задачу?
23 ноя 12, 13:53    [13519218]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить