Лабораторная работа 4. Разработка системы пользователей базы данных. Требования к программному обеспечению: 1. 2. 3. Компьютер с установленным на нем приложением Borland SQL Explorer. Компьютер с установленный на нем СУБД MS SQL Server версии 7.0/2000/2003, и с установленной учебной базой CIS. СУБД MS SQL Server должна иметь запись о пользователе user (пароль-user) с привилегиями db_owner для всех объектов в рабочем пространстве CIS. Теоретические сведения: 1. Система безопасности СУБД Система безопасности СУБД основывается на таких понятиях как учетная запись, роль, группа, пользователь. Каждый пользователь проходит два этапа проверки системы безопасности при попытке доступа к данным: - Этап 1 – аутентификация, - Этап 2 – получение доступа к данным Первый этап относится к уровню работы всего сервера СУБД. На первом этапе пользователь идентифицирует себя с помощью логического имени (login) и пароля (password). Логическое имя и пароль хранятся на сервере СУБД в виде учетной записи (account). Если данные были введены правильно, то считается, что процедура аутентификации пройдена, и данный сервер СУБД разрешает попытку доступа к конкретной базе данных. Однако сама по себе аутентификация не дает пользователю права доступа к каким бы то ни было данным. Для получения доступа к данным необходимо, чтобы учетной записи пользователя соответствовал некоторый пользователь базы данных (database user). Пользователь базы данных – совокупность разрешений и запретов на работу с данными в конкретной базе данных. На втором этапе учетная запись пользователя отображается в пользователя базы данных, и получает все привилегии, соответствующие этому пользователю базы данных. Второй этап задействует систему безопасности конкретной базы данных, а не всего сервера СУБД. В разных базах данных одной и той же учетной записи могут соответствовать одинаковые или разные имена пользователя базы данных с разными правами доступа. В том случае, когда учетная запись пользователя не отображается в пользователя базы данных, клиент все же может получить доступ к базе данных под гостевым именем guest (если оно не запрещено администратором БД). Гостевой вход позволяет минимальный доступ к данным только в режиме чтения. Пользователи баз данных могут объединяться в роли (иногда – группы) для упрощения управления системой безопасности. Роли базы данных объединяют нескольких пользователей в административную единицу и позволяют назначать права доступа к объектам базы данных для роли, наделяя этими правами всех участников этой роли. Различают пользовательские и встроенные роли. Встроенные роли создаются автоматически при установке сервера СУБД (и не могут меняться). Различают встроенные роли уровня СУБД и уровня конкретной базы данных. Так, например, в SQL Server 2000 есть такие роли сервера: Встроенная роль сервера Sysadmin Serveradmin Setupadmin Securityadmin Processadmin Dbcreator Назначение Может выполнять любые действия в SQL Server Выполняет конфигурирование и выключение сервера Управляет связанными серверами и процедурами, автоматически запускающимися при запуске SQL Server Управляет учетными записями и правами на создание базы данных, также может читать журнал ошибок. Управляет процессами, запущенными в SQL Server Может создавать и модифицировать базы данных Diskadmin Bukladmin Управляет файлами SQL Server Может вставлять данные с использованием средств массового копирования, не имея непосредственного доступа в таблицам. SQL Server 2000 поддерживает такие встроенные роли уровня базы данных: Встроенная роль сервера Db_owner Db_accessadmin Db_securityadmin Db_ddladmin Db_backupoperator Db_datareader Db_datawriter Db_denydatareader Db_denydatawriter Назначение Имеет все права в базе данных Может добавлять или удалять пользователей Управляет всеми разрешениями, объектами, ролями и членами ролей Может выполнять любые команды DDL, кроме GRANT, DENY, REVOKE Может выполнять команды DBCC, CHECKPOINT, BACKUP Может просматривать любые данные в любой таблице Может модифицировать любые данные в любой таблице Запрещается просматривать данные в любой таблице Запрещается модифицировать данные в любой таблице Кроме указанных ролей существует еще одна, неудаляемая роль – public. Участниками этой роли являются все пользователи, имеющие доступ к базе данных. Нельзя явно указать участников этой роли, т.к. все пользователи уже включены в нее. 2. Манипулирование элементами системы безопасности СУБД 2.1 Создание учетной записи Для создания учетной записи в MS SQL Server 2000 используется системная хранимая процедура sp_addlogin: Ее формат таков: sp_addlogin [@loginname=] login [, [@passwd=] password] [, [@defdb=] database] [, [@deflanguage=] language] [, [@sid=] SID] [, [@encryptopt=] encryption_option] где: login - логическое имя (login) password - пароль, который будет ассоциироваться с данной учетной записью database - база данных по умолчанию. Сразу же после установления соединения с сервером пользователь будет работать в этой базе данных language - язык сообщений, выдаваемых сервером СУБД пользователю SID - двоичное число, которое будет являться идентификатором безопасности создаваемой учетной записи. Используя эту возможность, можно создавать на разных серверах СУБД создавать учетные записи с одинаковыми идентификаторами безопасности encryption_option - определяет, будет ли шифроваться пароль данной учетной записи. По умолчанию пароль шифруется. Пример 1. Добавить учетную запись teacher к базе данных CIS. EXEC sp_addlogin teacher, 123, CIS 2.2 Создание пользователя базы данных Для создания пользователя базы данных в MS SQL Server 2000 используется системная хранимая процедура sp_grantdbaccess (ранее - sp_adduser): Ее формат таков: sp_grantdbaccess [@loginame=] login [,[@name_in_db=] user [OUTPUT]] Использование параметра OUTPUT заставляет хранимую процедуру поместить значение параметра user созданного пользователя в некоторую переменную, для дальнейшей обработки. Формат процедуры sp_adduser таков: sp_adduser [@loginname=] login [, [@name_in_db=] user] [, [@grpname=] role] где: login user role - логическое имя (login)которое необходимо связать с создаваемым пользователем - имя создаваемого пользователя базы данных, с которым будет ассоциироваться данная учетная запись. В базе данных не должно быть пользователя с таким именем. - роль, в которую данный пользователь будет включен. Пример 2. Добавить нового пользователя teacher_adb к базе данных CIS. EXEC sp_adduser teacher, teacher_adb, db_owner 2.3 Создание роли базы данных Для создания роли базы данных в MS SQL Server 2000 используется системная хранимая процедура sp_addrole: Ее формат таков: sp_addrole [@rolename=] role [, [@ownername=] owner] где: role owner - имя создаваемой роли. Должно быть уникальным в пределах БД - имя владельца роли. Владельцем может быть только роль или пользователь из этой базы данных. По умолчанию, владелец - dbo Эта процедура не может быть запущена как часть транзакции, определенной пользователем. Исполнять эту процедуру могут только участники роли сервера sysadmin, либо участники ролей db_securityadmin, db_owner. Пример 3. Добавление роли Managers. EXEC sp_addrole Managers 2.4 Добавление пользователя в роль Используется процедура sp_addrolemember вида: sp_addrolemember [@rolename=] role, [@membername=] security_account] где: role - имя роли в которую добавляется пользователь. security_account – пользователь базы данных, также – роль, что позволяет создавать иерархию ролей Пример 4. Добавление пользователя teacher_abd в роль Managers. EXEC sp_addrolemember Managers, teacher_abd 2.5 Удаление ролей, учетных записей. Перечислим в той очередности, которая разрешается в SQL Server 2000, процедуры удаления пользователей и ролей из базы данных. Процедура sp_droprolemember вычеркивает участника из роли: sp_droprolemember [@rolename = ] role , [@membername = ] security_account Процедура sp_droprole удаляет роль (в том случае, если предварительно из роли были удалены все участники): sp_droprole [@rolename=] role Процедура sp_revokedbaccess (и ее устаревший аналог sp_dropuser) удаляет пользователя базы данных: sp_revokedbaccess [@name_in_db =] name Процедура sp_droplogin удаляет учетную запись из реестра сервера СУБД: sp_droplogin [@loginame=] login 2.6 Просмотр информации об учетных записях, ролях, привилегиях. Для просмотра информации о текущих назначениях пользователей, ролей используются хранимые процедуры sp_helpuser, sp_helplogins, sp_helprole, sp_helprolemember. Параметры их вызовов таковы: sp_helpuser [[@name_in_db=] security_account] sp_helplogins [[@LoginNamePattern=] login] sp_helprole [[@rolename=] role] sp_helprolemember [[@rolename=] role] 3. Условие лабораторной работы 1. Для работы с базой данных будут использованы две роли – studentABD_XX и teacherABD_XX (XX – номер компьютера, за которым сидит исполнитель работы). Назначить роли teacher_XX полный доступ ко всем объектам базы данных на просмотр таблиц и выполнение запросов SELECT, но не на создание новых таблиц и не на изменение данных в таблицах. Назначить роли studentABD_XX доступ владельца базы данных, т.е. полный доступ на чтение и на изменение любых объектов базы данных. Составьте план выполнения необходимых хранимых процедур для того, чтобы выполнить такие действия, на бумаге. 2. Пусть к данной базе данных будут иметь доступ два пользователя роли teacherABD_XX (teachABD1_XX, teachABD2_XX) и один пользователь роли studentABD_XX (studABD1_XX). Составьте план выполнения необходимых хранимых процедур для того, чтобы выполнить такие действия, на бумаге. 3. Задайте от одной до трех учетных записей для доступа к серверу. Составьте план выполнения необходимых хранимых процедур для того, чтобы выполнить такие действия, на бумаге. 4. Откройте CIS в приложении Borland SQL Explorer. 5. В окне запросов ввести по очереди все запросы на создание системы пользователей и учетных записей для доступа к БД. Выполнить эти запросы. 6. Пригласить преподавателя для просмотра результатов.