Почему GRANT должен быть написан после GO в хранимой процедуре SQL? - PullRequest
3 голосов
/ 29 сентября 2010

У нас была написана хранимая процедура, и в последней строке SP был написан GRANT. Наш администратор БД рекомендовал, чтобы перед оператором GRANT был GO, иначе он будет выполняться каждый раз.

Что это значит? Я не уверен, как GO предотвратит выполнение GRANT «каждый раз».

Ответы [ 3 ]

9 голосов
/ 29 сентября 2010

Определение хранимой процедуры не должно заканчиваться и END. Если вы определите свою процедуру как это:

CREATE PROCEDURE MySP AS
SELECT field1, field2 FROM table;

GO

GRANT EXECUTE ON MySP TO user1;

... тогда SQL Server создаст процедуру, которая возвращает набор результатов, и предоставит разрешения на выполнение этой хранимой процедуры для user1.

Если вы делаете что-то подобное, то:

CREATE PROCEDURE MySP AS
SELECT field1, field2 FROM table;

GRANT EXECUTE ON MySP TO user1;

... тогда SQL Server создаст процедуру, которая и возвращает набор результатов, и предоставляют разрешение на выполнение каждый раз, когда выполняется хранимая процедура. Другими словами, GRANT входит в определение хранимой процедуры. Наверное, не то, что вы хотели.

Оператор GO используется для обозначения конца пакета в SQL Server. Он однозначно говорит SQL Server: «Я закончил с тем, что выполнял в предыдущем наборе операторов». Это очень хорошая практика - добавлять это в конец каждого определения в ваших скриптах создания; эта точная ситуация укусила меня не раз в прошлом.

1 голос
/ 29 сентября 2010

Ваш администратор БД подразумевал, что этот GRANT будет частью вашей хранимой процедуры и будет выполняться каждый раз при выполнении вашей процедуры.Обычно пользователям не разрешается предоставлять привилегии, поэтому ваша процедура должна вызывать ошибки при каждом выполнении последней команды.

0 голосов
/ 29 сентября 2010

GO - это разделитель команд по умолчанию, используемый в анализаторе запросов, вы можете настроить его так, как хотите.вы также можете добиться того же, используя BEGIN..END вокруг тела proc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...