Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 22. Оllределение прав дocmylla к данным

Эта глава знакомит вас с привилегиями. Как упоминалось в главе 2, SQL при­

меняется главным образом для тех приложений, где требуется распознавать и диф­ ференцировать пользователей системы. В обязанности администрирования базы данных входит создание других пользователей и назначение им привилегий. С дру­ гой стороны, пользователи, создающие таблицы, управляют ими. Привилегии (privileges) - это определения того, может или нет отдельный пользователь выпол­ нить данную команду. Существует несколько типов привилегий, соответствующих определенным типам операций. Привилегии назначаются и отменяются с использо­ ванием двух SQL команд - GRANT и REVOKE, о применении которых рассказыва­ ется в этой главе.

Пользователи

Каждый пользователь в среде SQL имеет специальный идентификатор: имя или число. Специальная терминология различается, но, следуя ANSI, необходимо ссы­ латься на это имя или число как на идентификатор пользователя (authorization ID). Ко­ манды, задаваемые для базы данных, связаны с отдельным пользователем, т.е. с особым идентификатором пользователя. В базах данных SQL идентификатор пользо­ вателя - это имя пользователя, и SQL может применять специальное ключевое слово USER для ссылки на ID, связанный с текущей командой. Команды интерпретируются и разрешаются (или запрещаются) на основе информации, связанной с ID выдавшего

команду.

Вход в систему

В мноrопользовательских системах есть процедура входа, в соответствии с кото­

рой осуществляется доступ к компьютерной системе. Эта процедура определяет, ка­ кой ID связан с текущим пользователем. Каждый человек, применяющий базу данных, имеет свой собственный ID, так что пользователи, представленные в SQL, соответст­ вуют реальным. Часто пользователям с множеством функций назначается множество ID, либо один идентификатор может применяться несколькими пользователями. У SQL нет способа различить эти ситуации: он просто связывает пользователя с его ID.

База данных SQL может использовать собственную процедуру входа в систему, либо она может разрешить применение другой программы, такой как операционная система (основная программа, которая выполняется на компьютере), для управления входом и получения идентификатора пользователя от этой программы. Независимо от способа входа в систему существует ID, связанный с конкретными действиями и сов­ падающий со значением ключевого слова USER.

236

Передача 1tривилегий

Передача привилегий

Каждый пользователь в базе данных SQL имеет множество привилегий. Привиле­ гии - это те действия, которые может выполнять пользователь (вход в систему - ми­ нимальная привилегия). Привилегии могут меняться с течением времени: новые привилегии могут добавляться, старые - отменяться. Некоторые из привилегий опре­ делены в ANSI SQL, но имеются и дополнительные, весьма полезные на практике. Привилегии SQL, определенные ANSI, являются недостаточными для множества ре­ альных ситуаций. С другой стороны, необходимые типы привилегий могут сущест­

венно отличаться от тех, которые предоставляет реальная система, - ANSI

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

Стандартные привилегии

Привилегии SQL, определенные ANSI, являются объектными привилегию1и (object privileges). Это означает, что пользователь имеет привилегию выполнить дан­ ную команду только для определенного объекта базы данных. Привилегии должны различаться для различных объектов, но системные привилегии, базирующиеся ис­ ключительно на объектных привилегиях, не могут покрыть всех потребностей SQL.

Объектные привилегии связаны как с пользователями, так и с таблицами. Привиле­ гия дается отдельному пользователю для отдельной таблицы либо для базовой табли­ цы, либо для представления. Следует помнить, что пользователь, создавший таблицу, является ее владельцем. Это означает, что пользователь имеет все привилегии на таб­ лицу и может назначать привилегии для работы с ней для других пользователей. При­

ведем те привилегии, которые может назначить пользователь:

SELECT

Пользователь с этой привилегией может выполнять запросы для

 

таблицы.

INSERT

Пользователь с этой привилегией может выполнить команду

 

INSERT для таблицы.

UPDATE

Пользователь с этой привилегией может выполнить команду

 

UPDATE для таблицы. Привилегия ограничивается множеством

 

столбцов таблицы.

DELETE

Пользователь с этой привилегией может выполнить команду

 

DELETE для таблицы.

REFERENCES

Пользователь с этой привилегией может определить внешний

 

ключ, который использует один или несколько столбцов таблицы

237

Глава 22. Определение прав дocmylla к данным

в качестве родительского ключа. Можно ограничить привилегию указанием столбцов. (См. главу 19 для уточнения деталей по по­ воду внешнего и родительского ключей.)

Кроме того, можно ввести нестандартные привилегии объектов, такие как INDEX (право на создание индексов таблицы), SYNONYM (право на создание синонимов объектов, см. главу 23) и ALTER (право на выполнение команды для таблицы ALTER TABLE). Механизм SQL позволяет выполнить назначение пользователям этих приви­ легий с помощью команды GRANТ.

Команда GRANT

Предположим, пользователь Diane является владельцем таблицы Customers и нуж­ но передать пользователю Adrian право на формулирование запросов к этой таблице. Для этого пользователь Diane должен ввести следующую команду:

GRANT SELECT ON Customers ТО Adrian;

Теперь Adrian может выполнять запросы по таблице Customers. Без других привиле­ гий он имеет право выполнять только выборку, а не какие-либо действия, влияющие на значения элементов таблицы Customers (включая использование Customers в качестве родительской таблицы внешнего ключа, ограничивающего изменения, которые могут быть сделаны для значений таблицы Customers).

Когда SQL выполняет команду GRANТ, он выбирает привилегии пользователя, да­ вая ему возможность определить GRANT как допустимую команду. Сам пользователь Adrian не может задать выполнение этой команды, а также передать право выполнения SELECT другому пользователю: владельцем таблицы остается Dian (хотя было пока­ зано, как Dian может передать права на выполнение команды SELECT пользователю

Adrian).

Для передачи прав на другие привилегии синтаксис тот же самый. Если Adrian яв­ ляется владельцем таблицы Sa\espeople, то он может разрешить Dian вводить в нее

строки; для этого следует указать команду:

GRANT INSERT ON Salespeople ТО Diane;

Теперь Diane может вносить в таблицу сведения о новых продавцах.

Группы привилегий, группы пользователей. Передача привилегий не огра­ ничивается передачей единственной привилегии единственному пользователю с по­ мощью одной команды GRANT. Списки привилегий или пользователей с элементами, разделенными запятыми, допустимы. Например, Stephen может пере­ дать права на выполнение команд SELECT и INSERT для таблицы Orders пользова­

телю Adrian:

GRANT SELECT, INSERT ON Orders ТО Adrian;

либо пользователям Adrian и Diane:

GRANT SELECT, INSERT ON Orders ТО Adrian, Diane;

238

Передача привилегий

При перечислении привилегий и пользователей все указанные в списке привилегии передаются всем перечисленным пользователям. В соответствии с интерпретацией ANSI, нельзя передать привилегии для множества таблиц в одной команде, но некото­ рые программные продукты разрешают использование нескольких имен таблиц, разде­ ленных запятыми, таким образом, что все перечисленные пользователи получают все перечисленные привилегии для всех указанных в списке таблиц.

Ограничение привилегий для множества столбцов. Все объектные привиле­ гии используют один и тот же синтаксис, за исключением команд UPDAТЕ и

REFERENCES, в которых, в случае необходимости, можно указывать имена столб­

цов. Привилегию выполнения команды UPDATE можно передать как и все осталь­

ные привилегии:

GRANT UPDATE ON Salespeople ТО Diane;

Команда разрешает пользователю Diane изменять значения любого или всех столб­

цов таблицы Salespeople. Однако, если Adrian желает ограничить Diane возможностью

изменять только значения комиссионных (значения столбца comm), то он должен вме­ сто предыдущей команды указать:

GRANT UPDATE (comm) ON Salespeople ТО Diane;

То есть пользователь просто должен указать после имени таб.1ицы в круглых скоб­ ках имя столбца, на который распространяется привилегия UPDATE. Множество имен столбцов ;аблицы можно указать в любом порядке через запятую:

GRANT UPDATE (city, comm) ON Salespeople ТО Diane;

REFERENCES задается в соответствии с теми же правилами. Когда привилегии REFERENCES передаются другому пользователю, он может создать внешние ключи,

которые ссылаются на столбцы вашей таблицы как на родительские ключи. Подобно

UPDATE, привилегия REFERENCES может содержать список из одного или более столбцов для каждой привилегии. Например, Diane может передать Stephen право ис­ пользования таблицы Customers в качестве родительского ключа с помощью следую­

щей команды:

GRANT REFERENCES (cname, cnum) ON Customers ТО Stephen;

Команда дает Stephen право использовать столбцы cnum и cname в качестве роди­ тельских ключей для любых внешних ключей в этих таблицах. Stephen получает воз­ можность управления по собственному усмотрению. В одной из его собственных таблиц он может определить (cname, cnum) или, например, (cnum, cname) как роди­ тельский ключ, определенный на двух столбцах и соответствующий внешнему, опре­ деленному на двух столбцах. Или он может создать отдельные внешние ключи для ссылки на поля индивидуально, при условии, что Diane имеет подходящим образом разработанные родительские ключи (см. главу 19). Здесь нет ограничений на число внешних ключей, которые могут базироваться на родительских ключах, и на число ро­ дительских ключей для разрешенного множества внешних ключей.

Что касается привилегии UPDATE, то можно опустить список столбцов и, следова­ тельно, разрешить использование всех столбцов в качестве родительских ключей. Adrian может передать Diane права делать это следующим образом:

239

Глава 22. Определение прав доступа к данным

GRANT REFERENCES ON Salespeople ТО Diane;

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

Использование аргументов ALL и PUBLIC

SQL поддерживает два аргумента для команды GRANT, которые имеют специ­ альное назначение: ALL PRIVILEGES (или просто ALL) и PUBLIC. ALL использу­ ется вместо имен привилегий в команде GRANT для передачи всех привилегий для таблицы. Например, пользователь Diane может передать пользователю Stephen множество привилегий для таблицы Customers с помощью команды:

GRANT ALL PRIVILEGES ON Customers ТО Stephen;

(Привилегии для команд UPDATE и REFERENCES относятся ко всем столбцам.) Альтернативным способом сказать то же самое является команда:

GRANT ALL ON Customers ТО Stephen;

PUBLIC - своего рода обобщающий аргумент, но он относится к пользователям, а не к привилегиям. Когда передаются привилегии с атрибутом "общедоступный" (PUBLIC), все пользователи получают их автоматически. Чаще это применяется для привилегии SELECT для определенных базовых таблиц или представлений, которые нужно предоставить каждому пользователю для рассмотрения. Разрешить каждому пользователю просматривать таблицу Orders можно, например, вводом следующей ко­

манды:

GRANT SELECT ON Orders ТО PUBLIC;

Можно передавать любую привилегию или все привилегии в общее пользование, но делать это нежелательно. Все привилегии, за исключением SELECT, разрешают пользователю изменять (или, в случае REFERENCES, ограничивать) содержимое таб­ лицы. Разрешение всем пользователям изменять содержимое таблиц влечет за собой множество проблем. Даже в небольшой компании предпочтительнее передача приви­ легий каждому пользователю индивидуально, а не всем сразу. При применении ключе­ вого слова PUBLIC речь идет не только обо всех существующих пользователях. Любой новый пользователь, подключаемый к системе, автоматически получает все привилегии, назначенные с применением ключевого слова PUBLIC. Поэтому для ог­ раничения доступа к таблице в любое время - либо только сейчас, либо в будущем - лучше передать привилегии пользователям, применяя метод, отличный от SELECT.

Передача привилегий с использованием GRANT OPTION

Иногда создатель таблицы хочет, чтобы другие пользователи имели право переда­ вать привилегии на эту таблицу. Это реально для систем, в которых один или не­ сколько человек могут создать большинство или все базовые таблицы базы данных,

240

Источник: https://studfile.net/preview/16418473/