Тюменский государственный университет Институт математики и компьютерных наук Кафедра информационной безопасности Курсовая работа на тему «Организация управления правами доступа в современных СУБД Oracle10g и MS SQL Server 2008» Выполнили: Студенты группы № 367 Митрофанов Андрей Прилуцкий Константин Научные руководители: Доцент, к.т.н. Широких Андрей Валерьевич, Нестерова Ольга Андреевна Дата сдачи: ___________ Оценка: ______________ Тюмень, 2009 г. Содержание Введение ..................................................................................................................... 4 Глава 1. Управление правами доступа в Oracle 10g .............................................. 6 1.1 Общие сведения ................................................................................................... 6 1.1.1 Роли ................................................................................................................... 6 1.1.2 Привилегии ....................................................................................................... 7 1.2 Представления, защищающие базу данных ...................................................... 8 1.2.1 DBA_USERS ..................................................................................................... 9 1.2.2 DBA_ROLES................................................................................................... 11 1.2.3 DBA_ROLE_PRIVS ....................................................................................... 13 1.2.4 DBA_SYS_PRIVS........................................................................................... 14 1.2.5 DBA_TAB_PRIVS .......................................................................................... 15 Глава 2. Управление правами доступа в MS SQL Server 2008 ........................... 16 2.1 Пользователь и пароль ...................................................................................... 17 2.1.1 Хранение информации о пользователе и пароле ........................................ 17 2.1.2 Настройки безопасности ............................................................................... 18 2.1.3 Система безопасности SQL Server ............................................................... 19 2.1.4 Создание нового регистрационного имени в SQL Server .......................... 20 2.1.5 Интегрированная система безопасности Windows NT .............................. 23 2.2 Права пользователя............................................................................................ 24 2.2.1 Предоставление доступа к определенной базе данных ............................. 25 2.2.2 Предоставление доступа к определенным объектам таблицы .................. 26 2.3 Серверные роли и роли базы данных .............................................................. 31 2.3.1 Серверные роли .............................................................................................. 33 2.3.2 Роли базы данных .......................................................................................... 35 Глава 3. Разработка программного приложения для управления правами доступа........................................................................................................................ 37 3.1 Выбор инструментальных средств................................................................... 37 3.2 Структура и функциональность программного комплекса. .......................... 38 3.3 Руководство пользователя программы «OracleAdmin» ................................. 39 3.4 Руководство пользователя программы «MSSQLAdmin» .............................. 42 2 Заключение .............................................................................................................. 45 Список литературы ................................................................................................. 46 3 Введение В настоящее время для построения информационных систем применяются различные системы управления базами данных (СУБД), различающиеся как своими возможностями, так и требованиями к вычислительным ресурсам. Ведущие позиции на рынке СУБД в настоящее время занимают такие многопользовательские СУБД как Oracle и MS SQL Server. Наиболее важным аспектом работы с СУБД является управление правами доступа к объектам базы данных, а также защита информации от несанкционированного доступа. Стандартные средства управления правами доступа, такие как “SQL Server Management Studio” в MS SQL Server и “Enterprice Manager Console” в Oracle требуют определенной квалификации пользователя и не всегда поставляются с ядром СУБД. Зачастую, предприятия, использующие данные СУБД, вынуждены нанимать квалифицированных специалистов для администрирования базы данных стандартными средствами. Для того, чтобы сотрудник компании, не имеющий навыков в управлении правами доступа, мог эффективно выполнять обязанности администратора базы данных в области распределения прав доступа среди сотрудников предприятия, существует необходимость в программном обеспечении, которое имело бы интуитивно понятный пользовательский интерфейс, ограничивала пользователя от возможности критических изменений в настройках доступа к БД. Итак, выполняя курсовую работу, нами преследовались следующие цели и задачи: Цель: Разработать программный комплекс для управления правами доступа в СУБД Oracle10g и MS SQL Server 2008. Задачи: 1. Разработать приложение для управления правами доступа в Oracle 10g, что требует изучения организации управления доступом в данной СУБД. 4 2. Разработать приложение для управления правами доступа в MS SQL Server 2008, что требует изучения организации управления доступом в данной СУБД. 5 Глава 1. Управление правами доступа в Oracle 10g 1.1 Общие сведения Oracle занимает лидирующие позиции на рынке СУБД и, что особенно важно, лидирует на платформах Unix и Windows. В России также обозначилось лидерство Oracle, особенно в области крупномасштабных информационных систем государственных структур. Последняя версия Oracle 10g, на сегодняшний день считается самой быстрой СУБД. Среди основных свойств СУБД Oracle следует отметить такое, как высочайшая надежность, что достигается возможность гибко настроить параметры доступа пользователей к базе данных. Стандартными средствами управления доступом к БД являются роли и привилегии. 1.1.1 Роли Роли появились в Oracle начиная с версии 6. Они предназначались для упрощения администрирования системы пользователей и объектных привилегий. При наличии ролей администратору БД не обязательно предоставлять и отменять привилегии на прикладные объекты (таблицы, представления, процедуры, функции и т.д.) для каждого пользователя, который в них нуждается. Вместо прямого предоставления привилегий каждому пользователю можно предоставить эти привилегии роли, а затем назначить эту роль пользователям. При добавлении нового объекта достаточно разрешить доступ к роли, и все пользователи с этой ролью автоматически получат доступ к объекту. А при увольнении пользователя администратору БД вообще не потребуется отменять права доступа. При правильном управлении роли могут намного облегчить жизнь администратору БД. Если привилегии сгруппированы в роли, их предоставление или отмена выполняется с помощью одного оператора: grant <имя_роли> to <имя_пользователя (роли)> 6 1.1.2 Привилегии Привилегии – права на манипулирование данными или на выполнение действий. Привилегии на манипулирование данными называются объектными привилегиями (object privileges), а привилегии на выполнение действий называются системными привилегиями (system privileges). Объектные привилегии дают право на выполнение следующих операций: Просмотр строк и столбцов в таблицах и представлениях (select) Добавление новых строк (insert) Обновление существующих строк (update) Удаление информации (delete) Выполнение хранимых программ (execute) Системные привилегии позволяют выполнять действия, влияющие на общее состояние базы данных. При наличии этих привилегий пользователи могут изменять структуру базы данных. Несколько простых действий, разрешаемых системными привилегиями: Создание таблицы, индекса, представления или моментального снимка Удаление таблицы, индекса, представления или моментального снимка Создание сеанса базы данных, что позволяет соединятся с базой данных для выполнения работы Объектные привилегии – это права, которые вы предоставляете другим пользователям на доступ к своим объектам. Можно предоставлять разные привилегии разным пользователям, позволяя одним только выбирать данные, а другим – изменять их. Можно также предоставлять привилегии с параметром with grant option, позволяющим передавать эти привилегии другим пользователям. Системные привилегии позволяют соединяться с базой данных, воздействовать на объекты базы данных, например на сегменты отката и табличные пространства, а также создавать пользовательские объекты, такие, как таблицы, представления, индексы и хранимые процедуры. 7 Если привилегия предоставляется кому-либо в режиме wit admin option, а затем отменяется, то все, кто получил эту привилегию от данного лица, сохраняет ее. - grant <имя_привилегии> to <имя_пользвателя (роли)> with admin option 1.2 Представления, защищающие базу данных Эти представления позволяют управлять защищенной областью (security domain) – набором атрибутов, определяющих пределы разрешенных пользователям действий, квоты выделяемой дисковой памяти и ресурсы. Таблица 1.1. Представления DBA_, используемые для защиты базы данных Представление Описание DBA_PROFILES Все профили и их ограничения DBA_ROLES Все роли, существующие в базе данных DBA_ROLES Все роли, существующие в базе данных Роли, назначенные пользователям и другим ролям Системные привилегии, предоставленные пользователям и ролям Все разрешения (grants) на объекты базы данных Информация обо всех пользователях базы данных Квоты в табличных пространствах для всех пользователей DBA_ROLE_PRIVS DBA_SYS_PRIVS DBA_TAB_PRIVS DBA_USERS DBA_TS_QUOTAS 8 1.2.1 DBA_USERS Таблица 1.2. Представление DBA_USER Столбец Описание USERNAME Имя пользователя USER_ID Идентификационный номер пользователя PASSWORD Пароль в зашифрованном виде ACCOUNT_STATUS Показывает состояние учетной записи: заблокирована, действительна или разблокирована Дата блокировки учетной записи LOCK_DATE (если Учетная запись заблокирована) Дата, после которой учетная EXPIRY_DATE запись становится недействительной Табличное пространство по DEFAULT_TABLESPACE умолчанию для данных Табличное пространство по TEMPORARY_TABLESPACE умолчанию для временных сегментов CHEATED Дата создания пользователя PROFILE Имя профиля ресурсов пользователя INITIAL_RSRC_CONSUMER_GROU Группа потребителей ресурсов, в которую P 9 изначально входит пользователь Внешнее имя пользователя EXTERNAL_NAME Рассмотрим столбцы, используемые чаще всего. Название Username говорит само за себя — это имя учетной записи, под которым пользователь входит в базу данных. Имя пользователя может состоять из букв алфавита, цифр, специальных символов — подчеркивания (_), знака доллара ($) или знака номера (#). Столбец User_ID содержит уникальный идентификатор пользователя, состоящий из цифр от 0 до 9. Но и в столбце Username также должно содержаться уникальное (правда, уже алфавитно-цифровое) значение. Когда пользователь создает объект и при этом не указывает табличное пространство, в котором этот объект создается, Oracle создаст его в табличном пространстве, которое было назначено по умолчанию (Default_Tablespace). Столбец Temporary_Tablespace содержит имя табличного пространства для пользователя, которое Oracle использует в тех случаях, когда для выполнения оператора SQL необходимо произвести сортировку. Столбец Password содержит зашифрованные значения паролей для учетных записей. Создадим пользователя с именем RACHEL: -> Create user RACHEL identified by TEST default tablespace USERS temporary tablespace TEMP; User created. Столбец Асcount_Status сообщает, имеют ли пользователи доступ к своим учетным записям, и если нет, то почему. Lock_Date содержит дату блокировки учетной записи, вызванной серией неудачных попыток ввода пароля (количество попыток устанавливается в профиле пользователя). Expiry_Date — это дата стечения срока действия пароля. Перед принудительной сменой пароля можно установить период отсрочки, на протяжении которого пользователи смогут входить по старому паролю. Два оставшихся столбца в представлении DBA_USERS – это Created, содержащий дату создания учетной записи, и Profile, в котором указан 10 профиль, используемый при проверке ограничений ресурсов для данного пользователя. 1.2.2 DBA_ROLES Представление DBA_ROLES содержит информацию обо всех определенных в базе данных ролях. При создании базы данных в версиях 9 и 10 Oracle создает несколько стандартных ролей. Столбцы этого представления перечислены в таблице 1.3. Таблица 1.3. Представление DBA_ROLES Столбец Описание ROLE Имя роли PASSWORD_REQUIRED Показывает, требуется ли пароль для разрешения роли До Oracle6 пользователям можно было присвоить только три роли: ■ CONNECT ■ RESOURCE Позволяет пользователю обращаться к базе данных Дает пользователю возможность создавать объекты и использовать пространство в базе данных ■ DBA Позволяет выполнять любые действия в базе данных Фактически это были даже не роли, а наборы привилегий, хранившиеся в ядре Oracle, которые можно было предоставлять пользователям. Настоящие, роли появились в Oracle6. Начиная с Oracle7, администратор получил возможность комбинировать группы системных и объектных привилегий, а также создавать нестандартные роли, отвечающие потребностям приложений. Роли CONNECT, RESOURCE и DBA Oracle сохраняет для обратной совместимости, но не гарантирует, что они будут присутствовать всегда. Предопределенные роли могут меняться от версии к версии, поэтому, как и для самих представлений DBA_, нужно всегда проверять, какие роли были добавлены, а какие удалены. 11 Необходимо помнить, что вместе с ролью RESOURCE пользователь получает привилегию unlimited tablespace, которая позволяет создавать объекты не только в табличном пространстве по умолчанию, но и в других табличных пространствах, причем без какой-либо квоты. Квота (quota) — это объем пространства, которое может быть выделено пользователю в табличном пространстве. Столбец Password_Required показывает, должен ли вводиться пароль, когда пользователь или приложение разрешает роль. Если пароль необходим, он указывается в команде set role. Из этого правила есть одно исключение. Если роль, требующая пароля, назначена пользователю как роль по умолчанию, она будет автоматически разрешена при входе пользователя в базу данных, и ему не нужно будет вводить пароль. Может быть более одной роли по умолчанию, но все они должны быть назначены как части одного оператора SQL. Увидеть роли, разрешенные в текущем сеансе, можно с помощью следующего SQL-оператора: select * from SESSION_ROLES; Чтобы создать роль, нужно иметь либо привилегию create role, либо роль, которой была предоставлена эта привилегия/Роль создается следующим образом: create role TESTROLE; Для добавления к роли привилегий необходимо для каждой из этих привилегий ввести соответствующий оператор. Допустим, нужно, чтобы роль TESTROLE имела привилегию create role. Это делается следующим образом: grant CREATE ROLE to TESTROLE; Grant succeeded. Если теперь назначить роль TESTROLE какому-либо пользователю, он сможет создавать роли в базе данных. 12 1.2.3 DBA_ROLE_PRIVS В предыдущем разделе было показано, как определить, какие роли существуют в базе данных. Представление DBA_ROLE_PRIVS расскажет, каким пользователям (или ролям) и с какими административными привилегиями были назначены эти роли. Столбцы этого представления перечислены в таблице 1.4. Таблица 1.4. Представление DBA_ROLE_PRIVS Столбец Описание GRANTEE Имя получателя роли — пользователя или другой роли GRANTED_ROLE Имя назначенной роли ADMIN_OPTION Показывает, что роль была назначена с опцией ADMIN DEFAULT_ROLE Показывает, что роль назначена пользователю как роль по умолчанию Чтобы вновь созданную роль можно было использовать, ее необходимо назначить пользователю или другой роли. Представление DBA_ROLE__PRIVS позволяет увидеть, кому какие роли были назначены. Столбец Grantee содержит имя пользователя или роли, которые получили возможность доступа к роли. Роли нельзя назначать по кругу. Это означает, что если вы создали роли CLERK и MANAGER, а затем назначили роль CLERK роли MANAGER, то уже нельзя назначить роль MANAGER роли CLERK, поскольку в этом случае роль MANAGER будет ссылаться сама на себя. Столбец Granted_Role полностью аналогичен столбцу Role представления DBA_ROLES. Столбец Admin_Option показывает, может ли пользователь, получивший роль, назначать ее другим, а столбец Default_Role показывает, будет ли данная роль автоматически разрешена при входе пользователя в базу данных. Чтобы увидеть, какие роли были назначены пользователю и будут ли они автоматически разрешены, можно ввести следующий запрос: 13 select Grantee, Granted_Role, Default_Role from DBA_ROLE_PRIVS where Grantee not in ('SYS'.'SYSTEM') order by Grantee; Если нужно посмотреть, назначались ли кому-нибудь роли, требующие пароля, достаточно соединить таблицы DBA_ROLES и DBA_ROLE_PRIVS: select Grantee, Granted_Role from DBA_ROLES a, DBA_ROLE_PRIVS D where a.Role = b.Granted_Role and a.Password_Required='YES'; 1.2.4 DBA_SYS_PRIVS Представление DBA_SYS_PRIVS показывает, какие привилегии системного уровня были предоставлены пользователям или ролям. Такие привилегии позволяют манипулировать средой базы данных, создавая, удаляя или изменяя объекты. Столбцы этого представления перечислены в таблице 1.5. Таблица 1.5. Представление DBA_SYS_PRIVS Столбец Описание GRANTEE Имя получателя привилегии — пользователя или роли PRIVILEGE Системная привилегия ADMIN_OPTION Показывает, что роль была предоставлена с опцией ADMIN. Следует проверять количество и типы системных привилегий в каждой новой версии базы данных. С добавлением новых возможностей появляются и новые привилегии, позволяющие ими управлять. Для того, чтобы узнать какие системные привилегии были даны пользователю или роли необходимо выполнить следующий SQL-запрос: select * from DBA_SYS_PRIVS where Grantee = 'имя_пользователя(роли)'; 14 1.2.5 DBA_TAB_PRIVS Представление DBA_TAB_PRIVS (см. таблицу 5.8) дает информацию обо всех привилегиях на все объекты базы данных. Таблица 5.8. Представление DBA_TABS_PRIVS Столбец Описание GRANTEE Пользователь, которому предоставлен доступ OWNER Владелец объекта TABLE_NAME Имя объекта GRANTOR Пользователь, который разрешает доступ PRIVILEGE Привилегия на таблицу GRANTABLE Показывает, может ли привилегия предоставляться другому пользователю HIERARCHY Привилегия предоставляется с опцией иерархичности (hierarchy) Глядя на сочетание "TAB" в имени представления, можно подумать, что оно содержит информацию только о табличных привилегиях. Однако на самом деле здесь представлена информация о правах доступа ко всем объектам в базе данных. Объект — это то, чем может владеть пользователь. Хотя привилегии можно предоставить на большинство объектов, существует несколько исключений. Индексы, триггеры и синонимы считаются объектами, но к ним нельзя обращаться непосредственно. Если вы получили доступ к таблице, то автоматически будете иметь доступ к ее индексам и триггерам. Oracle запускает триггер, если он относится к выполняемому над таблицей действию, и при необходимости модифицирует индекс таблицы или осуществляет к нему доступ. Синоним — это просто псевдоним, поэтому для его использования привилегии не требуются. Столбец Grantee ссылается на пользователя, которому была выдана данная привилегия. Owner — это владелец самого объекта. Table_Name содержит имя объекта, a Grantor - это пользователь, который предоставляет привилегию. 15 Привилегия представляет собой право доступа, и столбец Grantable показывает, может ли пользователь, получивший привилегию, передать ее кому-либо еще. Поскольку владелец объекта может передавать другому пользователю право предоставления доступа к объекту, для прослеживания всей этой цепочки необходимы оба столбца — Owner и Grantor. Один из лучших способов защитить базу данных — это потратить немного времени на то, чтобы разобраться, какие привилегии в действительности нужны каждой из групп пользователей, а затем построить и предоставить роли, обеспечивающие именно такой доступ и ничего более. Конечно, проще всего предоставить всем пользователям привилегии grant all to public на все объекты, но все-таки это не выход. Предоставляя пользователю привилегию с параметром with grant option, важно помнить, что если владелец таблицы впоследствии отменит эту привилегию для первого пользователя, то ее потеряют и все остальные пользователи. Глава 2. Управление правами доступа в MS SQL Server 2008 Вероятно, на свете существует столько же способов обеспечения безопасности программистов. сколько компьютерных программ, сколько существует Однако данная проблема относиться к тем проблемам, для которых может и не существовать единственного верного пути, зато имеется несколько заведомо неверных. Первое, что следует понять - не существует приложений, которые могли бы гарантировать абсолютную безопасность. Если вы знаете, как обеспечить безопасность приложения, точно также кто-то другой может знать, как обойти вашу защиту и “взломать” систему. 16 2.1 Пользователь и пароль 2.1.1 Хранение информации о пользователе и пароле В большинстве случаев для организации хранения профайла пользователя и пароля вам не придется слишком напрягать интеллект, тем не менее, о некоторых вещах стоит призадуматься, Поскольку вам нужна информация с самого начала, придется выбрать одно из следующих решений: - Внедрить пароль непосредственно в клиентское приложение либо компонент (и убедиться, что корректный логин и пароль созданы на каждом сервере, на котором было установлено данное приложение). - Сохранить имя и пароль в реестре и заставить ваше приложение извлекать его оттуда. - Установить два пароля - один для доступа пользователя к обычной информации о пароле, а другой - для доступа к реальному приложению. Однако для пользователя требования завести два логина, как правило, неприемлемы, в итоге мы вынуждены вернуться к предыдущим двум вариантам. Если вы выбрали сценарий работы с двумя паролями, то доступ к первому логину, по возможности, должен предоставляться только хранимым процедурам. Таким способом вы позволяете первому логину провести необходимую проверку достоверности прав доступа, не раскрывая в то же время никакой информации тому, кто пытается загрузиться через Query Analyzer. Дайте вашей хранимой процедуре принять регистрационное имя пользователя и его пароль, а затем просто возвратите булево значение (может он загрузиться или нет) либо выведите список, перечисляющий, к каким диалоговым окнам и функциям пользователь будет иметь доступ с клиентского приложения. Если вы примените простой оператор SELECT, то не сможете ограничить список доступной информации. Если вы собираетесь хранить в системе информацию о паролях - зашифруйте ее! Не стоит и говорить, насколько это важно. Большинство пользователей используют пароли более чем один раз - поэтому отсутствие необходимости запоминать их несколько облегчает жизнь. 17 Зашифровав данные перед размещением их в базе данных, вы будете уверены в том, что никто, даже случайно, не обнаружит информацию о пароле» Данная информация может быть видна, но ею нельзя будет воспользоваться без соответствующего ключа для расшифровки. 2.1.2 Настройки безопасности При использовании встроенных средств, вам доступны только два варианта настройки безопасности под SQL Server. Ранее, до версии 7.0, вариантов выбора было три. Поэтому, исключительно из соображений совместимости, приведем все три разновидности механизма контроля безопасности, существовавших в SQL Server 6.x. - Интегрированная система безопасности Win NT/2000 - пользователь регистрируется в самой NT-системе, а не в SQL Server, Аутентификация осуществляется через доверительное соединение NT. - Стандартная система безопасности: пользователь подключается к SQL Server независимо от входа в ОС NT. Аутентификация производится самим SQL Server. - Смешанная система безопасности: окружение, в котором часть пользователей использует интегрированную систему безопасности NT, а другие стандартную систему безопасности. В настоящее время доступными являются только первая и последняя опции. Вы по-прежнему можете выбрать опцию безопасности, позволяющую вам работать подобно стандартной системе безопасности в версиях 6.5 и более ранних - просто вы также должны выбрать опцию безопасности NT, Другими словами, сейчас вы можете выбирать из следующих пунктов: - интегрированная система безопасности NT (или Win 2000); - смешанная система безопасности NT и SQL Server. Теперь вы не сможете воспользоваться старой системой безопасности опирающейся исключительно на SQL Server. 18 Давайте же рассмотрим две доступные опции безопасности для SQL Server версии 7.0 и выше. 2.1.3 Система безопасности SQL Server Начнем наше обсуждение со встроенной в SQL Server логической модели, которая похожа на старую систему безопасности NT. Используя систему безопасности SQL Server, вы создаете регистрационное имя пользователя, абсолютно не связанное с вашим сетевым именем и паролем. Некоторые аргументы в пользу системы безопасности SQL Server: - пользователю необязательно принадлежать к данному домену, чтобы получить доступ к системе; - легче осуществлять программный контроль над информацией о пользователе; - в прошлом ее гораздо легче было поддерживать, чем смешанную систему безопасности или интегрированную систему безопасности NT. Справедливости ради приведем некоторые контраргументы: - пользователю приходится вводить два и более паролей - первый для получения доступа к сети и по одному для каждого соединения с SQL Server отдельного приложения; - два регистрационных имени требуют больших затрат на поддержку со стороны администратора; - с паролями можно легко запутаться, что может привести к полному хаосу. (Не кажется ли вам знакомым вопрос: "Так, посмотрим, какой пароль нужен для этого имени?"). Примером использования системы безопасности SQL Server может быть бюджет sa, которым вы наверняка пользуетесь во время работы над примерами из книги. Не имеет значения, каким образом вы вошли в сетевое окружение, к SQL Server вы подключаетесь при помощи логина sa и отдельного пароля. 19 Вы вряд ли пожелаете каждый день входить, используя регистрационное имя sa. Почему? Я думаю, вам хватит пары минут, чтобы представить, что вы в состоянии натворить, воспользовавшись абсолютными правами доступа бюджета sa. Абсолютный доступ означает, что вы можете делать что угодно, и случайно примененный операнд DROP TABLE немного не к той базе данных, сделает именно то, о чем вы его попросили - удалит таблицу!!! Вам останется только воскликнуть: "Ой, что я наделал!". Даже если вы хотите всегда обладать полной свободой действий, воспользуйтесь бюджетом sa для создания постоянного пользовательского бюджета, являющегося членом серверной роли sysadmins. Благодаря этому вы будете иметь ту же свободу действий, что и для бюджета sa, но при этом будет обеспечена дополнительная безопасность за счет использования отдельного пароля и мониторинга (в Profiler либо путем просмотра системной активности) пользователей, подключенных к системе в данный момент. 2.1.4 Создание нового регистрационного имени в SQL Server Существующие способы создания нового регистрационного имени в SQL Server: - при помощи хранимой процедуры sp_addlogin; - при помощи Enterprise Manager; - используя инструментальные средства управления средой Windows (Windows Management Instrumentation - WMI). sp_addlogin Как следует из ее названия, данная хранимая процедура добавляет новое регистрационное имя. Обязательным для нее является только один параметр, но большую часть времени вы будете использовать два или три ее параметра. Существует также несколько дополнительных опций, которые, однако, редко находят себе применение. Хранимая процедура имеет следующий синтаксис: EXEC sp_addlogin [@loginame =] <'регистрационное имя'> [,[@passwd =] <'пароль'> 20 [,[@defdb =] <'база_данных'> [,[@deflanguage =] <'язык'> [,[@sid =] 'sid' [,[@encryptopt =] <'опция_шифрования'> Параметр Описание @loginame Здесь задается регистрационное имя, используемое впоследствии @passwd Пароль, который будет использоваться вместе с вышеупомянутым именем @defdb Назначаемая по умолчанию база данных. В данном параметре задается первая база данных, к которой получает доступ пользователь при подключении к системе. Обычно, в ее качестве выступает главная база данных, используемая приложением. Именно она назначается, если данная опция не определена явно (чаще всего вы не захотите, чтобы пользователь попадал непосредственно в главную базу данных, поэтому не забудьте указать значение опции) @deflanguage Язык пользователя по умолчанию. Данный параметр может применяться для переопределения стандартного языка системы, если ваше приложение поддерживает локализацию 21 @sid Двоичное число, которое будет использоваться в качестве системного идентификатора (system identifier — SID) для данного имени пользователя. Если вы не зададите SID, SQL Server сгенерирует его для вас автоматически. Поскольку должна обеспечиваться уникальность SID, любой SID, задаваемый вами, не должен совпадать с уже имеющимся в системе. Иметь дело с собственноручно определенными SID может быть удобно при восстановлении базы данных с другого сервера или при ином переносе регистрационной информации @encryptopt Регистрационное имя пользователя и пароль хранятся в таблице sysusers главной базы данных приложения. Опция @encryptopt определяет в каком виде эта информация находится в главной базе данных зашифрованном или нет. По умолчанию (или при задании значения NULL для этой опции) пароль хранится в зашифрованном виде. Другие возможные опции - skip_encryption, означающая, что пароль зашифрован не будет; и skip_encryption_old, которая используется исключительно для обеспечения совместимости при резервном копировании Хранимая процедура sp_addlogin позволяет создавать пакетные файлы для добавления групп пользователей либо писать сценарии непосредственно в рамках клиентских инструментов администратора. sp_password После создания учетной записи для пользователя вам может понадобиться механизм изменения пароля. Если вы хотите осуществлять смену пароля в TSQL, то можете сделать это при помощи хранимой процедуры sp_password. Ее синтаксис очевиден: 22 sp_password [@new =] [[@old =] <'старый пароль'>,] <'новый пароль'> [, [@loginame =] < ' имя пользователя'>] Параметры задания старого и нового пароля, конечно, используются именно так, как и следовало ожидать. Вам необходимо получить их от пользователя и передать хранимой процедуре. Обратите внимание, что параметр loginame является необязательным. Если вы его явно не зададите, предполагается, что пароль, под которым осуществлено данное соединение будет для пользователя изменен. Заметьте также, что процедураsp password не может быть выполнена в качестве части транзакции. 2.1.5 Интегрированная система безопасности Windows NT Что такое система безопасности Windows NT? Система безопасности NT представляет собой модель, в которой используются существующие в доменах NT бюджеты (учетные записи) пользователей или их групп и им предоставляются права непосредственного доступа к SQL Server, вместо того, чтобы заставлять их заводить отдельные пароли и имена для получения соответствующих прав. Рассмотрим несколько примеров как для TSQL, так и для Enterprise Manager. Предоставление доступа к пользовательским бюджетам NT. Вообще-то данная задача решается очень просто и весьма похоже на решение подобной задачи для системы безопасности SQL Server. Единственный момент вам придется задавать полный путь, включая имя домена, к пользовательскому профайлу, которому вы хотите предоставить права доступа» Это можно сделать следующим образом: 23 sp_grantlogin [@loginame=] '<имя_домена>\<имя_пользователя_в_NT>' Зачем использовать систему безопасности NT? До версии 7,0 интегрированную систему безопасности NT воспринимали как какую-то запоздалую мысль. Она являлась изгнанником, которого никто не принимал всерьез. Начиная с версии 7.0, появилась возможность по-настоящему использовать эту систему. Корпорация Microsoft продолжала настаивать на переходе большего количества серверов к интегрированной системе безопасности NT. С приходом эры Windows 2000 точка зрения пользователей действительно переместилась в сторону безопасного интегрированного окружения. И это не лишено смысла - чем меньшее количество регистрационных имен используется, тем надежнее и проще обеспечивать безопасность, особенно при длительной работе. Система безопасности NT позволяет: - осуществлять контроль всех прав пользователя из одного места; - предоставлять права доступа к SQL Server при помощи простого добавления пользователя к группе NT (это означает, что в большинстве случаев вам даже не придется заходить на SQL Server для присвоения прав пользователю); - вашим клиентам достаточно будет помнить только одно имя и пароль. Суть всего вышесказанного заключается в том, что теперь система безопасности NT наконец-то работает так, как должна была работать изначально. 2.2 Права пользователя Простейшее определение, что такое права пользователя (user rights), звучит как: ''Что пользователь может делать, а что ему делать запрещено". В данном случае самое простое определение самое удачное. Пользовательские права делятся на три категории: 24 -права подключения к системе; -права доступа к определенным базам данных; -права на выполнение определенных действий над отдельными объектами в базе данных. 2.2.1 Предоставление доступа к определенной базе данных Если вы хотите, чтобы пользователь имел доступ к конкретной базе данных, необходимо предоставить ему соответствующие права. Вы можете осуществить предоставление прав в Enterprise Manager, добавив пользователя к элементу Users узла Databases вашего сервера. Чтобы сделать то же самое при помощи T-SQL, необходимо воспользоваться процедурой: sp_grantdbaccess [@loginame =] <'имя пользователя'> [@name in db =] <'имя в данной базе'> Обратите внимание, что доступ будет назначен к текущей базе данных, поэтому прежде, чем выполнять вышеуказанную хранимую процедуру, убедитесь, что вы хотите предоставить пользователю права доступа именно к этой базе данных. Регистрационным именем является действующее имя пользователя, под которым он подключается к SQL Server. Параметр name_in_db позволит вам всегда однозначно идентифицировать данного пользователя в базе данных. Внутреннее имя служит исключительно целям определенной базы данных - во всех остальных базах данных для идентификации данного пользователя будет по-прежнему применяться его регистрационное имя, в независимости от того, какое имя вы назначили пользователю здесь. Присвоение внутреннего имени влияет на идентифицирующую функцию USER_NAME (), Функции, производящие идентификацию на системном уровне, такие как SYSTEM USER будут возвращать основное регистрационное имя пользователя. Лишение прав доступа производится практически аналогично - для этого придется воспользоваться системной хранимой процедурой sp_revokedbaccess: sp_revokedbaccess [@name_in_db =] <'имя пользователя'> 25 2.2.2 Предоставление доступа к определенным объектам таблицы Итак, пользователь получил регистрационное имя и доступ к базе данных, который вы пожелали ему предоставить, и все как будто выполнено? Если бы все было так просто! На самом деле нам еще есть над чем поработать. SQL Server дарует нам широкие возможности контроля над правами доступа пользователей. Как правило, в вашей базе данных может содержаться информация, к которой пользователю позволено обращаться, но в той же самой базе данных могут присутствовать данные, доступ к которым со стороны определенного пользователя нежелателен. К примеру, у вас может работать человек для выполнения заявок покупателей, которому необходимо просматривать и редактировать информацию о заказах - в то же время, вы вряд ли захотите, чтобы он имел доступ к данным об окладах. Обратное также верно - вам нужны люди, которые будут заниматься редактированием записей о служащих компании, но вы вряд ли позволите, чтобы они могли предоставлять скидки определенным клиентам. SQL Server позволяет назначить свой набор прав доступа для каждого объекта SQL Server. Объектами, для которых могут быть назначены отдельные права, являются таблицы, представления и хранимые процедуры. Права доступа к триггерам резервируются за их создателями. Права пользователей на те или иные объекты делятся на шесть различных категорий: Права пользователя Описание SELECT Разрешает пользователям просматривать данные. Если пользователь обладает данным правом, он может применять оператор SELECT к любой таблице либо представлению, на 26 которые распространяется это право INSERT Предоставляет пользователю возможность вносить новые данные. Таким образом, пользователь может применять оператор INSERT. Обратите внимание, что в отличие от большинства систем, привилегии на выполнение оператора INSERT не обязательно подразумевают права на использование оператора SELECT UPDATE Предоставляет пользователю возможность редактировать существующие данные. Пользователь с данными правами может применять оператор UPDATE. Аналогично ситуации с оператором INSERT, наличие привилегий на выполнение оператора UPDATE не обязательно подразумевает права на использование оператора SELECT DELETE Разрешает пользователю удалять данные. Пользователь с данными правами может применять оператор DELETE. Опять-таки, привилегии на выполнение оператора DELETE не предоставляют автоматически прав на использование оператора SELECT REFERENCES Позволяет пользователю вставлять записи в таблицу, имеющую ограничения внешнего ключа, ссылающегося на таблицу, по отношению к которой пользователь не обладает 27 правами на применение оператора SELECT EXECUTE Предоставляет пользователю право выполнять хранимые процедуры Вы можете использовать различные сочетания прав доступа к отдельным таблицам, представлениям или хранимым процедурам для предоставления их конечному пользователю. Назначить соответствующие права можно в Enterprise Manager, перейдя к опции Logins в узле Security для вашего сервера. Просто щелкните правой кнопкой мыши на имени пользователя и выберите Properties, Перед вами появится диалоговое окно, в зависимости от того, какой узел в дереве был выбран - базы данных целиком либо узел безопасности. В последнем случае вы сможете установить разрешения на доступ. Назначить привилегии при помощи T-SQL столь же просто, даже если вы привыкли присваивать права в ЕМ, поскольку здесь используется та же терминология. В T-SQL для этого имеются три команды. GRANT GRANT предоставляет определенному пользователю либо роли права доступа, назначенные для объекта, указываемого в выражении GRANT. Синтаксис выражения GRANT выглядит следующим образом: GRANT ALL [PRIVILEGES]| <разрешение>[,...n] ON <имя_таблицы_или_представления> [(<имя столбца>[,...n])] | <имя_стандартной_или_расширенной_хранимой_процедуры> TO <имя_пользователя_либо_роли> [,...n] 28 [WITH GRANT OPTION] [AS <имя_роли>] Ключевое слово ALL свидетельствует о том, что вы собираетесь предоставить все возможные права доступа к данному объекту (применение оператора EXECUTE не имеет смысла для таблицы). Если вы не зададите ALL, вам необходимо будет указать одно или несколько определенных прав доступа к данному объекту. PRIVILEGES - новое ключевое слово, не выполняющее никакой функции и добавленное исключительно с целью совместимости со стандартом ANSI-92. Ключевое слово ON определяет объект (который указывается после него), к которому будут применены вышеупомянутые привилегии. Кстати, обратите внимание, если вы предоставляете доступ к таблице, то можете назначить особые права доступа вплоть до отдельных столбцов (их необходимо перечислить в списке). Если столбцы не указаны, то по умолчанию процедура применяется ко всей таблице. Выражение ТО определяет, кому необходимо присвоить данный уровень доступа. Можно задать имя пользователя либо роль. WITH GRANT OPTION дает возможность пользователю, получившему определенные привилегии, передавать их другим пользователям. И последнее, но не по важности, ключевое слово AS. Оно определяет статус пользователя, входящего в состав нескольких ролей. DENY Оператор DENY явно запрещает доступ пользователям к целевому объекту. Ключевое слово DENY отменяет все привилегии, предоставленные ранее оператором GRANT. Поскольку пользователь может принадлежать к нескольким ролям, то возможна ситуация, в которой пользователю с одной стороны оператором GRANT предоставлены права доступа к данному объекту (например, как члену какой-то роли), а с другой - наложен запрет оператором DENY, в таком случае всегда побеждает оператор DENY, Другими словами, если пользователь либо роль, к которой он относится, имеет запрет на доступ к данному объекту, 29 пользователь не сможет воспользоваться привилегиями, дарованными с другой стороны. DENY ALL [PRIVILEGES] | <разрешеиие>[,...n] ON <имя_таблицы_или_представления> [(<имя_столбца> [,...n ])] | <имя_стандартной_или_расширенной_хранимой_процедуры> TO <имя_пользователя_либо_роли> [,...n] [CASCADE] Ключевое слово ALL точно также означает, что отменяются все права, применимые к объекту данного типа (право EXECUTE не применимо к таблице). Вы можете задать одно или несколько прав, применение которых вы хотите запретить для этого объекта. PRIVILEGES не обладает никакой функциональностью и добавлено в качестве нового ключевого слова в целях совместимости с ANSI-92. После слова ON следует имя объекта, к которому применяется оператор DENY. Все вышеупомянутые параметры работают аналогично оператору GRANT. Отличие можно увидеть в опции CASCADE которая, однако, по функциональности совпадает с параметром WITH GRANT OPTION. Задание опции CASCADE сообщает SQL Server о вашем намерении лишить прав доступа всех пользователей, которым данный пользователь предоставил привилегии в соответствии с параметром WITH GRANT OPTION. REVOKE Оператор REVOKE отменяет результаты предшествующей команды DENY или GRANT. По производимому эффекту он очень напоминает применяемый к объектам оператор Undo. Синтаксис представляет собой сочетание синтаксиса выражений DENY и GRANT: 30 REVOKE [GRANT OPTIONS FOR] ALL [PRIVILEGES] | <список_прав>[,...n] ON <имя_таблицы_или__представления>[(<имя столбца>[,...n])] | <имя_стандартной_или_расширенной_хранимой_процедуры> TO | FROM <имя_пользователя_либо_роли> [,...n] [CASCADE] [AS <имя_роли>] Ключевое слово ALL говорит об аннулировании всех прав, применимых к объекту данного типа. Если вы не используете опцию ALL, вам придется перечислить конкретные права, которые вы хотите аннулировать для данного объекта. PRIVILEGES не обладает никакой функциональностью и добавлено в качестве нового ключевого слова в целях совместимости со стандартом ANSI-92. За ключевым словом ON следует имя объекта, для которого отменяются те или иные привилегии. Ключевое слово CASCADE соответствует опции GRANT WITH OPTION в выражении GRANT и сообщает SQL Server об аннулировании доступа для всех пользователей, которые получили данное право от этого пользователя (в соответствии с параметром GRANT WITH OPTION). Ключевое слово AS опять-таки определяет, к какой роли вашего пользователя применяется оператор REVOKE. 2.3 Серверные роли и роли базы данных До версии 7.0 в SQL Server наличествовала концепция групп - объединений пользователей, обладающих определенным набором прав, которые вы могли в совокупности назначить новому пользователю, просто сделав его членом данной группы. Такая концепция в корне отличалась от принятой в NT, где каждый пользователь мог принадлежать более чем к одной группе, что позволяло сочетать при необходимости различные права. В SQL Server 6.5 (и более ранних версиях) 31 каждый пользователь мог принадлежать только к одной группе определенной базы данных. В итоге во времена, предшествующие появлению SQL Server 7.0, все группы в SQL Server делились на три категории: - группы с часто изменяемыми правами доступа пользователей; - группы с небольшими отличиями от главной группы; - группы, обладающие большим количеством прав, чем необходимо (что облегчало жизнь администратора базы данных). Зачастую, группы являлись одной большой проблемой, хотя от этого не становились менее нужными. Роль представляет собой набор прав доступа, которые могут быть назначены пользователю все в совокупности, путем присоединения пользователя к данной роли. На этом схожесть ролей с группами заканчивается. В отличие от групп, пользователь может принадлежать одновременно к нескольким ролям. Такой подход бывает весьма удобен, поскольку вы можете поделить права доступа между мельчайшими логическими группами, а затем совместить их наиболее подходящим для нужд пользователя образом. Роли бывают двух видов: - серверные роли (server roles); - роли базы данных (database roles). Серверные роли ограничены перечнем встроенных в SQL Server ролей, которые изначально предназначены для поддержки системы и обеспечения возможностей выполнения операций, не связанных с конкретными базами данных, как, например, создание новых пользователей или связанных серверов. Подобно серверным ролям, существует некоторое количество встроенных (или фиксированных) ролей баз данных, но в этом случае вы можете также определять собственные роли для ваших конкретных нужд. Роли баз данных используются для настройки и группировки пользователей с одинаковым набором прав в одной определенной базе данных. 32 2.3.1 Серверные роли Все серверные роли являются фиксированными и, в принципе, это изначально оправдано -поскольку все серверные роли, которые только могут вам понадобиться, уже реализованы и существуют на вашей системе с момента инсталляции SQL Server. Роль Сущность sysadmin Данная роль предполагает возможность выполнения любых действий на вашем SQL Server. Любой пользователь, принадлежащий к данной роли, является, тем самым, пользователем sa для вашего сервера. Появление этой роли подразумевает исчезновение бюджета sa в будущем - и действительно, в онлайновом справочнике вы можете встретить упоминание о намерениях Microsoft в дальнейшем его ликвидировать. Очевидно, что группа Administrators в NT связывается с ролью sysadmin на SQL Server автоматически. Это означает, что всякий, кто является членом группы администраторов вашего сервера, также имеет права доступа sa к данным SQL Server. При желании, вы можете удалить группу администраторов NT из роли sysadmin чтобы обезопасить систему и избавиться от лишней лазейки 33 serveradmin Эта роль охватывает сферу опций настройки или отключения сервера. Хотя она несколько ограничена в наборе прав по сравнению с предыдущей ролью, однако функции, контролируемые членами данной роли, могут существенно повлиять на производительность сервера setupadmin Данная роль ограничена возможностями управления связанными серверами и процедурами запуска securityadmin Данная роль чрезвычайно удобна для пользователей, ориентированных исключительно на управление другими пользователями, просмотр протоколов ошибок и выполнение оператора CREATE DATABASE. Во многих смыслах это одна из классических ролей системного оператора - с возможностью управления большинством однодневной информации, но без глобальных прав доступа, дарованных привилегированным пользователям processadmin Обладает право управлять процессами, выполняемыми на SQL Server - с ее помощью при необходимости можно уничтожить какой-то слишком долго выполняющийся процесс dbcreator Возможности этой роли ограничены созданием и изменением баз данных diskadmin Члены данной роли управляют файлами на диске (контроль того, с какими файлами связана данная группа, подключение и отсоединение баз данных и так далее) bulkadmin Данная роль является несколько странной. Она явно задается для предоставления прав на выполнение команды BULK INSERT, которая в противном случае может быть выполнена только лицом с правами sysadmin. Привилегии на использование этого оператора действительно нельзя 34 передать с помощью команды GRANT, Помните также о том, что добавление пользователя в группу bulkadmin предоставляет ему права только на выполнение оператора BULK INSERT, но само по себе не дает возможности применять его к конкретным таблицам. Из этого следует, что помимо разрешения на выполнение задачи BULK INSERT, пользователю также необходимо предоставить разрешение на применение оператора INSERT к каждой таблице, для которой требуется выполнить оператор BULK INSERT, Кроме того, вам необходимо убедиться, что члены данной роли обладают необходимыми правами на применение оператора SELECT для всех нужных вам таблиц 2.3.2 Роли базы данных Применение ролей базы данных ограничено областью единственной базы данных - то, что пользователь принадлежит к роли cib_datareader в одной базе данных, еще не означает, что он будет принадлежать к этой роли в другой базе данных. Роли базы данных делятся в свою очередь на две подкатегории: фиксированные и определяемые пользователем. Фиксированные роли базы данных Также как и для серверных ролей, существует несколько встроенных ролей базы данных. Некоторые из них созданы для специальных целей, и вам не удастся их продублировать с помощью обычных операторов (то есть вы не сможете создать определенную пользователем роль базы данных с аналогичной функциональностью). Однако большинство из этих ролей было создано для облегчения работы в наиболее часто встречающихся ситуациях. Определяемые пользователем роли базы данных Приведенные выше фиксированные роли служат только для облегчения начала работы. Реальной основой безопасности должно стать создание определяемых 35 пользователем ролей базы данных. Для этих ролей вы сами решаете, какими привилегиями они будут обладать. Для определяемых пользователем ролей вы можете предоставлять, аннулировать либо отменять те или иные права подобно тому, как вы делали это для отдельных пользователей. Благодаря наличию ролей все пользователи могут быть поделены на категории в соответствии с необходимыми уровнями доступа. Вам достаточно будет внести изменение в одном месте, и оно отразится на всех пользователях с аналогичными правами (по крайней мере, на тех, которые принадлежат к данной роли). 36 Глава 3. Разработка программного приложения для управления правами доступа. 3.1 Выбор инструментальных средств В качестве среды разработки программного обеспечения была выбрана CodeGear RAD Studio 2009 - новая версия среды быстрой разработки приложений (RAD) для Microsoft Windows. Это единственная интегрированная среда разработки (IDE), которая поддерживает быструю разработку как Windows, так и .NET-приложений для Microsoft Windows 2000, XP и Vista. Подобная универсальность позволяет разработчикам строить Web, клиент/серверные и десктоп Windows-приложения для всех трех ОС и использовать такие приложения на любой из этих платформ. CodeGear RAD Studio дает разработчикам гибкость в выборе операционной системы, которая наиболее полно удовлетворяет их требованиям при создании приложения для нескольких ОС Windows, включая программы для Windows Vista и Web-приложения. Возможности выбранной среды разработки: - Поддержка языка Delphi для разработки в среде Microsoft .NET 2.0 (совместимо с .NET 3.0) и ASP.NET 2.0. ASP.NET представляет собой набор технологий в рамках .NET framework для создания Web-приложений и XML Web-сервисов. - Delphi для .NET имеет поддержку параметризованных типов, позволяющую разработчикам .NET применять Delphi для создания и использования классов, используя любой тип структуры данных в качестве параметров. - Обновленная архитектура доступа к базам данных dbExpress 4 с поддержкой ADO.NET 2.0. dbExpress 4 - это единое решение для доступа к базам данных для .NET и Windows с поддержкой ADO.NET. Соединение с базой данных, как с Oracle так и MS SQL Server, производится с помощью компонентов ADO. Преимущества ADO по сравнению с другими технологиями. 37 Технология ADO предлагает разработчику удобный прикладной интерфейс для OLE DB. ADO удобна в обращении, так как предоставляет объекты Automation, скрывающие интерфейсы OLE DB, что позволяет программисту уделять основное внимание решаемым задачам, а не сложностям технологии OLE DB. ADO-объекты разрешается применять на любой платформе, которая поддерживает СОМ и Automation, включая языки сценария Microsoft Visual Basic Scripting Edition (VBScript) и Microsoft JScript. А это означает, что ADO доступна как в приложениях для Интернета - через технологии типа Active Server Pages (ASP), так и в средах разработки персональных приложений. ADO-набор данных допустимо отсоединять от источника данных и передавать другим приложениям, при этом возможно изменение данных набора в отрыве от сети и источника данных. В объектной модели ADO существенно меньше объектов, и он проще в обращении по сравнению с другими объектами доступа данным, например DAO или RDO. 3.2 Структура и функциональность программного комплекса. Разработанный программный комплекс состоит из двух независимо работающих программ: «OracleAdmin» (для работы с правами доступа в СУБД Oracle) и «MSSQLAdmin» (для работы с правами доступа в СУБД MS SQL Server), включает в себя следующий функционал: Создание, удаление, изменение пользователей, Создание, удаление, изменение ролей, Назначение системных привилегий пользователю или роли, Назначение объектных привилегий пользователю или роли, Фильтрация списка пользователей и ролей. Название пользователей и ролей символами кириллицы. 38 3.3 Руководство пользователя программы «OracleAdmin» Главное окно программы «OracleAdmin» (рис. 1) содержит информацию о всех пользователях СУБД. Нажимая левую кнопку мыши по одному из пользователей, находящемся в списке, на вкладке «Общие» отображается общая информация, относящаяся к данному пользователю: Логин, ФИО, Телефонный номер, Описание (поле, предназначенное для хранения дополнительной информации о пользователе: № паспорта, должность, отдел и т.д.). Для редактирования или изменения информации, необходимо внести изменения в соответствующие поля формы. Рис. 1 «Главное окно программы OracleAdmin» На вкладке «Роли» (рис. 2) содержится информация, о всех ролях, присвоенных пользователю. На форме пользователь может просмотреть доступные пользователю роли, какие роли предоставлены. Галочка напротив предоставленной роли говорит о том, что роль была предоставлена с параметром «Admin Option», т.е. обладатель роли может предоставлять данную роль другим 39 пользователям БД. С помощью кнопок «\/» и «/\» можно изменять набор предоставленных ролей. Для того, чтобы предоставить роль пользователю, необходимо выбрать нужную роль из списка «Доступные» и нажать кнопку «\/». Соответственно, для удаления роли из списка «Предоставленные» необходимо выбрать предоставленную роль и нажать на кнопку «/\». Рис. 2 «Роли пользователя» и нажать на кнопку «Применить», иначе изменения не вступят в силу. Кнопка «Отменить» служит для отмены внесения изменений. На вкладке «Системные привилегии» (рис. 3) производятся аналогичные операции, как и на вкладке «Роли». 40 Рис. 3 «Системные привилегии» На вкладке «Объектные привилегии» (рис. 4) перед пользователем появляется информация в виде дерева о всех объектах СУБД: Схемы, типы, таблицы, просмотры, процедуры, функции, синонимы, последовательности. Рис. 4 «Объектные привилегии» При нажатии на объекте, в поле «Доступные привилегии» появляется список привилегий, которые можно предоставить пользователю. Для этого необходимо выбрать нужный объект, привилегию, и нажать на кнопку «\/», после чего предоставленная привилегия появится в таблице «Предоставленные», в которой 41 отображаются: название привилегии (столбец привилегия), название схемы (столбец «Схема»), в которой находится объект, и название самого объекта (столбец «Объект»), на который предоставлена привилегия. 3.4 Руководство пользователя программы «MSSQLAdmin» Первая закладка программы «MSSQLAdmin» (рис. 5) содержит информацию о всех пользователях СУБД. Для того чтобы внести изменения необходимо выделить в таблице нужного вам пользователя, и в поля заполнения внести новые значения. Также в правом верхнем углу существует динамический поиск по логину, имени, телефону и комментарию. В данной таблице вы можете посмотрь имя логина в базу данных, имя пользователя, телефон и комментарий(поле, предназначенное для хранения дополнительной информации о пользователе: № паспорта, должность, отдел и т.д.). 42 Рис.5 Информация о пользователе На вкладке «Доб.Роли» (Рис.6) Вы имеете возможность для создания объектной роли. Для того чтобы создать роль вам необходимо ввести имя новой роли, возможное пояснение, выбрать базу данных, тип объекта и объект, также выбираем те возможности которые мы хотим предоставить пользователю (Delete,Insert,Update). Для удаление роли необходимо выбрать роль из таблицы и нажать кнопку «удалить» Для изменения роли необходимо выбрать роль из таблицы ввести те значения, которые необходимо изменить и нажать кнопку изменить. Рис. 6 Добавление роли 43 В вкладке Присвоение роли (рис. 7) мы может присвоить ранее созданную роль какому либо пользователю. Для того чтобы присвоить роль пользователю необходимо выбрать пользователя , выбрать роль и нажать кнопку добавить. Таким образом необходимый пользователь будет добавлен в роль. Рис 7. Присвоение роли 44 Заключение В результате проделанной работы было изучено управление правами доступа в CУБД Oracle 10g и MS SQL Server 2008. Организация безопасности в Oracle позволяет гибко настроить права доступа среди пользователей системы. Для этого в СУБД хранятся привилегии, а также существует возможность создавать пользовательские наборы привилегий – роли. Все данные, касающиеся безопасности содержатся в представлениях DBA_ и являются глобальными, хранятся в самом ядре Oracle. Записи в представлениях DBA_ содержат исчерпывающую информацию о хранимых объектах. Для получения данных о привилегиях, пользователях или объектах базы данных достаточно обратиться с помощью SQL-запроса к соответствующему представлению. В отличие от Oracle 10g, в MS SQL Server данные о ролях и привилегиях на объекты непосредственно хранятся в базе данных, к которой принадлежит объект, что усложняет сбор сведений о предоставленных ролях и привилегиях определенному пользователю. Для того чтобы, получить список возможных привилегий, ролей, принадлежностей роль-пользователь необходимо выполнить целый ряд SQL-запросов. Для упрощения администрирования БД, был написан программный комплекс, состоящий из 2-х утилит, позволяющих управлять правами доступа в Oracle и MS SQL Server. Для работы с программой не требуется знание языка запросов SQL, а также его процедурного расширения PL/SQL . Включена возможность фильтрования списка пользователей, ролей, привилегий. Поддерживается название пользователей и ролей символами кириллицы. Утилиты могут найти свое применение на любом предприятии, использующем Oracle или MS SQL. Таким образом, все задачи выполнены, цели достигнуты. 45 Список литературы 1. Архангельский А. Я. «Программирование в Delphi 6» – М.:ЗАО «Издательство БИНОМ», 2003. 2. Терьо М., Кармайкл Р. «Oracle 9i, Администрирование баз данных» – М.:Издательство «Лори», 2005. 3. Роберт Вьейра «SQL Server 2005, программирование» - М.: БИНОМ. Лаборатория знаний, 2006. 4. Microsoft TechNet. SQL Server 2008, Документация. [http://technet.microsoft.com/ru-ru/library/ms130214.aspx ]. (20.04.2009) 5. Горнштейн Д., Тамаркин Б. Возможности, достоинства и слабости СУБД MS SQL Server 2005 (Yukon) и Oracle 10g. (17.04.2007). [http://www.kpress.ru/cs/2006/1/MSSQLvsORA/MSSQLvsORA.asp]. (13.05.2009) 46