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

Откуда:
Сообщений: 90
Добрый день

есть представление на скуль сервере :
Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)

к которому необходимо обращаться из vbs-скрипта. Кусок из него :

....
'создаем рекордсет для выборки загружаемых документов
Set RS = CreateObject("ADODB.Recordset")
'RS.CursorLocation = adUseClient
RS.Open "select [ID],[BUKRS],[BLART],[BELNR],[DOGOVOR],[DOGPOS],[XBLNR],[WAERS],[BUDAT],[KTEXT],[LIFNR],[SAKNR],[RGJAHR],[RBELNR],[RBUZEI],[WTGES],[WTGES1],[FDATK],[PTEXT],[ADVRES],[BLDAT],[BLPOS],[ZDOGPOS],[AUFNR],[SAKNR],[FISTL],[OPERA],[SAPERROR] from [ingr_sklfo_export_SASF] where isnull(opera,'') <>''", cn,1,3

if Err.Number <> 0 then 
	call WriteLogFile("Ошибка выполнения:[" & Err.Number & "] " &Err.Description)  
	call CloseLogFile 
	WScript.Quit -1 
end if

call WriteLogFile("Соединение с БД для загрузки установлено")
call WriteLogFile("Выбрано документов для обработки: " & Cstr(RS.RecordCount))


Гранты на вью ingr_sklfo_export_SASF выданы Public
Вот если запускаешь скрипт под юзером, обладающим правами db_owner - То все ок (показывает что что то выбрало)
если под другим - то возращает "Выбрано документов для обработки: "=0
Если этого юзера засунуть в db_owner - то все ок тоже гребет.
Если этого юзера не засунуть в db_owner, а прям явно выдать ему в пропертяях той вью и пометить галочки на выполнение - то тоже ничего не выбирает.
Если под этим юзером зайти в mssql managment studio и выполнить запрос тупо из скрипта Выше - то все хорошо возвращает.

как бы так заставить выбирать данные под ним без таких привелегий как db_owner из того представления
17 сен 14, 16:26    [16586535]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Начните с выполнения вашего запроса в Management Studio и публикации сообщения об ошибке.
17 сен 14, 16:44    [16586639]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
bormental
Member

Откуда:
Сообщений: 90
Гавриленко Сергей Алексеевич
Начните с выполнения вашего запроса в Management Studio и публикации сообщения об ошибке.


Если под этим юзером зайти в mssql managment studio и выполнить запрос тупо из скрипта Выше - то все хорошо возвращает.
(с)
17 сен 14, 16:48    [16586661]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
На всякий случай приведите параметры соединения cn
17 сен 14, 17:00    [16586737]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
може кто-то сделал прямой денай для паблика на одну из таблиц во вью ?
17 сен 14, 17:00    [16586740]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
bormental
Member

Откуда:
Сообщений: 90
SQL2008
На всякий случай приведите параметры соединения cn


conStr ="Provider=SQLOLEDB.1;Persist Security Info=False;Data Source=TEST;Initial Catalog=910test;User Id=" & ingr_galUSR	& ";Password=" &ingr_galPAS& ";Current Language=English"

' Подключаемся к Галактике
Set cmd = CreateObject("ADODB.Command")
set cn  = CreateObject("ADODB.Connection")
if Err.Number <> 0 then 
	call CloseLogFile 
	call WriteLogFile("Ошибка выполнения:[" & Err.Number & "] " &Err.Description)  
	call CloseLogFile 
	WScript.Quit -1 
end if

cn.ConnectionString = conStr
cn.Open
if Err.Number <> 0 then 
	call WriteLogFile("Ошибка выполнения:[" & Err.Number & "] " &Err.Description)  
	call CloseLogFile 
	WScript.Quit -1 
end if
17 сен 14, 17:05    [16586766]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
aleks2
Guest
bormental
Добрый день

есть представление на скуль сервере :
Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)

к которому необходимо обращаться из vbs-скрипта. Кусок из него :

[src VB]
....
'создаем рекордсет для выборки загружаемых документов
Set RS = CreateObject("ADODB.Recordset")
'RS.CursorLocation = adUseClient
RS.Open "select [ID],[BUKRS],[BLART],[BELNR],[DOGOVOR],[DOGPOS],[XBLNR],[WAERS],[BUDAT],[KTEXT],[LIFNR],[SAKNR],[RGJAHR],[RBELNR],[RBUZEI],[WTGES],[WTGES1],[FDATK],[PTEXT],[ADVRES],[BLDAT],[BLPOS],[ZDOGPOS],[AUFNR],[SAKNR],[FISTL],[OPERA],[SAPERROR] from [ingr_sklfo_export_SASF] where isnull(opera,'') <>''", cn,1,3
.

как бы так заставить выбирать данные под ним без таких привелегий как db_owner из того представления

Вы не выбираете - вы открываете ADODB.Recordset.
ADODB начинает запрашивать метаданные таблиц.
Либо права на таблицы даете, либо вью создаете с опцией WITH VIEW_METADATA.
17 сен 14, 17:15    [16586814]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
bormental
Member

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

права на таблу даны точно.
17 сен 14, 17:30    [16586893]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
aleks2
Guest
bormental
aleks2,

права на таблу даны точно.


Ну-ну. Сиди, гадай.

ЗЫ. Есть, канешно вероятность, что у тя несколько таблиц в разных схемах.
17 сен 14, 17:44    [16586962]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
bormental
как бы так заставить выбирать данные под ним без таких привелегий как db_owner из того представления

bormental
Если под этим юзером зайти в mssql managment studio и выполнить запрос тупо из скрипта Выше - то все хорошо возвращает.

Очевидно, дело не в правах соединения.

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

Ещё может вьюха ingr_sklfo_export_SASF зависеть от настроек соединения, и оно у разных пользователей оказывается разное (а в SSMS одинаковое)
17 сен 14, 17:53    [16587016]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
o-o
Guest
+1 ко WITH VIEW_METADATA.
вам что, трудно вью с этой опцией пересоздать?

раз в студии выполняется, а из vbs нет,
наверняка нет прав на одну из таблиц.
и пока выборка идет из вью (студия), все выбирается,
а из vbs он может метаданные таблиц опрашивать.
17 сен 14, 22:08    [16587977]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
bormental
Member

Откуда:
Сообщений: 90
да пересоздавал с VIEW_METADATA - все одно.
Но ,походу, нащупал в чем дело
в описание вью имело такое :

ALTER VIEW [dbo].[ingr_sklfo_export_SASF]  WITH VIEW_METADATA
AS
SELECT        
f$atl_nrec AS ID, 
F$BUKRS AS BUKRS, 
F$BLART AS BLART, 
F$BELNR AS BELNR, 
F$DOGOVOR AS DOGOVOR, 
F$DOGPOS AS DOGPOS, 
F$XBLNR AS XBLNR, 
F$WAERS as WAERS,
convert(varchar,dbo.to_sqldate_m(F$BUDAT),112) AS BUDAT,--F$BUDAT AS BUDAT,
--F$BUDAT AS BUDAT,
F$KTEXT AS KTEXT,
F$LIFNR AS LIFNR, 
F$SAKNR AS SAKNR, 
F$RGJAHR AS RGJAHR, 
F$RBELNR AS RBELNR, 
F$RBUZEI AS RBUZEI, 
replace(F$WTGES,'.',',') AS WTGES, 
replace(F$WTGES1,'.',',') AS WTGES1, 
convert(varchar,dbo.to_sqldate_m(F$FDATK),112) AS FDATK, --F$FDATK AS FDATK, 
--F$FDATK AS FDATK,
F$PTEXT AS PTEXT,
F$ADVRES AS ADVRES,
convert(varchar,dbo.to_sqldate_m(F$BLDAT),112) AS BLDAT,--F$BLDAT AS BLDAT,
--F$BLDAT AS BLDAT,
F$BLPOS AS BLPOS,
F$ZDOGPOS AS ZDOGPOS,
F$AUFNR AS AUFNR,
F$FISTL AS FISTL,
F$SAPERROR as SAPERROR, 
F$OPERA as OPERA
FROM  dbo.T$INGR_SKLFO_export
where F$BLART in ('SA','SF')



если убрать вычисляемые поля посредством UDF dbo.to_sqldate_m то выборка сразу прошла.
После раздачи грантов на dbo.to_sqldate_m все ок стало.
Жаль как то в vbs не опознавалась эта ошибка, а типа все хорошо, но просто 0 возвращалось записей.
18 сен 14, 00:16    [16588191]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
bormental
если убрать вычисляемые поля посредством UDF dbo.to_sqldate_m то выборка сразу прошла.
После раздачи грантов на dbo.to_sqldate_m все ок стало.
Жаль как то в vbs не опознавалась эта ошибка, а типа все хорошо, но просто 0 возвращалось записей.
Ну да, SSMS настолько крутая программа, что заставляет работать сервер без грантов :-)

А vbs такой примитивный, что не распознаёт часть ошибок :-)

PS. Знаете, я программировал на VB и ADO очень давно, лет 15-20 назад, но хорошо помню, что RecordCount всегда возвращает правильное количество записей, только когда все они прочитаны клиентом. Нельзя так писать, неправильно это.
18 сен 14, 01:06    [16588248]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
bormental
Member

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

Понимаю что чудес не бывает..но сейчас попробовал создать еще одного юзера базы, переконективаюсь сразу же под ним в mssql managment studio - и выполняется запрос :
select [ID],[BUKRS],[BLART],[BELNR],[DOGOVOR],[DOGPOS],[XBLNR],[WAERS],[BUDAT],[KTEXT],[LIFNR],[SAKNR],[RGJAHR],[RBELNR],[RBUZEI],[WTGES],[WTGES1],[FDATK],[PTEXT],[ADVRES],[BLDAT],[BLPOS],[ZDOGPOS],[AUFNR],[SAKNR],[FISTL],[OPERA],[SAPERROR] from [dbo].[ingr_sklfo_export_SASF] where isnull(opera,'') <>''

успешно

запускаю под ним скрипт vbs - не..ничего не возвращает
Возвращаюсь в ms консоль под собой , говорю :
grant all on dbo.to_sqldate_m to Roel1

после этого повторная отработка vbs возвращает то что нужно.
Вот такие пироги.
18 сен 14, 01:45    [16588300]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
aleks2
Guest
bormental
alexeyvg,

Понимаю что чудес не бывает..но сейчас попробовал создать еще одного юзера базы, переконективаюсь сразу же под ним в mssql managment studio - и выполняется запрос :
select [ID],[BUKRS],[BLART],[BELNR],[DOGOVOR],[DOGPOS],[XBLNR],[WAERS],[BUDAT],[KTEXT],[LIFNR],[SAKNR],[RGJAHR],[RBELNR],[RBUZEI],[WTGES],[WTGES1],[FDATK],[PTEXT],[ADVRES],[BLDAT],[BLPOS],[ZDOGPOS],[AUFNR],[SAKNR],[FISTL],[OPERA],[SAPERROR] from [dbo].[ingr_sklfo_export_SASF] where isnull(opera,'') <>''

успешно

запускаю под ним скрипт vbs - не..ничего не возвращает
Возвращаюсь в ms консоль под собой , говорю :
grant all on dbo.to_sqldate_m to Roel1

после этого повторная отработка vbs возвращает то что нужно.
Вот такие пироги.


Тредстартер - стихийная ванга.
Вместо проведения ОСМЫСЛЕННЫХ экспериментов склонен к перерасходу кофейной гущи.

1. Чо стремно выполнить через адо
select [ID],[BUKRS],[BLART],[BELNR],[DOGOVOR],[DOGPOS],[XBLNR],[WAERS],[BUDAT],[KTEXT],[LIFNR],[SAKNR],[RGJAHR],[RBELNR],[RBUZEI],[WTGES],[WTGES1],[FDATK],[PTEXT],[ADVRES],[BLDAT],[BLPOS],[ZDOGPOS],[AUFNR],[SAKNR],[FISTL],[OPERA],[SAPERROR] 
INTO dbo.SomeTable
from [dbo].[ingr_sklfo_export_SASF] where isnull(opera,'') <>''

И осмотреть результат?

2. Чо, стремно создать вьюху НА ОДНУ ТАБЛИЦУ и проверить, чо там будет возвращать?
18 сен 14, 05:44    [16588379]     Ответить | Цитировать Сообщить модератору
 Re: права на view  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
bormental
Вот такие пироги.
Вот об этом и речь - написанное приложение на vbs содержит ошибку, которой нет в написанном программистами микрософта приложении SSMS

Вы понимаете, писатели SSMS ведь не используют какие то тайные методы, недокументированные функции с прямым обращением к файлам БД.

У них ровно то же самое: строка коннекта, открытие, им доступны ровно те же функции библиотек доступа.

Я вам намекаю на ошибку в коде на vbs. А конкретнее - на проверку свойства RecordCount
Вы бы для удовлетворения любопытства посмотрели бы для начала, есть всё таки записи в RS в том случае, если RecordCount = 0

Я понимаю, можно удовлетвориться тем, что после grant all on dbo.to_sqldate_m to Roel1 всё заработало, и забить, но интересно было бы разобраться, в чём всё таки дело, почему SSMS и ваше приложение работают по разному, мне лично бы свербило, уснуть бы не смог.
18 сен 14, 13:28    [16590312]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить