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

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

Есть приложение, использующее роль приложения для работы с SQL Server.
Есть процедура вида:

...
begin

SELECT uid, name
FROM sysusers

end

В SQL Server 2000 приложение получало все учетки, которые есть в этой таблице.
В SQL Server 2008 приложение получает только системные учетки, но при добавлении "with execute as owner"

...
with execute as owner
as
begin

SELECT uid, name
FROM sysusers

end
все данные возвращаются.

Теперь есть такая же проблема в SQL Server 2008R2 - ошибка "dbo не олицетворен..." бла-бла.. Без "with execute as owner" выводятся только встроенные учетки.

Вопрос: как через ХП вывести все учетки (самое главное, чтобы UID был, так как на него завязана дальнейшая настройка доступов в приложении) ?
3 июн 13, 09:45    [14382086]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Виктор1982
ошибка "dbo не олицетворен..." бла-бла.. Без "with execute as owner" выводятся только встроенные учетки.

Не могли бы вы уточнить текст ошибки?:)
И если execute as owner выводит то, что вам нужно, почему бы не использовать?
3 июн 13, 09:47    [14382093]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
Сергей Викт.
Виктор1982
ошибка "dbo не олицетворен..." бла-бла.. Без "with execute as owner" выводятся только встроенные учетки.

Не могли бы вы уточнить текст ошибки?:)
И если execute as owner выводит то, что вам нужно, почему бы не использовать?


Текст ошибки уточню сейчас.
В том-то и дело, что "execute as owner" выводит то, что нужно в 2008-м, а в 2008 R2 нет - ошибка
3 июн 13, 09:57    [14382135]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Виктор1982
Сергей Викт.
пропущено...

Не могли бы вы уточнить текст ошибки?:)
И если execute as owner выводит то, что вам нужно, почему бы не использовать?


Текст ошибки уточню сейчас.
В том-то и дело, что "execute as owner" выводит то, что нужно в 2008-м, а в 2008 R2 нет - ошибка

Скинь тогда код ошибки, пожалуйста. ПОсмотрим)
3 июн 13, 09:59    [14382137]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Msg 916, Level 14, State 1, Procedure aaa, Line 4
The server principal "sa" is not able to access the database "Report" under the current security context.


Ошибка такого плана? Скиньте, пожалуйста, полный код процедуры
3 июн 13, 10:01    [14382145]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Виктор1982,

Установите флаг trustworthy на вашей БД.
3 июн 13, 10:10    [14382182]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
Текст ошибки (SQL Server руссифицированный):
"Невозможно выполнить в качестве участника БД, поскольку участник ДБО не существует или этот тип участника не может проходить олицетворение или отсутствует разрещение"

Алексей Куренков, не помгает.
3 июн 13, 11:28    [14382633]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Виктор1982
Текст ошибки (SQL Server руссифицированный):
"Невозможно выполнить в качестве участника БД, поскольку участник ДБО не существует или этот тип участника не может проходить олицетворение или отсутствует разрещение"

Алексей Куренков, не помгает.


Виктор, покажите, пожалуйста, полный текст процедуры
3 июн 13, 11:31    [14382660]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
invm
Member

Откуда: Москва
Сообщений: 9722
Виктор1982,

Что вернет
select
 p.name
from
 sys.databases db join
 sys.server_principals p on p.sid = db.owner_sid
where
 db.database_id = db_id('Моя БД');
3 июн 13, 11:36    [14382692]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Виктор1982
Текст ошибки (SQL Server руссифицированный):
"Невозможно выполнить в качестве участника БД, поскольку участник ДБО не существует или этот тип участника не может проходить олицетворение или отсутствует разрещение"

Алексей Куренков, не помгает.


Попросите админов выполнить скрипт. У Вас нет привилегий на сервере SQL.
alter database [mydb] set trustworthy on

Базу данных только в скрипте свою поставьте.
3 июн 13, 11:41    [14382740]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
invm
Виктор1982,

Что вернет
select
 p.name
from
 sys.databases db join
 sys.server_principals p on p.sid = db.owner_sid
where
 db.database_id = db_id('Моя БД');


Сейчас не смогу сделать, вечером выполню.
3 июн 13, 11:42    [14382758]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
Алексей Куренков
Виктор1982
Текст ошибки (SQL Server руссифицированный):
"Невозможно выполнить в качестве участника БД, поскольку участник ДБО не существует или этот тип участника не может проходить олицетворение или отсутствует разрещение"

Алексей Куренков, не помгает.


Попросите админов выполнить скрипт. У Вас нет привилегий на сервере SQL.
alter database [mydb] set trustworthy on

Базу данных только в скрипте свою поставьте.


Привилегии есть, процедура возвращает все учетки, если запускать через SSMS, а вот роль приложения прав не имеет. Как ей их дать?

alter database [mydb] set trustworthy on - человек запускал, клянется, что скрипт отработал, но ошибка в приложении осталась.

К сожалению сам до вечера туда доступа не имею.
3 июн 13, 11:45    [14382784]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
Сергей Викт.
Виктор1982
Текст ошибки (SQL Server руссифицированный):
"Невозможно выполнить в качестве участника БД, поскольку участник ДБО не существует или этот тип участника не может проходить олицетворение или отсутствует разрещение"

Алексей Куренков, не помгает.


Виктор, покажите, пожалуйста, полный текст процедуры


ALTER PROCEDURE [dbo].[p_SqlUsersLookup]
with execute as owner
AS
BEGIN
SET NOCOUNT ON;

SELECT uid, name
FROM sysusers
END
3 июн 13, 11:47    [14382798]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
Коллеги, еще раз
процедура, запущенная из SSMS возвращает все учетки (пользователь - sysadmin)
Из-под приложения нет, так как роль приложения под которым стучится приложение каких-то прав не имеет.
3 июн 13, 11:49    [14382811]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
invm
Member

Откуда: Москва
Сообщений: 9722
Виктор1982,

Такая ошибка при доступе к объектам, у которых владелец dbo обычно возникает, когда БД была восстановлена из резервной копии, а владельца БД восстановить не удалось. Лечение:
alter authorization on database::<Моя БД> to sa;
3 июн 13, 12:12    [14383000]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
invm
Виктор1982,

Такая ошибка при доступе к объектам, у которых владелец dbo обычно возникает, когда БД была восстановлена из резервной копии, а владельца БД восстановить не удалось. Лечение:
alter authorization on database::<Моя БД> to sa;

спасибо, пробуем.
А в каких случаях владелец БД не восстанавливается?
Очень уж странно, что эта ошибка появилась при переходе на другую версию сервера.
3 июн 13, 12:26    [14383137]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
invm
Member

Откуда: Москва
Сообщений: 9722
Виктор1982
А в каких случаях владелец БД не восстанавливается?
Когда на сервере нет логина с таким же сидом как в резервной копии.
3 июн 13, 12:44    [14383284]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
invm, спасибо, заработало.
Я так понимаю, что с таким же успехом можно было запустить и sp_changedbowner ?
3 июн 13, 12:55    [14383359]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
invm
Member

Откуда: Москва
Сообщений: 9722
Виктор1982
Я так понимаю, что с таким же успехом можно было запустить и sp_changedbowner ?
Да. Но она меняет владельца у текущей БД, следовательно можно и промахнуться :)
3 июн 13, 13:07    [14383472]     Ответить | Цитировать Сообщить модератору
 Re: видимость учетных записей из sysusers (роль приложения)  [new]
Виктор1982
Member

Откуда:
Сообщений: 31
invm
Виктор1982
Я так понимаю, что с таким же успехом можно было запустить и sp_changedbowner ?
Да. Но она меняет владельца у текущей БД, следовательно можно и промахнуться :)

invm, еще раз спасибо

Тему можно закрыть.
3 июн 13, 13:17    [14383536]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить