Как я могу управлять правами хранимой процедуры роли в SQL Server
Я хочу создать три роли базы данных SQL Server.
- Это может СОЗДАТЬ, ИЗМЕНИТЬ и ВЫПОЛНИТЬ все хранимые процедуры в базе данных.
- Это может только ВЫПОЛНИТЬ все хранимые процедуры в базе данных
- У которых нет доступа к хранимым процедурам в базе данных
Я создал роли, но при ОТМЕНЕ их разрешений у меня возникают проблемы.
Я казнил
REVOKE CREATE PROCEDURE TO [ROLE NAME]
чтобы отозвать разрешения на создание процедуры, и она успешно выполнилась.
Но при выполнении этого оператора я получил ошибку:
Ошибка: неправильный синтаксис рядом с "ALTER".
Я новичок в правах на роль SQL-сервера, поэтому могу полностью ошибиться в своем подходе.
Пожалуйста, направьте меня к правильному достижению моей цели.
Благодарность
2 ответа
Из документации Создайте хранимую процедуру:
Разрешения
Требуется разрешение CREATE PROCEDURE в базе данных и разрешение ALTER для схемы, в которой создается процедура.
Поэтому просто давая CREATE PROCEDURE
сам по себе не позволит вам создать процедуру. Фактически, даваяROLE
то CREATE PROCEDURE
разрешение, а не ALTER
на схеме приведет к следующей ошибке:
Указанное имя схемы "dbo" либо не существует, либо у вас нет разрешения на его использование.
Здесь нет ALTER PROCEDURE
разрешения, следовательно, для члена ROLE
иметь возможность как CREATE
а также ALTER
а PROCEDURE
вам нужно будет сделать:
GRANT CREATE PROCEDURE TO YourRole;
GRANT ALTER ON SCHEMA::dbo TO YourRole; --Replace with appropriate schema name
Это, однако, также позволит пользователю ALTER
любые процедуры по указанной схеме. Ut также позволяет тем, кто играет эту роль,ALTER
а также другие объекты схемы (например, таблицы).
Если твой ROLE
имеет разрешения на ALTER
процедуры, и вы хотите удалить это, вам нужно будет выполнить следующее:
REVOKE ALTER ON SCHEMA::dbo TO YourRole;
Это, как уже упоминалось, лишит их возможности ALTER
любые другие объекты в указанной схеме.
Помнить, REVOKE
не DENY
, это просто означает, что USER
не унаследует это разрешение от этого ROLE
больше нет. ЕслиUSER
имеет разрешение от другого ROLE
, или у них есть разрешение, они смогут продолжать использовать разрешение. Если вы должны остановитьUSER
от выполнения действия, независимо от любых других разрешений, они должны иметь DENY
разрешение.
1) Это может СОЗДАТЬ, ИЗМЕНИТЬ и ВЫПОЛНИТЬ все хранимые процедуры в базе данных
Это роль db_owner или разрешение CONTROL в базе данных. Любой, у кого есть все эти разрешения, может повысить свои привилегии до администратора уровня базы данных. Так что не пытайся.
2) Это может только ВЫПОЛНИТЬ все хранимые процедуры в базе данных
ПРЕДОСТАВИТЬ ВЫПОЛНЕНИЕ [SomeRole]
3) У которых нет доступа к хранимым процедурам в базе данных
Пользователь не имеет доступа к хранимой процедуре, если вы не предоставите разрешения или не добавите их к роли, имеющей разрешения.