Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Константин Заровный 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] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Или просто 2 функции: @@SERVERNAME и одна из функций SUSER_NAME, SUSER_SNAME, USER_NAME |
||
22 ноя 12, 08:50 [13511264] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
|
||
22 ноя 12, 08:51 [13511269] Ответить | Цитировать Сообщить модератору |
Константин Заровный Member Откуда: Волгодонск Сообщений: 954 |
Да суть не в этом. Суть в следующем: чтобы получить данный параметр получается необходимо вызвать SQL запрос. Соответственно данный запрос будет парситься, затем этот запрос надо еще выполнить, потом надо вернуть результаты выполнения программе. Ну в общем получается - правой рукой достаем левое ухо под коленкой. Тут должны быть другие варианты (попроще как например в XP есть srv_pfield). |
||
22 ноя 12, 11:56 [13512073] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
а что, не хватает "new SqlConnection("context connection=true")"?? |
22 ноя 12, 11:58 [13512084] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Да, может можно получить из объекта SqlConnection, как Crimean написал... |
||||
22 ноя 12, 12:29 [13512301] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
ээ.. мысль была не "может можно получить", а зачем ЭТО получать? чтобы подключиться к себе же, но "автономным коннектом"? |
||
22 ноя 12, 12:38 [13512370] Ответить | Цитировать Сообщить модератору |
Константин Заровный Member Откуда: Волгодонск Сообщений: 954 |
Как говорится - случаи они ведь разные бывают. (© не мой) Для начала нужно не совсем стандартное разграничение прав доступа и журнал вызовов. А подключиться автономно - это слишком просто - стандартный пример из BOL, а мы не боимся трудностей, и если надо то умеем создавать их себе сами. |
||
22 ноя 12, 16:45 [13514492] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
Константин Заровный, а на вопрос ответите? для чего мало "контекста" и конекшена, который можно открыть на его основе? |
22 ноя 12, 16:48 [13514517] Ответить | Цитировать Сообщить модератору |
Константин Заровный Member Откуда: Волгодонск Сообщений: 954 |
На этот легко: Данную SP нужно разрешить запускать не со всех ПК. И самое интересное - нельзя запускать ее больше чем с n-го количества ПК одновременно. А вы на мой вопрос ответите? |
||
22 ноя 12, 17:00 [13514632] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
Константин Заровный, может все таки привязываться надо не к ПК,а группе ? Дать права только группе на запуск и не придумывать лисапед ? |
22 ноя 12, 17:03 [13514669] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
> Данную SP нужно разрешить запускать не со всех ПК. hostname вам в руки > нельзя запускать ее больше чем с n-го количества ПК одновременно регистрируйте запуски в табличке и контролируйте количество пока все перечисленное легко решается в рамках t-sql и совершенно без SQL CLR |
22 ноя 12, 17:19 [13514793] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Тогда имя клентского компа нужно. |
||
22 ноя 12, 18:11 [13515242] Ответить | Цитировать Сообщить модератору |
Константин Заровный Member Откуда: Волгодонск Сообщений: 954 |
Crimean, Не все Например в TSQL нету функций хэширования, шифрования, подключения к левым службам, хитрой математики, работы с файлами. И этот список можно продолжить. Если бы в TSQL все есть, то зачем тогда придумали CLR и XP ? alexeyvg Вы действительно думаете, что лучше меня знаете, что мне нужно? |
22 ноя 12, 18:50 [13515453] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
22 ноя 12, 18:57 [13515481] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
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] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
тоже есть sp_OACreate + FileScipting.Object xp_cmdschell а хитрую математику ,если сильно хоцца мона и через сборку прикрутить |
||||
22 ноя 12, 19:02 [13515506] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
|
||
22 ноя 12, 21:21 [13516021] Ответить | Цитировать Сообщить модератору |
Константин Заровный Member Откуда: Волгодонск Сообщений: 954 |
Glory, То, что работает сейчас больше похоже на то, как шифруется ZIP архив (по простому паролю). Использование шифрования с открытым ключом, конечно же заманчиво, но не выльется ли это в дополнительные проблемы с обслуживанием сертификатов. И потом все равно image не поддерживается.
А это как? xp_cmdschell - и вы его кому то доверите? |
||
22 ноя 12, 23:31 [13516405] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Сборка = CLR-процедура. Ну то есть Maxx подтвердил ваши слова, что в T-SQL нет "хитрой математики" ![]() |
||||
23 ноя 12, 10:07 [13517287] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вам перекопировать сюда полный список функций шифрования что ли ?
И поэтому " TSQL нету функций хэширования, шифрования" ? |
||||
23 ноя 12, 10:27 [13517372] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
Вариант: Если я хочу писать в журнал, и если я буду это делать в этом же коннекте, то в случае роллбэка улетят и журнальные записи. Я открываю отдельный коннект, такой же, но свой и пишу. Покритикуйте, если не прав. ЗЫ. вопрос производительности и т.д. не стоит. |
||
23 ноя 12, 12:29 [13518361] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
2 Crimean В данном случае да, но вот не всегда удается сделать такое "- регим себя же линкедом к себе же" т.е. есил я поставляю систему с базуо юзерам, то это пукнт может быть проблематично сделать, а руками у юзера не всегда получается, поскольку юзеры бывают разные.. Т.е надо отдавать решение, подходящее всем юзерам. Хоят я бы, отвечая на свой вопрос, наверное сделал бы такое через брокер |
23 ноя 12, 13:46 [13519165] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
> В данном случае да, но вот не всегда удается сделать такое > "- регим себя же линкедом к себе же" почему бы это? я специально использую EXEC а не другие операции. имя сервера "логирования" легко параметризуется сам сервер через системные хранимки элементарно добавляется, @@servername никто не отменял, имя зарегенного линкеда легко пишется в настройки и дальше exec @procname аж бегом да, нужна будет учетка, от имени которой будет работать логирование, но это вообще не вопрос - ей нужно право только на 1 хранимку собственно логирования и такую учетку можно делать "стандартной" > т.е. есил я поставляю систему с базуо юзерам, то это пукнт может быть проблематично сделать, а руками у > юзера не всегда получается, поскольку юзеры бывают разные.. небольшая (но не нерешаемая) проблема может быть только при использовании массированного хостинга кучи "таких" баз на 1 инстансе > Т.е надо отдавать решение, подходящее всем юзерам. все еще не вижу проблем > наверное сделал бы такое через брокер а ничего, что он "слегка" транзакционный? то есть тупо не способен решить эту задачу? |
23 ноя 12, 13:53 [13519218] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |