|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Политика безопасности баз данныхПолитика безопасности баз данных53 Аннотация Целью данного курсового проекта является закрепление, систематизация, углубление и развитие теоретических и практических знаний, полученных студентами в процессе изучения дисциплины "Надёжность и безопасность программного обеспечения". Курсовая работа посвященна проблемам политики безопастности баз данных, гарантированности и средств подотчётности. Основная цель курсового проектирования состоит в изучении и анализе вопросов, связанных со специальными аспектами надёжности и безопасности программного обеспечения. Содержание
Create table “Prohibitions” (“Порядковый номер запрета" integer, “Название филиала", char (50)“Номер операции перевода платежей для даного филиала" integer, “Код запрета" integer, “Сообщение о причине отказа” char (100)); Таблица 2. Control_objects. Справочник с информацией про обьекты контроля.
Create table “Control_objects" (“ Сумма платежа ” double, "Сумма остатка на счету ” double, "Сумма оборота на счету ” double); Таблица 2. Control_time. Справочник с информацией о времени действия контроля.
Create table “Control_time” ( “ Постоянный ” Boolean, “ Ежемесячный ” Boolean, “ Временный ” Boolean ); 2. Управление ролямиВ версиях СУБД PostgreSQL меньших 8.1 при управлении субъектами использовались понятия "пользователь" и "группа" и соответствующие команды создания CREATE USER, CREATE GROUP. Для изменения параметров пользователя или группы ипользовались команды ALER USER и ALTER GROUP, соответственно. В версиях СУБД PostgreSQL начиная с 8.1 появился более гибкий механизм - роли.2.1 Регистрация субъектов безопасностиИнформационная система банка.Групповые субъекты: клиенты, операционисты, директор филиала, работники филиала.Индивидуальные субъекты: клиент "ABC", клиент “IBM”, клиент Иванов А.А., клиент Петров П.П., клиент Сидоров В. Г, операционист Джавров В.Г., операционист Салмин Ю.Л., операционист Киричук А.Г., директор Корниенко В.А., работник Манько А.А., работник Яновский Г.Х.2.1.1 Регистрация субъектовРегистрация индивидуальных субъектов:Alter Role ABC login;Alter Role IBM login;Alter Role Ivanov login;Alter Role Petrov login;Alter Role Sidorov login;Alter Role Djavr login;Alter Role Salmin login;Alter Role Kirich login;Alter Role Kornienko login;Alter Role Manko login;Alter Role Yanovskiy login;Регистрация групповых субъектов:Alter Role Klient nologin;Alter Role Director_Filii nologin;Alter Role Worker_Filii nologin;Alter Role Oper nologin;2.1.2 Наследование ролейГруппировка индивидуальных субъектов безопасности.Grant Klient To ABC;Grant Klient To IBM;Grant Klient To Ivanov;Grant Klient To Petrov;Grant Klient To Sidorov;Grant Director_Filii To Kornienko;Grant Oper To Djavr;Grant Oper To Salmin;Grant Oper To Kirich;Grant Worker_Filii To Manko;Grant Worker_Filii To Yanovskiy;2.2 Избирательное управление доступомМеханизм представлений языка SQL позволяет различными способами разделить базу данных на части таким образом, чтобы очень важная информация была скрыта от несанкционированных пользователей.2.2.1 Описание привилегий доступа для клиентовCreate Table Klients(Klient_ID, - -идентификатор клиентаName_Klient, - -имя клиентаData_BD - -дата рождения клиента) Without oids;Alter table Klients owner to Klient;Comment on table Klient IS 'Информация о клиентахComment on column Klient. Klient_ID IS `Идентификатор клиентаComment on column Klient. Name IS `Имя клиентаComment on column Klient. Data_BD IS `Дата рождения клиентаДля установки привиллегий доступа используется команда:GRANT список_привиллегий ON таблица TO рольGrant select, insert ON Klients TO Klient2.2.2 Описание привилегий доступа для директоровCreate Table Dirs(Dir_ID, - -идентификаторName_Dir, - -имяData_BD - -дата рождения) Without oids;Alter table Dirs owner to Director_Filii;Comment on table Dirs IS 'Информация о директорахComment on column Dirs. Dir_ID IS `ИдентификаторComment on column Dirs. Name_Dir IS `ИмяComment on column Dirs. Data_BD IS `Дата рожденияДля установки привиллегий доступа используется команда:GRANT список_привиллегий ON таблица TO рольGrant select, insert, update, delete ON Dirs TO Director_Filii2.2.3 Описание привилегий доступа для операционистовCreate Table Opers(Oper_ID, - -идентификаторName_Oper, - -имяData_BD - -дата рождения) Without oids;Alter table Opers owner to Oper;Comment on table Opers IS 'Информация о операционистахComment on column Opers. Oper_ID IS `ИдентификаторComment on column Opers. Name_Oper IS `ИмяComment on column Opers. Data_BD IS `Дата рожденияДля установки привиллегий доступа используется команда:GRANT список_привиллегий ON таблица TO рольGrant select, insert, update, ON Opers TO Oper2.2.4 Описание привилегий доступа для работников филиалаCreate Table Workers(Worker_ID, - -идентификаторName_Worker, - -имяData_BD - -дата рождения) Without oids;Alter table Workers owner to Worker_Filii;Comment on table Workers IS 'Информация о работниках филииComment on column Workers. Worker_ID IS `ИдентификаторComment on column Workers. Name_Worker IS `ИмяComment on column Workers. Data_BD IS `Дата рожденияДля установки привиллегий доступа используется команда:GRANT список_привиллегий ON таблица TO рольGrant select ON Workers TO Worker_Filii2.3 Создание представления субъекта об объектеВ действующем стандарте языка SQL предусматривается поддержка только избирательного управления доступом. Она основана на двух более или менее независимых частях SQL. Одна из них называется механизмом представлений, который может быть использован для скрытия очень важных данных от несанкционированных пользователей. Другая называется подсистемой полномочий и наделяет одних пользователей правом избирательно и динамично задавать различные полномочия другим пользователям, а также отбирать такие полномочия в случае необходимости.2.3.1 Создание схемы для директоровCREATE SCHEMA DIRECTOR;`Для включения пользователя в схему используется команда:ALTER SCHEMA DIRECTOR OWNER TO KORNIENKO;`выполнении запросов к схеме:SELECT FROM DIRECTOR. KORNIENKO;`установления порядка доступа к схемeSET SEARCH_PATH TO public;SET SEARCH_PATH TO director, public;2.3.2 Создание схемы для клиентовCREATE SCHEMA KLIENT;`Для включения пользователя в схему используется команда:ALTER SCHEMA KLIENT OWNER TO ABC;ALTER SCHEMA KLIENT OWNER TO IBM;ALTER SCHEMA KLIENT OWNER TO IVANOV;ALTER SCHEMA KLIENT OWNER TO PETROV;ALTER SCHEMA KLIENT OWNER TO SIDOROV;`выполнении запросов к схеме:SELECT FROM KLIENT. ABC;SELECT FROM KLIENT. IBM;SELECT FROM KLIENT. IVANOV;SELECT FROM KLIENT. PETROV;SELECT FROM KLIENT. SIDOROV;`установления порядка доступа к схемeSET SEARCH_PATH TO public;SET SEARCH_PATH TO klient, public;2.3.3 Создание схемы для операционистовCREATE SCHEMA OPER;`Для включения пользователя в схему используется команда:ALTER SCHEMA OPER OWNER TO SALMIN;ALTER SCHEMA OPER OWNER TO DJAVR;ALTER SCHEMA OPER OWNER TO KIRICH;`выполнении запросов к схеме:SELECT FROM OPER. SALMIN;SELECT FROM OPER. DJAVR;SELECT FROM OPER. KIRICH;`установления порядка доступа к схемeSET SEARCH_PATH TO public;SET SEARCH_PATH TO oper, public;2.3.4 Создание схемы для работников филиалаCREATE SCHEMA WORKER;`Для включения пользователя в схему используется команда:ALTER SCHEMA WORKER OWNER TO MANKO;ALTER SCHEMA WORKER OWNER TOYANOVSKIY;`выполнении запросов к схеме:SELECT FROM WORKER. MANKO;SELECT FROM WORKER. YANOVSKIY;`установления порядка доступа к схемeSET SEARCH_PATH TO public;SET SEARCH_PATH TO worker, public;3. Реализация требований стандарта по критерию "Политика безопасности"Политика безопасности - набор законов, правил и норм поведения, определяющих, как организация обрабатывает, защищает и распространяет информацию.Политика безопасности должна включать в себя по крайней мере следующие элементы: произвольное управление доступом, безопасность повторного использования объектов, метки безопасности, принудительное управление доступом.С точки зрения работы СУБД рассмотрим три элемента:произвольное управление доступом;метки безопасности;принудительное управление доступом.Описание концепции использования меток безопасностиПолномочное (принудительное) управление доступом в промышленных СУБД не реализовано на уровне ядра управления. Но в СУБД присутствуют программные средства для программирования такого управления.Для реализации полномочного управления доступом с субъектами и объектами ассоциируются метки безопасности. Метка субъекта описывает его благонадежность, метка объекта - степень закрытости содержащейся в нем информации.Метки безопасности состоят из двух частей - уровня секретности и списка категорий. Уровни секретности, поддерживаемые системой, образуют упорядоченное множество, которое может выглядеть, например, так: совершенно секретно, секретно, конфиденциально, несекретно.Категории образуют неупорядоченный набор. Их назначение - описать предметную область, к которой относятся данные. В военном окружении каждая категория может соответствовать, например, определенному виду вооружений.Главная проблема, которую необходимо решать в связи с метками, это обеспечение их целостности:не должно быть непомеченных субъектов и объектов, иначе в меточной безопасности появятся легко используемые бреши;при любых операциях с данными метки должны оставаться правильными.Управление метками безопасности в СУБДДля реализации полномочного управления доступом необходимо разрабатыватьдополнительный механизм, включающий:дополнительные структуры данных, хранящие значение меток конфиденциальности обьектов БД (записей таблиц или их отдельных атрибутов);дополнительные структуры данных, хранящие значение уровней доступа субьектов БД (пользователей или их групп);В СУБД PostgreSQL вышеописанные пункты механизма можно создать через:добавление поля таблицы, содержащего значения метки конфиденциальностисоздание таблицы уровней доступа с двумя полями: имя группы или пользователя, уровень доступа.3.1 Создания механизма по управлению метками в СУБД3.1.1 Таблица с информацией о клиентахCREATE SEQUENCE KLIENTS_ID;CREATE TABLE KLIENTS (KLIENTS_ID INTEGER NOT NULL PRIMARY KEY DEFAULT NEXTVAL ('KLIENTS_ID'),NAME VARCHAR (30),SEX CHAR (1),BIRTHDAY DATE,CONSTRAINT VALID_SEX CHECK (SEX IN ('Ж','М','ФИРМА')));COMMENT ON TABLE PERSONS IS'ТАБЛИЦА ИНФОРМАЦИИ О КЛИЕНТАХ;Для создания механизма управления метками при доступе пользователей и групп пользователей к таблице persons выполним следующую последовательность шагов.Шаг 1. Создать справочник уровней доступа с помощью команды, пример которой представлен ниже.CREATE TABLE ACCESS_LEVELS (ACCESS_LEVEL_ID INTEGER PRIMARY KEY,ACCESS_LEVELVARCHAR UNIQUE) ;INSERT INTO ACCESS_LEVELS VALUES (1,'для общего доступа');INSERT INTO ACCESS_LEVELS VALUES (2,'для внутреннего использования');INSERT INTO ACCESS_LEVELS VALUES (3,'секретно');INSERT INTO ACCESS_LEVELS VALUES (4,'совершенно секретно');Шаг 2. Создать таблицу, содержащую матрицу уровней доступа групп пользователей, пример которой представлен ниже.DROP TABLE GROUPS_ACCESS_LEVEL;CREATE TABLE GROUPS_ACCESS_LEVEL (GROUP_NAME VARCHAR PRIMARY KEY,ACCESS_LEVEL INTEGER REFERENCESACCESS_LEVELS (ACCESS_LEVEL_ID));Шаг 3. Разграничить права на таблицу groups_access_level:REVOKE ALL ON GROUPS_ACCESS_LEVEL FROM GROUP USERS;GRANT SELECT ON GROUPS_ACCESS_LEVEL TO GROUP USERS;Шаг 4. Присвоить группе users необходимый уровень доступаINSERT INTO GROUPS_ACCESS_LEVEL VALUES ('users',2);Шаг 5. Добавить в таблицу БД Klients поле с описанием меток конфиденциальности записей spot_conf:ALTER TABLE KLIENTS ADD COLUMN SPOT_CONF INTEGER DEFAULT 1REFERENCES ACCESS_LEVELS (ACCESS_LEVEL_ID);3.1.2 Таблица с информацией о директорахCREATE SEQUENCE DIRS_ID;CREATE TABLE DIRS (DIRS_ID INTEGER NOT NULL PRIMARY KEY DEFAULT NEXTVAL ('KLIENTS_ID'),NAME VARCHAR (30),SEX CHAR (1),BIRTHDAY DATE,CONSTRAINT VALID_SEX CHECK (SEX IN ('Ж','М ')));COMMENT ON TABLE PERSONS IS'ТАБЛИЦА ИНФОРМАЦИИ О ДИРЕКТОРАХ;Для создания механизма управления метками при доступе пользователей и групп пользователей к таблице persons выполним следующую последовательность шагов.Шаг 1. Создать справочник уровней доступа с помощью команды, пример которой представлен ниже.CREATE TABLE ACCESS_LEVELS (ACCESS_LEVEL_ID INTEGER PRIMARY KEY,ACCESS_LEVELVARCHAR UNIQUE) ;INSERT INTO ACCESS_LEVELS VALUES (1,'для общего доступа');INSERT INTO ACCESS_LEVELS VALUES (2,'для внутреннего использования');INSERT INTO ACCESS_LEVELS VALUES (3,'секретно');INSERT INTO ACCESS_LEVELS VALUES (4,'совершенно секретно');Шаг 2. Создать таблицу, содержащую матрицу уровней доступа групп пользователей, пример которой представлен ниже.DROP TABLE GROUPS_ACCESS_LEVEL;CREATE TABLE GROUPS_ACCESS_LEVEL (GROUP_NAME VARCHAR PRIMARY KEY,ACCESS_LEVEL INTEGER REFERENCESACCESS_LEVELS (ACCESS_LEVEL_ID));Шаг 3. Разграничить права на таблицу groups_access_level:REVOKE ALL ON GROUPS_ACCESS_LEVEL FROM GROUP USERS;GRANT SELECT ON GROUPS_ACCESS_LEVEL TO GROUP USERS;Шаг 4. Присвоить группе users необходимый уровень доступаINSERT INTO GROUPS_ACCESS_LEVEL VALUES ('users',2);Шаг 5. Добавить в таблицу БД Klients поле с описанием меток конфиденциальности записей spot_conf:ALTER TABLE DIRS ADD COLUMN SPOT_CONF INTEGER DEFAULT 1REFERENCES ACCESS_LEVELS (ACCESS_LEVEL_ID);3.1.3 Таблица с информацией об операционистахCREATE SEQUENCE OPERS_ID;CREATE TABLE OPERS (OPERS_ID INTEGER NOT NULL PRIMARY KEY DEFAULT NEXTVAL ('KLIENTS_ID'),NAME VARCHAR (30),SEX CHAR (1),BIRTHDAY DATE,CONSTRAINT VALID_SEX CHECK (SEX IN ('Ж','М ')));COMMENT ON TABLE PERSONS IS'ТАБЛИЦА ИНФОРМАЦИИ ОБ ОПЕРАЦИОНИСТАХ;Для создания механизма управления метками при доступе пользователей и групп пользователей к таблице persons выполним следующую последовательность шагов.Шаг 1. Создать справочник уровней доступа с помощью команды, пример которой представлен ниже.CREATE TABLE ACCESS_LEVELS (ACCESS_LEVEL_ID INTEGER PRIMARY KEY,ACCESS_LEVELVARCHAR UNIQUE) ;INSERT INTO ACCESS_LEVELS VALUES (1,'для общего доступа');INSERT INTO ACCESS_LEVELS VALUES (2,'для внутреннего использования');INSERT INTO ACCESS_LEVELS VALUES (3,'секретно');INSERT INTO ACCESS_LEVELS VALUES (4,'совершенно секретно');Шаг 2. Создать таблицу, содержащую матрицу уровней доступа групп пользователей, пример которой представлен ниже.DROP TABLE GROUPS_ACCESS_LEVEL;CREATE TABLE GROUPS_ACCESS_LEVEL (GROUP_NAME VARCHAR PRIMARY KEY,ACCESS_LEVEL INTEGER REFERENCESACCESS_LEVELS (ACCESS_LEVEL_ID));Шаг 3. Разграничить права на таблицу groups_access_level:REVOKE ALL ON GROUPS_ACCESS_LEVEL FROM GROUP USERS;GRANT SELECT ON GROUPS_ACCESS_LEVEL TO GROUP USERS;Шаг 4. Присвоить группе users необходимый уровень доступаINSERT INTO GROUPS_ACCESS_LEVEL VALUES ('users',2);Шаг 5. Добавить в таблицу БД Klients поле с описанием меток конфиденциальности записей spot_conf:ALTER TABLE OPERS ADD COLUMN SPOT_CONF INTEGER DEFAULT 1REFERENCES ACCESS_LEVELS (ACCESS_LEVEL_ID);3.1.4 Таблица с информацией о работниках филиалаCREATE SEQUENCE WORKERS_ID;CREATE TABLE WORKERS (WORKERS_ID INTEGER NOT NULL PRIMARY KEY DEFAULT NEXTVAL ('KLIENTS_ID'),NAME VARCHAR (30),SEX CHAR (1),BIRTHDAY DATE,CONSTRAINT VALID_SEX CHECK (SEX IN ('Ж','М ')));COMMENT ON TABLE PERSONS IS'ТАБЛИЦА ИНФОРМАЦИИ О РАБОТНИКАХ ФИЛИАЛА;Для создания механизма управления метками при доступе пользователей и групп пользователей к таблице persons выполним следующую последовательность шагов.Шаг 1. Создать справочник уровней доступа с помощью команды, пример которой представлен ниже.CREATE TABLE ACCESS_LEVELS (ACCESS_LEVEL_ID INTEGER PRIMARY KEY,ACCESS_LEVELVARCHAR UNIQUE) ;INSERT INTO ACCESS_LEVELS VALUES (1,'для общего доступа');INSERT INTO ACCESS_LEVELS VALUES (2,'для внутреннего использования');INSERT INTO ACCESS_LEVELS VALUES (3,'секретно');INSERT INTO ACCESS_LEVELS VALUES (4,'совершенно секретно');Шаг 2. Создать таблицу, содержащую матрицу уровней доступа групп пользователей, пример которой представлен ниже.DROP TABLE GROUPS_ACCESS_LEVEL;CREATE TABLE GROUPS_ACCESS_LEVEL (GROUP_NAME VARCHAR PRIMARY KEY,ACCESS_LEVEL INTEGER REFERENCESACCESS_LEVELS (ACCESS_LEVEL_ID));Шаг 3. Разграничить права на таблицу groups_access_level:REVOKE ALL ON GROUPS_ACCESS_LEVEL FROM GROUP USERS;GRANT SELECT ON GROUPS_ACCESS_LEVEL TO GROUP USERS;Шаг 4. Присвоить группе users необходимый уровень доступаINSERT INTO GROUPS_ACCESS_LEVEL VALUES ('users',2);Шаг 5. Добавить в таблицу БД Klients поле с описанием меток конфиденциальности записей spot_conf:ALTER TABLE WORKERS ADD COLUMN SPOT_CONF INTEGER DEFAULT 1REFERENCES ACCESS_LEVELS (ACCESS_LEVEL_ID);3.2 Реализация принудительного управления доступом в СУБДПринудительное управление доступом основано на сопоставлении меток безопасности субъекта и объекта. Способ управления доступом называется принудительным, поскольку он не зависит от воли субъектов (даже системных администраторов). После того, как зафиксированы метки безопасности субъектов и объектов, оказываются зафиксированными и права доступа.Правила использования меток:субъект может читать информацию из объекта, если уровень секретности субъекта не ниже, чем у объекта, а все категории, перечисленные в метке безопасности объекта, присутствуют в метке субъекта;субъект может записывать информацию в объект, если метка безопасности объекта совпадает (или доминирует) с меткой субъекта.Реализация принудительного управления доступом в СУБДДля реализации полномочного управления доступом необходимо разрабатыватьдополнительный механизм, включающий:механизмы ограничения доступа по чтению субьектами данных таблиц с учетом имен правил управления доступом по чтению данных;механизмы ограничения доступа по модификации субьектами данных таблиц (внесение, изменение, удаление) с учетом имен правил управления доступом по модификации данных.В СУБД PostgreSQL вышеописанные пункты механизма можно создать через:создание виртуальной таблицы (view), учитывающей таблицу БД, таблицу уровней доступа и имя текущего пользователя, работающего с БД;создание правил (rules), перехватывающих операции внесения, изменения и удаления, выполняемых пользователями над таблиц БД3.2.1 Реализация принудительного управления доступом в таблице "КЛИЕНТЫ"Для реализации принудительного управления доступом к таблице KLIENTS со стороны пользователей и групп пользователей СУБД необходимо выполнить следующие шаги.Шаг 1. Создать виртуальную таблицу (view), учитывающую таблицу KLIENTS, таблицу уровней доступа, имя текущего пользователя, работающего с БД, позволяющую в дальнейшем разграничить доступ пользователей к отдельным записям таблицы KLIENTS.CREATE OR REPLACE VIEW KLIENTS_LIST ASSELECT PERSON_ID, NAME, SEX, BIRTHDAYFROM PG_GROUP G, PG_USER U, KLIENTS P,GROUPS_ACCESS_LEVEL LWHEREUSENAME = CURRENT_USER ANDU. USESYSID = ANY (G. GROLIST) ANDL. GROUP_NAME = G. GRONAME ANDP. SPOT_CONF <= L. ACCESS_LEVEL;При создании таблицы используется:функция CURRENT_USER, возвращающая имя текущего пользователя.функция ANY (G. GROLIST) возвращающая любое из значений массива G. GROLISTШаг 2. Для того, чтобы пользователи могли работать только с виртуальной таблицей,необходимо снять права доступа с реальной таблицы БД и установить права на чтение на виртуальную.Снять права доступа к реальной таблицы:REVOKE ALL ON KLIENTS FROM GROUP USERS;Установить права доступа на виртуальную таблицу:GRANT SELECT ON KLIENTS_LIST TO GROUP USERS;Шаг 3. Проверить работу механизмаЗаполнить таблицу persons тестовыми данными:INSERT INTO KLIENTS_LIST VALUES (1,'ABC','ФИРМА','12-11-1980');UPDATE KLIENTS SET SPOT_CONF = 1;INSERT INTO KLIENTS _LIST VALUES (1,'IBM','ФИРМА','30-12-1988');UPDATE KLIENTS SET SPOT_CONF = 1;INSERT INTO KLIENTS_LIST VALUES (1,'IVANOV','М','11-10-1965');UPDATE KLIENTS SET SPOT_CONF = 1;INSERT INTO KLIENTS_LIST VALUES (1,'PETROV','М','17-02-1989');UPDATE KLIENTS SET SPOT_CONF = 1;INSERT INTO KLIENTS_LIST VALUES (1,'SIDOROV','М','23-05-1975');UPDATE KLIENTS SET SPOT_CONF = 1;Для проверки работы механизма необходимо соединиться с БД, используя имя пользователя ABC.Выполнить пользователем director два запроса для проверки работы механизма:SELECT FROM KLIENTS;SELECT FROM KLIENTS_LIST;Изменить метку конфиденциальности отдельных записей пользователем-администратором:UPDATE KLIENTS SET SPOT_CONF = 3 WHERE KLIENTS_ID = 2;Повторно проверить работу механизма пользователем ABC:SELECT FROM KLIENTS_LIST;Шаг 4. Создать правила (rules), перехватывающие операции внесения, изменения иудаления, выполняемые пользователями над таблиц KLIENTSСоздать правило на операции внесения, пример которого представлен ниже:DROP RULE KLIENTS_LIST_INSERT ON KLIENTS_LIST;CREATE RULE KLIENTS_LIST_INSERT AS ON INSERT TOKLIENTS _LISTDO INSTEADINSERT INTO KLIENTSSELECT CASE WHEN NEW. KLIENTS _ID IS NULLTHEN NEXTVAL (' KLIENTS _ID') ELSE NEW. KLIENTS _ID END,NEW. NAME, NEW. SEX, NEW. BIRTHDAY, L. ACCESS_LEVELFROM PG_GROUP G, PG_USER U, GROUPS_ACCESS_LEVEL LWHEREU. USENAME = CURRENT_USER ANDU. USESYSID = ANY (G. GROLIST) ANDL. GROUP_NAME = G. GRONAME;Предоставить права на внесение записей в виртуальной таблице:GRANT INSERT ON KLIENTS _LIST TO GROUP USERS;GRANT SELECT,UPDATE ON KLIENTS _ID TO GROUP USERS;Проверить работу механизма:INSERT INTO KLIENTS _LIST VALUES (21,'IVANOV','М','10-10-1980');Создать правило на операции изменения, пример которого представлен ниже:DROP RULE KLIENTS _LIST_UPDATE ON KLIENTS _LIST;CREATE RULE KLIENTS _LIST_UPDATE AS ON UPDATETO KLIENTS _LISTDO INSTEADUPDATE KLIENTS SET KLIENTS _ID = NEW. KLIENTS _ID,NAME = NEW. NAME, SEX = NEW. SEX, BIRTHDAY = NEW. BIRTHDAY,SPOT_CONF = L. ACCESS_LEVELFROM PG_GROUP G, PG_USER U, GROUPS_ACCESS_LEVEL LWHEREKLIENTS _ID = OLD. KLIENTS _ID ANDSPOT_CONF = L. ACCESS_LEVEL ANDU. USENAME = CURRENT_USER ANDU. USESYSID = ANY (G. GROLIST) ANDL. GROUP_NAME = G. GRONAME;Предоставить права на изменение записей в виртуальной таблице:GRANT UPDATE ON KLIENTS _LIST TO GROUP USERS;Проверить работу правила:UPDATE KLIENTS _LIST SET NAME = 'IVANOV' WHERE KLIENTS _ID = 21;Создание правил на операции удаления, пример которого представлен ниже:DROP RULE KLIENTS _LIST_DELETE ON KLIENTS _LIST;CREATE RULE KLIENTS _LIST_DELETE AS ON DELETE TOKLIENTS _LISTDO INSTEADDELETE FROM KLIENTS WHEREKLIENTS _ID = OLD. PERSON_ID ANDSPOT_CONF = GROUPS_ACCESS_LEVEL. ACCESS_LEVEL ANDPG_USER. USENAME = CURRENT_USER ANDPG_USER. USESYSID = ANY (PG_GROUP. GROLIST) ANDGROUPS_ACCESS_LEVEL. GROUP_NAME = PG_GROUP. GRONAME;Предоставить права на удаление записей в виртуальной таблице:GRANT DELETE ON KLIENTS_LIST TO GROUP USERS;Проверить работу механизма:DELETE FROM KLIENTS_LIST WHERE KLIENTS_ID = 2;3.2.2 Реализация принудительного управления доступом в таблице "ОПЕРАЦИОНИСТЫ"Для реализации принудительного управления доступом к таблице OPERS со стороны пользователей и групп пользователей СУБД необходимо выполнить следующие шаги.Шаг 1. Создать виртуальную таблицу (view), учитывающую таблицу OPERS, таблицу уровней доступа, имя текущего пользователя, работающего с БД, позволяющую в дальнейшем разграничить доступ пользователей к отдельным записям таблицы OPERS.CREATE OR REPLACE VIEW OPERS_LIST ASSELECT OPERS_ID, NAME, SEX, BIRTHDAYFROM PG_GROUP G, PG_USER U, KLIENTS P,GROUPS_ACCESS_LEVEL LWHEREUSENAME = CURRENT_USER ANDU. USESYSID = ANY (G. GROLIST) ANDL. GROUP_NAME = G. GRONAME ANDP. SPOT_CONF <= L. ACCESS_LEVEL;При создании таблицы используется:функция CURRENT_USER, возвращающая имя текущего пользователя.функция ANY (G. GROLIST) возвращающая любое из значений массива G. GROLISTШаг 2. Для того, чтобы пользователи могли работать только с виртуальной таблицей,необходимо снять права доступа с реальной таблицы БД и установить права на чтение на виртуальную.Снять права доступа к реальной таблицы:REVOKE ALL ON OPERS FROM GROUP USERS;Установить права доступа на виртуальную таблицу:GRANT SELECT ON OPERS_LIST TO GROUP USERS;Шаг 3. Проверить работу механизмаЗаполнить таблицу persons тестовыми данными:INSERT INTO OPERS_LIST VALUES (1,'SALMIN','M','15-10-1988');UPDATE OPERS SET SPOT_CONF = 1;INSERT INTO OPERS_LIST VALUES (1,KIRICHUK','M','30-12-1988');UPDATE OPERS SET SPOT_CONF = 1;Для проверки работы механизма необходимо соединиться с БД, используя имя пользователя ABC.Выполнить пользователем director два запроса для проверки работы механизма:SELECT FROM OPERS;SELECT FROM OPERS_LIST;Изменить метку конфиденциальности отдельных записей пользователем-администратором:UPDATE OPERS SET SPOT_CONF = 3 WHERE OPERS_ID = 2;Повторно проверить работу механизма пользователем ABC:SELECT FROM OPERS_LIST;Шаг 4. Создать правила (rules), перехватывающие операции внесения, изменения иудаления, выполняемые пользователями над таблиц OPERSСоздать правило на операции внесения, пример которого представлен ниже:DROP RULE OPERS_LIST_INSERT ON OPERS_LIST;CREATE RULE OPERS_LIST_INSERT AS ON INSERT TOOPERS_LISTDO INSTEADINSERT INTO OPERSSELECT CASE WHEN NEW. OPERS _ID IS NULLTHEN NEXTVAL (` OPERS _ID') ELSE NEW. OPERS_ID END,NEW. NAME, NEW. SEX, NEW. BIRTHDAY, L. ACCESS_LEVELFROM PG_GROUP G, PG_USER U, GROUPS_ACCESS_LEVEL LWHEREU. USENAME = CURRENT_USER ANDU. USESYSID = ANY (G. GROLIST) ANDL. GROUP_NAME = G. GRONAME;Предоставить права на внесение записей в виртуальной таблице:GRANT INSERT ON OPERS_LIST TO GROUP USERS;GRANT SELECT,UPDATE ON OPERS_ID TO GROUP USERS;Проверить работу механизма:INSERT INTO KLIENTS _LIST VALUES (21,'IVANOV','М','10-10-1980');Создать правило на операции изменения, пример которого представлен ниже:DROP RULE OPERS_LIST_UPDATE ON OPERS_LIST;CREATE RULE OPERS_LIST_UPDATE AS ON UPDATETO OPERS_LISTDO INSTEADUPDATE OPERS SET OPERS_ID = NEW. OPERS_ID,NAME = NEW. NAME, SEX = NEW. SEX, BIRTHDAY = NEW. BIRTHDAY,SPOT_CONF = L. ACCESS_LEVELFROM PG_GROUP G, PG_USER U, GROUPS_ACCESS_LEVEL LWHEREOPERS_ID = OLD. OPERS_ID ANDSPOT_CONF = L. ACCESS_LEVEL ANDU. USENAME = CURRENT_USER ANDU. USESYSID = ANY (G. GROLIST) ANDL. GROUP_NAME = G. GRONAME;Предоставить права на изменение записей в виртуальной таблице:GRANT UPDATE ON OPERS_LIST TO GROUP USERS;Проверить работу правила:UPDATE OPERS_LIST SET NAME = 'SALMIN' WHERE OPERS_ID =1;Создание правил на операции удаления, пример которого представлен ниже:DROP RULE OPERS_LIST_DELETE ON OPERS_LIST;CREATE RULE OPERS_LIST_DELETE AS ON DELETE TOOPERS_LISTDO INSTEADDELETE FROM OPERS WHEREOPERS_ID = OLD. OPERS_ID ANDSPOT_CONF = GROUPS_ACCESS_LEVEL. ACCESS_LEVEL ANDPG_USER. USENAME = CURRENT_USER ANDPG_USER. USESYSID = ANY (PG_GROUP. GROLIST) ANDGROUPS_ACCESS_LEVEL. GROUP_NAME = PG_GROUP. GRONAME;Предоставить права на удаление записей в виртуальной таблице:GRANT DELETE ON OPERS_LIST TO GROUP USERS;Проверить работу механизма:DELETE FROM OPERS_LIST WHERE OPERS_ID = 2;4. Реализация требований стандарта по критерию "подотчётность"4.1 Обеспечение идентификации и аутентификацииЗаписи в файле могут иметь следующие формы:local имя_БД имя_пользователя метод_доступаhost имя_БД имя_пользователя IP-адрес метод_доступаhostssl имя_БД имя_пользователя IP-адрес метод_доступаПервое поле записи - тип соединения:local - Unix-сокет соединение без использования протокола TCP/IP,host - соединение с использованием протокола TCP/IPhostssl - соединение с использованием протокола TCP/IP SSL-протоколаВторое поле - имя БД, может принимаит значения:all - разрешен доступ ко всем БД СУБДsameuser - разрешен доступ к БД, имя которой совпадает с именем пользователяимя БД или список имен, разделенных запятойТретье поле - имя пользователя или список имен, разделенных запятойЧетвертое поле - IP-адрес компьютера, которому разрешен доступ или маска адреса.Пятое поле - метод доступа:trust - доступ без пароляreject - доступ запрещенpassword - доступ по нешифруемому паролюcrypt - доступ по шифруемому паролю алгоритмом cryptmd5 - доступ по шифруемому паролю алгоритмом md54.2 Построим таблицу для пользователей нашей БД
|
РЕКЛАМА
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |