Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция GRANT советы и хитрости SQL Server

Реализация инструкции GRANT в SQL Server имеет некоторые отличия от стандарта ANSI. Не поддерживается стандартное предложение FROM, а также предложения HIERARCHY и ADMIN. Однако она предоставляет возможность предоставлять специфические системные привилегии, и предоставлять их из контекста другого пользователя. Синтаксис приводится ниже.

GRANT {[объектная_привилегия] [, …] |

[системная_привилегия]} [ON {[объект] [(столбец [, …])]]

ТО {имя_получателя [, …] | роль [, …] | PUBLIC | GUEST} [WITH GRANT OPTION] [AS {группа | роль}]

Где:

объектные привилегии

Предоставляются привилегии для выполнения различных операций, которые можно использовать в любых сочетаниях (за исключением ALL [PRIVELEGES]).

ALL [PRIVELEGES]

Предоставляются все привилегии, назначенные в настоящий момент указанным пользователям и/или для указанных объектов базы данных. Использование этого предложения не поощряется, поскольку способствует нечеткости программирования. Предложение ALL могут использовать только пользователи с системными ролями SYSADMIN и DBOWNER или же владелец объекта.

{SELECT | INSERT DELETE | UPDATE}

Указанному пользователю присваивается указанная привилегия доступа к указанному объекту (например, к таблице или представлению). Для указания привилегий уровня столбца используйте список столбцов, заключенный в скобки. Привилегии будут назначены только для названных столбцов.

REFERENCES

Предоставляется привилегия создавать и удалять ограничения типа «внешний ключ», ссылающиеся на объект базы данных как на родительский объект.

EXECUTE

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

системные_привилегии

Предоставляются следующие привилегии, каждая из которых дает право на выполнение соответствующей инструкции.

CREATE DATABASE
CREATE DEFAULT
CREATE FUNCTION
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VIEW
BACKUP DATABASE
BACKUP LOG

Привилегия на выполнение инструкции CREATE также подразумевает привилегию на выполнение соответствующих инструкций ALTER и DROP.

ON {[объект] [(столбец [, …])]

Указывается объект, право доступа к которому назначается. Это предложение не требуется при присвоении системных привилегий. Если объект представляет собой таблицу или представление, вы можете при желании указать привилегии для конкретных столбцов. Для таблицы или представления вы можете предоставлять привилегии SELECT INSERT UPDATE. DELETE и REFERENCES. Для столбцов таблиц и представлений или пользовательской функции вы можете назначать только привилегии SELECT и UPDATE. Для хранимой процедуры и расширенной хранимой процедуры вы можете назначать привилегию EXECUTE. Для пользовательских функций вы также можете присваивать привилегии REFERENCES. Привилегии REFERENCES являются необходимыми для функций и представлений, созданных при помощи предложения WITH SCHEMABUILDING.

ТО {имя_получателя [, …] роль [, …] PUBLIC GUEST}

Имя пользователя или роли, которому назначается привилегия. Можно указать несколько получателей привилегии, перечислив их имена через запятую. Чтобы предоставить привилегии роли PUBLIC, используйте ключевое слово PUBLIC, подразумевается, что эта роль включает всех пользователей. Платформа SQL Server также поддерживает роль с именем GUEST, которую используют все пользователи, которые не имеют никаких других учетных записей в базе данных. Поскольку SQL Server позволяет использовать две разные модели безопасности (одна, основанная на базе данных, а другая — на операционной системе Windows), вы можете предоставлять привилегии пользователю SQL Server, пользователю Windows, группе Windows или роли базы данных SQL Server. В качестве имени получателя можно указать любой из упомянутых вариантов.

WITH GRANT OPTION

Позволяет получателю назначать указанную привилегию другим пользователям и ролям. Использовать предложение WITH GRANT OPTION можно только применительно к объектным привилегиям.

AS {группа роль}

Указывается альтернативный пользователь или группа, имеющая в базе данных право выполнять инструкцию GRANT. Вы можете использовать предложение AS для предоставления привилегий так, как если бы сеанс, в котором происходит назначение привилегий, являлся частью контекста группы или роли, отличной от текущей.

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

Модель безопасности SQL Server несколько отличается от моделей других описываемых здесь платформ (и несколько отличается от стандарта ANSI). Как и в стандарте ANSI, в SQL Server инструкция GRANT используется для присвоения конкретных привилегий пользователю или роли, а инструкция REVOKE — для удаления этих привилегий. В SQL Server эти команды дополняет команда DENY, синтаксис которой практически не отличается от синтаксиса команды REVOKE.

Инструкция DENY в SQL Server позволяет администратору базы данных полностью запрещать некоторые привилегии пользователя или группы. Чтобы привилегии можно было предоставлять снова, этот запрет нужно сначала снять. Инструкция DENY имеет приоритет перед инструкциями GRANT и REVOKE. Инструкцию DENY можно применять для того, чтобы полностью снять все привилегии с пользователя, который иначе мог бы получать привилегии в соответствии с членством в группах Windows или назначенными ролями в базе данных SQL Server.

В SQL Server существует система приоритета прав доступа. Так, если у пользователя есть привилегия, присвоенная ему как пользователю, но эта привилегия отменена на уровне группы (членом которой этот пользователь является), то он теряет эту привилегию на обоих уровнях.

В SQL Server также есть несколько фиксированных системных ролей с заранее заданными правами доступа и к объектам, и к командам. Роли SQL Server таковы:

SYSADMIN

Может выполнять любые действия на сервере и имеет доступ ко всем объектам.

SERVERADMIN

Может настраивать параметры конфигурации сервера, а также запускать и останавливать сервер.

SETUPADMIN

Может запускать процедуры и связанные серверы.

SECURITYADMIN

Может читать протоколы ошибок, изменять пароли, администрировать соединения и предоставлять привилегии CREATE DATABASE.

PROCESSADMIN

Может администрировать процессы, запущенные на SQL Server.

DBCREATOR

Может создавать, изменять и удалять базы данных.

DISKADMIN

Может администрировать диски и файлы.

BULKADMIN

Может выполнять операции массового копирования (ВСР operations) и подавать команду BULK INSERT (и обычные команды INSERT) применительно к таблицам базы данных.

Пользователь с системной ролью SYSADMIN может предоставлять любые права в любой базе данных на сервере. Пользователи с системной ролью DBjOWNER и DB SECURITYADMIN могут предоставлять права доступа к любой инструкции или объекту в базе данных, которой они владеют. Системные привилегии могут предоставлять пользователи с системной ролью DBJDDLADMIN или SYSADMIN, а также владелец базы данных.

Пользователи, которым назначены системные роли, могут назначать эти роли другим пользователям и учетным записям, но не при помощи инструкции GRANT. Чтобы присвоить пользователю системную роль, необходимо использовать системную хранимую процедуру SQL Server, которая называется sp_addsrvrolemember.

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

DBOWNER

Может выполнять в базе данных функции всех прочих системных ролей плюс некоторые другие задачи по конфигурированию и обслуживанию базы данных.

DB_ACCESSADMIN

Может добавлять и удалять в базе данных пользователей Windows и SQL Server.

DB_DATAREADER

Может читать данные во всех пользовательских таблицах базы данных.

DBJATAWRITER

Может читать, добавлять, изменять и удалять данные во всех пользовательских таблицах базы данных.

DBJDDLADMIN

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

DBJECURITYADMIN

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

DBJ3A CKUPOPERA TOR

Может выполнять резервное копирование базы данных.

DB_DENYDATAREADEfi

Запрещается доступ к базе данных для чтения.

DBDENYDAТА WRITER

Запрещается доступ к базе данных для изменения данных.

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

В следующем примере пользователям emily и sarah присваиваются системные привилегии CREATE DATABASE и CREATE TABLE. После этого группе editors назначается несколько привилегий в таблице titles. Затем члены группы editors смогут назначать права доступа другим пользователям.

GRANT CREATE DATABASE,
CREATE TABLE TO emily, sarah GO
GRANT SELECT, INSERT, UPDATE, DELETE ON titles
TO editors
WITH GRANT OPTION
GO

В следующем примере права доступа предоставляются пользователю базы данных с именем sam и пользователю Windows с именем Jacob.

GRANT CREATE TABLE TO sam, [corporatejacob] GO

В следующем примере показано, как предоставить допуски, используя дополнительное ключевое слово AS. В этом примере пользователь emily является владельцем таблицы salesdetail и предоставляет привилегии SELECT роли sales_manager. Пользователь kelly, которому присвоена роль salesjnanager, хочет предоставить права SELECT пользователю sam, но не может этого сделать, поскольку права были предоставлены роли sales_manager, а не этому пользователю персонально. Чтобы обойти эту проблему, пользователь kelly может использовать предложение AS.

Исходное присвоение привилегий.

GRANT SELECT ON sales_detail TO salesjnanager
WITH GRANT OPTION
GO

Kelly передает привилегию пользователю Sam в качестве пользователя, которому присвоена роль sale_manager GRANT SELECT ON sales_detail TO sam AS sales_manager GO

Источник