|
Программирование >> Программирование баз данных
прет на использование этих прав, установленный с помощью оператора DENY, в любом случае выполняется требование, регламентируемое оператором DENY. Иными словами, если на рассматриваемое право распространяется действие оператора DENY, то даже при наличии у пользователя какой-либо роли, к которой он принадлежит, или соответствующего права он не имеет возможности реализовывать свои права доступа к соответствующему объекту. Синтаксис оператора DENY во многом напоминает синтаксис оператора GRANT: DENY ALL [PRIVILEGES]<permission>[,...n] ON <table or view name>[(column[,...n])] <stored or extended stored procedure name> TO <login ID or roll name>[,...n] [CASCADE] И в этом случае ключевое слово ALL указывает, что должно быть запрещено использование всех прав, применимых к объекту данного типа (еще раз отметим, что право EXECUTE не распространяется на таблицы). Если же ключевое слово ALL не задано, то необходимо указать одно или несколько конкретных прав, применение которых для определенного объекта должно быть запрещено. Ключевое слово PRIVILEGES введено в последней версии и не имеет какого-либо реального назначения, кроме обеспечения совместимости со стандартом ANSI-92. Ключевое слово ON служит меткой-заполнителем и указывает на то, что за ним следует объект, для которого должно быть запрещено использование прав доступа. Все остальные параметры в основном аналогичны применяемым в операторе GRANT. Юхючевое слово CASCADE является обратным по отношению к опции WITH GRANT OPTION, которая может быть задана в операторе GRANT. С помощью ключевого слова CASCADE можно передать СУБД SQL Server указание на то, что доступ должен быть запрещен также всем пользователям, которым данный пользователь предоставил доступ в силу того, что получил такую возможность с помощью опции WITH GRAJSTT OPTION. В качестве примера использования оператора DENY рассмотрим, как выполняется простой оператор SELECT с использованием учетной записи TestAccount: USE NorthwindSecure SELECT * FROM Employees В результате выполнения этого оператора SELECT должно быть получено примерно девять строк. Но возникает вопрос, на основании чего был получен доступ, если такое право не было предоставлено учетной записи TestAccount. Учетная запись TestAccount принадлежит к роли Public, а роли Public предоставлен доступ к таблице Emp 1 оуе е s. Теперь предположим, что учетная запись TestAccount не должна иметь такие права доступа. На остальных пользователей это не должно распространяться, но по какой-то причине пользователь с учетной записью TestAccount составляет исключение, поэтому не должен просматривать соответствующие данные; для этого достаточно выполнить оператор DENY (напомним, что для выполнения оператора DENY необходимо перейти в учетную запись sa): USE NorthwindSecure DENY ALL ON Employees TO [ARISTOTLE\TestAccount] После повторного вызова на выполнение оператора SELECT с применением учетной записи TestAccoiint будет получено сообщение об ошибке, поскольку пользователь с этой учетной записью больше не имеет прав доступа. К тому же следует отметить, что в связи с применением ключевого слова ALL все права доступа INSERT, DELETE и UPDATE, которые предоставлены роли Public, после этого также будут запрещены для использования в учетной записи TestAccount. Оператор DENY впервые появился в версии SQL Server 7.0. Возможность запрещения использования прав доступа была предусмотрена и в версии 6.5, но реализована иначе. При этом вместо оператора DENY приходилось дважды вызывать на вьшолнение оператор REVOKE. Благодаря вводу в действие нового оператора DENY задача запрещения использования прав доступа значительно упростилась. Команда revoke Команда REVOKE позволяет отменить действие выполненного ранее оператора GRANT или DENY. В этом смысле команду REVOKE можно рассматривать как целенаправленный оператор отмены ранее выполненного действия, Undo . В синтаксисе оператора REVOKE совместно используются некоторые параметры операторов GRANT и DENY: REVOKE [GRANT OPTION FOR] ALL [PRIVILEGES] <permission>[,...n] ON <table or view name>[(column name [,...n])] <stored or extended stored procedure name> TO I FROM <login ID or roll name>[,...n] [CASCADE] [AS <role name>] Описание параметров оператора REVOKE почти идентично таковому для операторов GRANT и DENY, но автор привел его снова, поскольку читателю может потребоваться освежить в памяти назначение параметров этого оператора. И в этом случае ключевое слово ALL указывает на то, что должны быть отменены все права, применимые к объекту указанного типа. Если ключевое слово ALL не используется, то необходимо задать одно или несколько конкретных прав доступа, предоставляемых пользователю применительно к данному объекту. Ключевое слово PRIVILEGES и в данном случае не имеет какого-либо реального назначения, кроме обеспечения совместимости со стандартом ANSI-92. Ключевое слово ON служит меткой-заполнителем и указывает на то, что за ним следует объект, для которого следует отозвать предоставленные права доступа. Ключевое слово CASCADE является обратным по отношению к опции WITH GRANT OPTION, которая может бьггь задана в операторе GRANT. С помощью ключевого слова CASCADE можно передать СУБД SQL Server указание на то, что доступ должен быть запрещен также всем пользователям, которым данный пользователь предоставил доступ в силу того, что получил такую возможность с помощью опции WITH GRANT OPTION. Ключевое слово AS определяет только то, на основе какой роли должна быть выполнена эта команда. Рассмотрим на примере, как отменить права доступа к таблице Region базы данных NorthwindSecure с использованием соединения sa: REVOKE ALL ON Region FROM [ARISTOTLE\TestAccount] После выполнения этого оператора пользователь с учетной записью TestAccount утрачивает возможность вьшолнять оператор SELECT применрггельно к таблице Region. Оператор REVOKE позволяет таюке устранять последствия применения оператора DENY. В этом примере рассмотрим, как восстановить доступ к таблице Employees: USE NorthwindSecure REVOKE ALL ON Employees TO [ARISTOTLE\TestAccount] Итак, выше были описаны все команды, применяемые для управления доступом отдельного пользователя, а теперь перейдем к изучению способа, позволяюш;его значительно упростить управление правами путем объединения пользователей в группы. Права пользователей и разрешения на уровне операторов Разрешения, предоставляемые пользователям, не ограничиваются объектами базы данных; такие разрешения можно распространить на определенные операторы, которые непосредственно не связаны с какими-либо конкретными объектами. В программном обеспечении SQL Server предусмотрена возможность управлять правами доступа, регламентирующими возможность вызова на выполнение нескольких различных операторов, включая перечисленные ниже.
К этому моменту уже было приведено описание работы всех перечисленных выше операторов, кроме двух операторов резервного копирования, BACKUP DATABASE и BACKUP LOG, но назначение последних не требует особых пояснений, поэтому мы не будем на них останавливаться (дополнительная информация об этих операторах приведена в главе 24); следует лишь еще раз подчеркнуть, что все указанные операторы относятся к той категории, которая обеспечивает управление на уровне оператора. Способ, с помощью которого можно задать разрешения на использование операторов, не имеет какой-то особой специфики. После ознакомления с тем, как применяются операторы GRANT, REVOKE и DENY по отношению к объектам, мы уже имеем достаточную подготовку для изучения использования соответствующих команд применительно к разрешениям на уровне операторов. Синтаксис команд, позволяющих управлять правами доступа на уровне операторов, практически ничем не отличается от синтаксиса команд, с помощью которых определяются разрешения на уровне объектов, не считая того, что в первом случае синтаксис даже более простой (он не требует вводить такого большого количества параметров). Для вызова процедуры sp addlogin применяется следующий синтаксис: GRANT <ALL statement[,...п]> ТО <login ID>[,...n] Очевидно, что приведенное синтаксическое определение нельзя назвать слишком сложным. Для проведения краткой проверки вначале рассмотрим, имеет ли пользо-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |