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

Откуда:
Сообщений: 187
Добрый день всем!

Здесь http://msdn.microsoft.com/en-us/library/aa905208%28v=sql.80%29.aspx сказано:

The dbo is a user that has implied permissions to perform all activities in the database.

Поясните, пожалуйста, значит ли это, что пользователь dbo имеется администраторские полномочия в любых схемах, отличных от dbo?

Заранее всем спасибо!
5 дек 12, 16:44    [13582832]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
В пользователя dbo мапятся владельцы базы и администраторы сервера. Так что ответ на ваш вопрос - да.
5 дек 12, 16:54    [13582936]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Glory
Member

Откуда:
Сообщений: 104751
Михаил Фв
Поясните, пожалуйста, значит ли это, что пользователь dbo имеется администраторские полномочия в любых схемах, отличных от dbo?

А "to perform all activities " можно как то перевести иначе чем "производить любые действия" ?
5 дек 12, 16:55    [13582955]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
Гавриленко Сергей Алексеевич, спасибо за ответ!

Если возможно, скажите, пожалуйста, что Вы думаете по этому вопросу:
https://www.sql.ru/forum/actualthread.aspx?tid=988423

Проблема в том, что проверяя на практике оба варианта из этого вопроса
(нужно дать возможность пользователю, не имеющему никаких разрешений на таблицу из схемы НЕ-dbo удалять определённые строки, для этого предлагается два варианта:

CREATE PROCEDURE Schema1.Pr1 WITH EXECUTE USER 'dbo'
AS
DELETE FROM sometable WHERE Col1 = 0
GO

и

CREATE PROCEDURE Schema1.Pr1
AS
DELETE FROM sometable WHERE Col1 = 0
GO)

...я получил два одинаковых результата: процедура запускается, а её действие не выполняется: это ожидаемый результат для второго варианта и не ожидаемый для первого, поэтому и я задал вопрос о dbo...
5 дек 12, 17:15    [13583115]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Михаил Фв
процедура запускается, а её действие не выполняется
"действие не выполняется" - это сообщение об ошибке такое, что ли?
5 дек 12, 17:22    [13583153]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Михаил Фв
Здесь http://msdn.microsoft.com/en-us/library/aa905208%28v=sql.80%29.aspx сказано:

Это документация по SQL Server 2000.

Михаил Фв
CREATE PROCEDURE Schema1.Pr1 WITH EXECUTE USER 'dbo'

Возможность EXECUTE AS появилась в SQL Server 2005. Модель безопасности несколько поменялась (в частности, в SQL 2000 схемы и пользователи были одними и теми же сущностями, начиная с 2005 это разные объекты). Читайте документацию по той версии, которую вы используете.
5 дек 12, 17:36    [13583260]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
...если говорить точно, то я в тесте вместо DELETE FROM использовал "SELECT FROM", и в обоих случаях результатом выполнения процедуры является таблица, состоящая только из имён столбцов - никаких строк данных в ней нет, напр.:

Col1 Col2
5 дек 12, 18:11    [13583481]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Михаил Фв
...если говорить точно, то я в тесте вместо DELETE FROM использовал "SELECT FROM", и в обоих случаях результатом выполнения процедуры является таблица, состоящая только из имён столбцов - никаких строк данных в ней нет, напр.:

Col1 Col2
А как вы проверили, что данные там есть?

И вообще, отвыкайте писать таблицы без указания схемы.

Сообщение было отредактировано: 5 дек 12, 18:19
5 дек 12, 18:19    [13583525]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Glory
Member

Откуда:
Сообщений: 104751
Михаил Фв
если говорить точно, то я в тесте вместо DELETE FROM использовал "SELECT FROM", и в обоих случаях результатом выполнения процедуры является таблица, состоящая только из имён столбцов - никаких строк данных в ней нет, напр.:

Элементарный вопрос - а как вы проверили, что после всех ваших "настроек" процедура действительно работает в контексте dbo ?
5 дек 12, 18:20    [13583530]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Михаил Фв
...если говорить точно, то я в тесте вместо DELETE FROM использовал "SELECT FROM", и в обоих случаях результатом выполнения процедуры является таблица, состоящая только из имён столбцов - никаких строк данных в ней нет, напр.:

Col1 Col2

Что возвращает такой запрос?

select schema_name(schema_id), name from sys.all_objects where name = 'sometable'
5 дек 12, 18:22    [13583545]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
select schema_name(schema_id), name from sys.all_objects where name = 'sometable' - не возвращает ничего, кроме имён столбцов.

Прошу всех извинить...стал отвечать на этот вопрос "А как вы проверили, что данные там есть?" и понял, что забыл заполнить тестовую таблицу данными...

После заполнения данными обе процедуры (БЕЗ Execute AS dbo и С Execute AS dbo) возвращают полный набор строк. Т.е. вопрос развернулся на 180 гр.: теперь я не понимаю, почему не имея разрешений на таблицу новый пользователь (не dbo) видит её содержимое...


Чтобы не тратить много времени на тесты, напишите, пожалуйста, вкратце: достаточного ли этих действий, чтобы пользователь (User1) мог выполнять (и получать данные) процедуру Schema1.Pr1, которая удаляет (читает...) данные из таблицы Schema1.Table1, при условии, что User1 не имеет никаких разрешений на таблицу и не является владельцем схемы Schema1:

1)
CREATE PROCEDURE Schema1.Pr1
AS
DELETE FROM Schema1.Table1 WHERE Col1 = 0

2)
use TestDB
go
GRANT EXECUTE ON Schema1.Pr1 TO User1

(я полагал, что в этом случае User1 НЕ будет иметь право на удаление строк из Schema1.Table1, а только лишь на запуск процедуры).
5 дек 12, 19:13    [13583820]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Потому что Ownership Chaining.
5 дек 12, 19:15    [13583826]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
Ок, спасибо.

Если же в вопросе НЕТ явного указания на владельцев схемы, таблицы и процедуры надеяться на цепочку (и, соответственно, на вариант БЕЗ Execute AS) нельзя, правильно?

Вариант С Execute AS должен работать при любых обстоятельствах в пределах одной базы, так?
6 дек 12, 10:43    [13586021]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Михаил Фв
Member

Откуда:
Сообщений: 187
P.S. Тест 2:

Я изменил владельца схемы Schema1 на третьего пользователя USER3, таким образом цепочка пропала, тем не менее пользователь User1 запуская процедуру Schema1.Pr1 (владелец которой dbo) всё равно получает данные из таблицы Schema1.Table1 (у пользователя User1 есть только права на запуск процедуры Schema1.Pr1, прав на таблицу Schema1.Table1 нет никаких).

???
6 дек 12, 15:07    [13588577]     Ответить | Цитировать Сообщить модератору
 Re: dbo User  [new]
Glory
Member

Откуда:
Сообщений: 104751
Михаил Фв
Я изменил владельца схемы Schema1 на третьего пользователя USER3,

Владелец схемы и схема - это разные вещи
Вы не дочитали про Ownership Chains
6 дек 12, 15:24    [13588687]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить