2012-05-28 3 views
1

Я хочу знать, какие разрешения по умолчанию для хранимых процедур SQL-сервера. Например, я создал пользователя в базе данных, но не играет никакой роли или каких-либо разрешений, предоставленных за исключением права на выполнение, как:sql-сервер разрешения по умолчанию для сервера

GRANT EXECUTE ON SCHEMA :: [dbo] TO [newUser] 

позже меня (как са входа в) создали хранимую процедуру, которая делает только выбрать из таблицу, как:

CREATE PROCEDURE dbo.selectX AS 
BEGIN 
SELECT ID, NAME FROM MyTable 
END 

и мой пользователь [NEWUSER] можно выполнить и увидеть результат оператора выбора, как:

EXEC dbo.selectX 

До сих пор я могу предположить, что хранимые процедуры имеют разрешения по умолчанию, которые мой пользователь не имеет. Я пробовал другие dmls как UPDATE, INSERT, DELETE и пользователь успешно выполнил процедуры. Но! когда я создал proceure с DDL, как создать таблицу .. такие как:

CREATE PROCEDURE dbo.crtNT AS 
BEGIN 

    CREATE TABLE del(id int) --for test 
END 

и когда NEWUSER выполняет эту процедуру ошибка возникает, как:

CREATE TABLE permission denied in database 'MyDb' 

И вот мой вопрос: По умолчанию, у хранимых процедур есть разрешение с DML (выбрать, вставить, обновить vs.), но не с DDL (create, drop table vs.)? Потому что я не видел никаких объяснений об этой ситуации в Books Online или где-либо еще. Любые комментарии будут приветствоваться.

ответ

1

Вы правы в своем предположении, что заявления DDL обрабатываются по-разному.

Процедуры с заявлениями DML работать через механизм Ownership Chaining однако, как это цитата из документации EXECUTE AS заявляет

Помните, что цепочки владения относится только к заявлениям DML.

+0

поскольку для создания таблицы требуется разрешение на уровне схемы, ваши объяснения и предоставленные ссылки вполне удовлетворительны. –

 Смежные вопросы

  • Нет связанных вопросов^_^