СУБД INFORMIX Администрирование и безопасность
Рефераты >> Программирование и компьютеры >> СУБД INFORMIX Администрирование и безопасность

Привилегии INDEX и ALTER

Привилегия INDEX позволяет создавать и изменять индексы в таблицах. Эта привилегия, так же, как и привилегии SELECT, INSERT, UPDATE, DELETE, становится общедоступной после создания таблицы. Можно предоставить привилегию INDEX всем пользователям, но смогут пользоваться ею только те пользователи, кто имеет привилегию RESOURCE уровня базы данных. Таким образом, хотя привилегия INDEX предоставляется автоматически (кроме ANSI-совместиых баз данных), пользователи, обладающие только привилегией уровня базы данных CONNECT не смогут воспользоваться привилегией INDEX. Это имеет смысл, когда индексные файлы занимают много места на диске.

Привилегия ALTER позволяет пользователю использовать оператор ALTER TABLE, включая возможность добавлять и удалять столбцы и т.д. Следует предоставлять данную привилегия только тем пользователям, которые хорошо понимают модель базы данных и достаточно квалифицированы, чтобы использовать эту привилегию очень аккуратно.

Привилегии уровня столбца

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

Например:

CREATE TABLE emp_data

(

emp_num integer,

emp_name char(20),

hired date,

id-code char (10),

salary decimal(4,2)

)

Поскольку таблица содержит конфиденциальные данные, то сразу после ее создания следует выполнить оператор REVOKE, который запрещает доступ к данным:

REVOKE ALL ON emp_data FROM PUBLIC

Для отдельных сотрудников отдела кадров и менеджеров выполняется оператор типа:

GRANT SELECT ON emp_data TO andrew_p, michael_d

Таким образом, некоторым пользователям позволено видеть все столбцы.

В общих чертах синтаксическая запись правил безопасности доступа к данным выглядит следующим образом:

GRANT список_привилегий_через_запятую [(список_атрибутов через_запятую)]

ON выражение TO список_пользователей_через_запятую

Для менеджеров, которые должны вводить некоторые сведения о служащих, необходимо выполнить оператор типа:

GRANT SELECT, UPDATE, INSERT, DELETE (salary, hired) ON emp_data TO alex_v, nataly_d

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

GRANT SELECT, UPDATE, INSERT, DELETE (emp_num,emp_name,id-code) ON emp_data TO nataly_d

Привилегии в системном каталоге

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

Привилегии базы данных регистрируется в таблице sysusers, в который первичным ключом является идентификатор пользователя, а в другом столбце находится символ C (CONNECT), R (RESOURCE) или D (DBA), обозначающий уровень привилегий. Общедоступные привилегии отображены под именем пользователя public (в нижнем регистре).

Привилегии уровня таблицы находятся в таблице systabauth, в которой используется составной первичный ключ, включающий номер таблицы, идентификатор пользователя, предоставившего привилегии на таблицу и идентификатор пользователя, получившего их. В столбце tabauth привилегии закодированы в виде шестибуквенного списка следующим образом (дефис обозначает не предоставленную привилегию):

s – SELECT

u – UPDATE

- – * привилегия на столбцы

i – INSERT

d – DELETE

x – INDEX

a – ALTER

r – REFERENCES (обращение к заданной таблице в ограничениях целостности)

Таким образом, полный комплект привилегий выглядит как su-idxar.

Например, набор -u------ говорит, что пользователь обладает только привилегией UPDATE.

Если в третьей позиции присутствует звездочка, то это означает, что для данной таблицы и пользователя существуют еще какие-то привилегии уровня столбца. Конкретные привилегии регистрируются в таблице syscolauth. Ее первичный ключ составлен из номера таблицы, идентификатора пользователя, предоставившего привилегии, получившего привилегии, и номера столбца. Единственный атрибут – двухбуквенный список, показывающий тип привилегии: s-, -u или su.

Привилегии и представления

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

Привилегии при создании представления

При создании представления ядро БД проверяет наличие у пользователя всех привилегий, необходимых для выполнения оператора SELECT в определении представления. Если таких привилегий нет, представление не создается. Эта проверка не позволяет пользователю получить несанкционированный доступ к таблице путем создания представления для нее и обращения к представлению. После создания представления ядро БД предоставляет его создателю и владельцу, как минимум, привилегию SELECT для этого представления. Оно не становится автоматически общедоступным, как это происходит с таблицей. Ядро БД определяет определение представления и выясняет, является ли оно обновляемым. Если да, то создатель представления получает привилегии INSERT, DELETE и UPDATE для этого представления при наличии этих привилегий на порождающей таблице или представлении. Иными словами, если создаваемое представление является обновляемым, то ядро БД копирует привилегии INSERT, DELETE и UPDATE создателя представления и предоставляет их ему на новом представлении. Если для порождающей таблицы создатель представления располагает только привилегией INSERT, то он получит на представление только эту привилегию и т.д. Эта проверка не позволяет пользователям получить какие-либо привилегии кроме тех, которые у него уже есть.

Поскольку для представления нельзя выполнять операторы ALTER TABLE и CREATE INDEX, привилегии ALTER и INDEX никогда не распространяются на представления.

Привилегии при использовании представления

При попытке использовать представление, ядро БД проверяет лишь те привилегии, которые относятся лишь к самому представлению. Оно не проверяет права на доступ к определяющим его таблицам. Привилегии создателя представления уже отмечались ранее. Для других пользователей привилегии определяются создателем или тем, у кого есть привилегия WITH GRANT OPTION. Это означает, что можно создать таблицу и отменить ее общедоступность. Затем можно предоставить ограниченные привилегии на доступ к таблице через представления.

Ниже приводится синтаксис оператора GRANT:

GRANT список_привилегий_через_запятую ON объект

TO список_пользователей_через_запятую [WITH GRANT OPTION]

Директива WITH GRANT OPTION наделяет указанных пользователей особыми полномочиями – правом предоставления полномочий другим пользователям. Это означает, что для работы с данным объектом они могут наделять полномочиями других пользователей.


Страница: