Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CLR + PerformanceCounter = Access is denied  [new]
Zioma
Member

Откуда: Украина, Киев
Сообщений: 361
Решил протестировать пример Alexey Knyazev отсюда - http://t-sql.ru/post/disk_size.aspx, а именно решение на базе CLR.

Пример скомпилировал на VS 2012 под фреймворк 3.5.
Установил согласно инструкции на один из серверов (2008-ой).
В сети несколько скульных серверов, на всех - локальный админ, виндовая аутентификация.

Запуск с указанием некоторых из серверов (2005-ый и 2008-ый) выдает ошибку:
Msg 6522, Level 16, State 1, Procedure ps_DiskSpace, Line 0
A .NET Framework error occurred during execution of user-defined routine or aggregate "ps_DiskSpace": 
System.ComponentModel.Win32Exception: Access is denied
System.ComponentModel.Win32Exception: 
   at System.Diagnostics.PerformanceMonitor.Init()
   at System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item)
   at System.Diagnostics.PerformanceCounterLib.get_CategoryTable()
   at System.Diagnostics.PerformanceCounterLib.GetCategorySample(String category)
   at System.Diagnostics.PerformanceCounterLib.GetCategorySample(String machine, String category)
   at System.Diagnostics.PerformanceCounterCategory.GetCounterInstances(String categoryName, String machineName)
   at clrDiskSpace.StoredProcedures.isp_DiskSpace(String serverName)


При этом на другие сервера отрабатывает нормально.
Если процедуру установить на этом сервере (где ошибка), то все нормально.

В студии убрал синтаксис для CLR-процедуры (переделал на простое виндовое приложение) - без ошибок отрабатывает на все сервера.

Что можеть быть?

P.S. В сети находил ссылки на такую ошибку, но к сожалению решения не было.
30 июл 13, 18:15    [14639179]     Ответить | Цитировать Сообщить модератору
 Re: CLR + PerformanceCounter = Access is denied  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
а что 2005 может выполнять SQLCLR процедуры построенные для фреймоврка >2 ?
30 июл 13, 18:21    [14639202]     Ответить | Цитировать Сообщить модератору
 Re: CLR + PerformanceCounter = Access is denied  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Zioma
P.S. В сети находил ссылки на такую ошибку, но к сожалению решения не было.

Да вроде по первой же ссылке есть решение: http://bijutholath.com/page/Microsoft-Visual-Studio-Debugging.aspx
30 июл 13, 18:21    [14639204]     Ответить | Цитировать Сообщить модератору
 Re: CLR + PerformanceCounter = Access is denied  [new]
Zioma
Member

Откуда: Украина, Киев
Сообщений: 361
Гость333
Zioma
P.S. В сети находил ссылки на такую ошибку, но к сожалению решения не было.

Да вроде по первой же ссылке есть решение: http://bijutholath.com/page/Microsoft-Visual-Studio-Debugging.aspx


Я имел ввиду, что находил указание ошибки по сборке Алексея.

Если вы имеете ввиду это:
"Access is denied" while accessing Perfomance Monitor
System.ComponentModel.Win32Exception: Access is denied at System.Diagnostics.PerformanceMonitor.Init() at  
...

SOLUTION
1. Open the server registry by entering following "regedit" at the command prompt.
2. Go top "HKEY_LOCAL_MACHINE"
3. Open "SOFTWARE" -> Microsoft -> Windows NT -> Current Version -> Perflib
4. Right click on "Perflib"
5. Choose "Permissions"
6. Add following users and provide "Read" permission.  
  LOCAL SERVICE   
  NETWORK SERVICE
7. Restart your application which connects to server to get the Performance counter value.  


то с реестром все впорядке. Кроме того, сравнил реестры серверов с ошбкой и без - все аналогично.

Winnipuh
а что 2005 может выполнять SQLCLR процедуры построенные для фреймоврка >2 ?

Сама CLR-процедура установлена на 2008-ом.
30 июл 13, 18:40    [14639263]     Ответить | Цитировать Сообщить модератору
 Re: CLR + PerformanceCounter = Access is denied  [new]
Zioma
Member

Откуда: Украина, Киев
Сообщений: 361
Winnipuh
а что 2005 может выполнять SQLCLR процедуры построенные для фреймоврка >2 ?


И еще: сборка под FW 3.5 поставилась и на 2005-ый (при чем RTM).
И локально работает нормально. Если параметр другой сервер, то также, для одних выдает инфу о дисках, для других - ошибку.

Просто даже не знаю, в какую сторону "копать" ...
31 июл 13, 10:32    [14641383]     Ответить | Цитировать Сообщить модератору
 Re: CLR + PerformanceCounter = Access is denied  [new]
Zioma
Member

Откуда: Украина, Киев
Сообщений: 361
Скульный сервисы в сети запущены от имени "Local System".
Видимо потому и проблемы с доступом на некоторые серверы, поскольку SQLCLR запускается от имени учетки самого скульного сервиса.

Можно как то заставить CLR процедуру отрабатывать от имени пользователя, который запустил процедуру ?
"WITH EXECUTE AS" и "CREATE ASSEMBLY AUTHORIZATION" не помагает.
31 июл 13, 16:20    [14643966]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить