Как я могу управлять правами хранимых процедур роли в SQL Server - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу создать три SQL роли базы данных сервера.

  1. Может создавать, изменять и выполнять все хранимые процедуры в базе данных
  2. Может выполнять только все хранимые процедуры в база данных
  3. которые не имеют доступа к каким-либо хранимым процедурам в базе данных

Я создал роли, но у меня возникают проблемы при отзыве их разрешений.

I выполнил

REVOKE CREATE PROCEDURE TO [ROLE NAME]

, чтобы отозвать разрешения на создание процедуры, и она успешно выполнена.

Но при выполнении этого оператора возникла ошибка:

Ошибка: Неверный синтаксис рядом с «ALTER».

Я очень плохо знаком с SQL правами на роль сервера, поэтому могу ошибаться в своем подходе.

Пожалуйста, помогите мне достичь своей цели

Спасибо

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Из документации Создание хранимой процедуры :

Разрешения

Требуется разрешение CREATE PROCEDURE в базе данных и разрешение ALTER для схемы, в которой процедура создается.

Поэтому, если просто указать CREATE PROCEDURE, вы не сможете создать процедуру. Фактически, предоставление ROLE разрешения CREATE PROCEDURE, а не ALTER в схеме приведет к следующей ошибке:

Указанное имя схемы "dbo" либо не существует, либо у вас нет разрешения на его использование.

Нет разрешений ALTER PROCEDURE, поэтому член ROLE может иметь как CREATE, так и ALTER a *. 1025 * вам нужно будет сделать:

GRANT CREATE PROCEDURE TO YourRole;
GRANT ALTER ON SCHEMA::dbo TO YourRole; --Replace with appropriate schema name

Это, однако, также позволит пользователю ALTER любые процедуры в указанной схеме. Кроме того, включите тех, кто в этой роли, ALTER для других объектов схемы (например, таблиц).

Если ваш ROLE имеет разрешения на ALTER процедур, и вы хотите удалить это вам нужно будет выполнить следующее:

REVOKE ALTER ON SCHEMA::dbo TO YourRole;

Это, как упоминалось, также отменит их способность ALTER любых других объектов в указанной схеме.

Помните, REVOKE не DENY, это просто означает, что USER больше не унаследует это разрешение от этого ROLE. Если USER имеет разрешение от другого ROLE или у них есть разрешение, они смогут продолжать использовать разрешение. Если вы должны остановить USER от выполнения действия, независимо от каких-либо других разрешений, они должны иметь разрешение DENY.

0 голосов
/ 25 февраля 2020

1) Это может СОЗДАТЬ, ИЗМЕНИТЬ и ВЫПОЛНИТЬ все хранимые процедуры в базе данных

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

2) Это может только выполнить все хранимые процедуры в базе данных

GRANT EXECUTE TO [SomeRole]

3) У которых нет доступа к каким-либо хранимым процедурам в базе данных

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

...