понедельник, 20 апреля 2009 г.

Управление системой безопасности SQL Server 2005

В SQL Server все данные БД содержатся в объекте Database (база данных). Каждый такой объект состоит из объектов Schema (схема), которые содержат таблицы, индексы, представления и др. объекты, составляющие БД. То есть, схемой называется часть БД, принадлежащая определенному пользователю. (В предыдущих версиях SQL Server понятие схемы не использовалось, однако аналогичную роль выполняло понятие владельца.)

В SQL Server применяются такие понятия как участник безопасности и защищаемый объект.
Участником безопасности (security principal) называется сущность, которая может запросить ресурс сервера, базы данных или схемы. Например, это учетные записи, роли. Участник безопасности управляется на трех уровнях: Windows, SQL Server и БД.
Участникам безопасности могут быть выданы разрешения на защищаемые объекты (securable object, securables). Тремя защищаемыми объектами верхнего уровня являются сервер, БД и схема. Каждый из них также содержит защищаемые объекты, которые, в свою очередь, имеют другие защищаемые объекты. Такие иерархии объектов называются области действия (scopes). Таким образом, основными областями действия в SQL Server являются сервер, БД и схема.
Для каждого защищаемого объекта в SQL Server 2005 определен набор разрешений, которые могут быть даны участнику безопасности.


13.1. Учетные записи
Наряду со своими учетными записями, SQL Server может использовать учетные записи Windows. Если на сервере настроен смешанный режим аутентификации, существует возможность использовать оба типа учетных записей. В противном случае используются только учетные записи Windows.

Просмотр и редактирование учетных записей
Просмотр и редактирование существующих учетных записей можно произвести в SQL Management Studio:
• В панели Обозреватель объектов открыть узел Безопасность, затем узел Имена входа. Откроется список учетных записей.
• Для просмотра свойств учетных записей вызвать окно свойств (например, через контекстное меню) определенной учетной записи.

Окно свойств имеет пять страниц:
Общие – предоставляет общие параметры конфигурации учетной записи, включая режим аутентификации, БД и язык по умолчанию.
Серверные роли – приводит список ролей сервера, в которых состоит данная учетная запись (о ролях – далее).
Сопоставление пользователей – отображает список баз данных, доступных учетной записи и позволяет управлять (для каждой БД в отдельности) схемой по умолчанию, сопоставленным пользователем и назначенными ролями БД.
Защищаемые объекты – показывает текущие разрешения на объекты учетной записи и предоставляет возможность управлять ими (о разрешениях – далее).
Состояние – отображает параметры, показывающие, разрешено ли данной учетной записи подключаться к ядру БД, а также позволяющие ее временно отключить.

Задание 1. Просмотрите свойства учетной записи Student.


Просмотреть информацию об учетной записи можно и средствами языка Transact-SQL. Для этого используется хранимая процедура sp_helplogins:

sp_helplogins [ [ @LoginNamePattern = ] ‘имя_учетной_записи’ ]

Например, чтобы просмотреть информацию об учетной записи Student, используется следующая конструкция:
EXEC sp_helplogins 'Student'

Создание учетных записей
Создать учетную запись можно также в SQL Management Studio:
• В панели Обозреватель объектов открыть узел Безопасность.
• Затем через контекстное меню узла Имена входа выбрать пункт Создать имя входа…
В открывшемся окне необходимо задать все параметры новой учетной записи.

Задание 2. Создайте новую учетную запись NewStudent с паролем ‘1’. Выберите аутентификацию SQL Server. По умолчанию установите свою базу данных и русский язык.

Учетную запись можно создать и средствами языка Transact-SQL командой CREATE LOGIN.


13.2. Роли
Каждой учетной записи присваивается определенная роль. Доступны два типа ролей: роли сервера и роли БД.

Роли сервера устанавливаются на уровне сервера и являются предопределенными, т.е. их разрешения влияют на весь сервер и набор разрешений нельзя изменить.
Роли сервера (в порядке увеличения полномочий):
Bulkadmin – для учетных записей, производящих операции массового копирования в БД. Члены этой роли могут выполнять инструкции BULK INSERT.
Dbcreator – для пользователей, создающих, изменяющих, удаляющих и восстанавливающих БД из резервной копии.
Diskadmin – для пользователей, производящих управление дисковыми файлами.
Processadmin - для пользователей, контролирующих процессы SQL Server, которые могут также завершать процессы.
Securityadmin - для пользователей, управляющих учетными записями, создающих разрешения и читающих журнал ошибок, которые могут также переустанавливать пароли.
Serveradmin - для пользователей, устанавливающих параметры конфигурации, применяемые ко всему серверу, которые могут также завершать работу сервера.
Setupadmin - для пользователей, управляющих связанными серверами и контролирующих процедуры запуска.
Sysadmin - для пользователей, которым необходим полный контроль над SQL Server и установленными БД. Члены этой роли могут выполнять любые действия в SQL Server.

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

SELECT * FROM sys.login_token

Задание 3. Просмотрите роли сервера, в которых состоит пользователь Student.


На уровне БД поддерживается три типа ролей:
• Стандартные пользовательские роли БД. Позволяют определить набор уникальных разрешений. С помощью этих ролей можно логически группировать пользователей, и затем назначать разрешения только ролям, а не каждому пользователю отдельно. Например, можно создать роль Users, которая обладает только разрешениями на выборку, вставку и обновление в определенных таблицах БД.
• Пользовательские роли приложений. Позволяют создавать защищенные паролем роли для определенных приложений. Стандартные роли БД или другие типы ролей не могут быть включены в роли приложения.
• Встроенные (предопределенные) роли БД. Они не могут быть изменены. Один пользователь может быть членом нескольких ролей. Имеются следующие встроенные роли:
Public – роль по умолчанию для всех пользователей БД. Предоставляет минимальные разрешения. Любые другие роли расширяет этот набор разрешений.
Db_accessadmin – возможность добавлять или удалять других пользователей.
Db_backupoperator – возможность резервного копирования.
Db_datereader – просмотр и выборка данных в БД.
Db_datawriter – добавление или изменение данных в БД.
Db_ddladmin– выполнение задач, для которых необходимо использование языка определения данных SQL Server.
Db_denydatereader – для запрещения некоторым пользователям доступа к данным в БД.
Db_denydatewriter – для запрещения некоторым пользователям изменения данных в БД.
Db_securityadmin – для управления ролями, разрешениями на объекты и правами владения объектами.
Db_owner – полный контроль над всеми аспектами функционирования БД: назначение разрешений, изменение параметров БД, выполнение операций по обслуживанию БД, удаление БД.
Встроенным ролям предоставляется конкретный набор разрешений (можно найти в справке).

Просмотреть роли определенной базы данных можно в SQL Management Studio: в панели Обозреватель объектов в определенной базе данных открыть узел Безопасность, затем узел Роли и Роли базы данных. Откроется список ролей БД.

Задание 4. Просмотрите роли базы данных AdventureWorksDW.

Назначение ролей отдельной учетной записи
В SQL Management Studio через свойства учетной записи на странице Сопоставление пользователей выбираются базы данных и для каждой из них указываются роли (путем установки флажков).

Задание 5. Для новой учетной записи NewStudent установите следующие роли на использование баз данных: для БД master – минимальные разрешения; для AdventureWorksDW – разрешение на просмотр и выборку данных; для Вашей БД – полный контроль над БД.

Назначение ролей нескольким учетным записям одновременно
Назначить роли для определенной базы данных также можно через SQL Management Studio:
• В панели Обозреватель объектов в базе данных открыть узел Безопасность, затем узел Роли и Роли базы данных. Откроется список ролей текущей БД.
• Двойным щелчком мыши по определенной роли вызвать окно Свойства ролей базы данных.
• Чтобы включить в роль новых членов, щелкнуть по кнопке Добавить….
• В открывшемся окне ввести имена пользователей, которые нужно добавить к этой роли (можно несколько имен через точку с запятой). Для выбора имен можно воспользоваться кнопкой Обзор.

Задание 6. Для Вашей базы данных добавьте в роль Db_datereader нового пользователя.

Создание стандартных ролей БД
Через SQL Management Studio:
• В панели Обозреватель объектов в базе данных открыть узел Безопасность.
• Затем в контекстном меню узла Роли выбрать команду Создать и Создать роль базы данных…. Откроется окно Роль базы данных - создание.
• На странице Общие этого окна ввести имя роли БД (лучше назначать короткое, но информативное имя, например, Normal Users, Editors и т.п.).
• По умолчанию владельцем роли является пользователь dbo. Можно указать другого владельца, выбрав его в окне, открываемом кнопкой справа от поля Владелец.
• На странице Защищаемые объекты добавить (с помощью кнопки Добавить…) объекты и разрешения для них.

Задание 7. Для Вашей базы данных создайте роль базы данных, разрешающую только просмотр и выборку для таблиц Заказчики, Товары и Заказы.


13.3. Разрешения
Для каждого защищаемого объекта в SQL Server 2005 определен набор разрешений, которые могут быть даны участнику безопасности (например, учетной записи или роли).
Эти разрешения начинаются с ключевого слова или слов, определяющих предоставляемые права. Например, ключевое слово ALTER ANY предоставляет разрешение на создание, изменение, удаление объектов указанной группы. Например, предоставление участнику безопасности разрешения ALTER ANY SCHEMA для базы данных дает ему возможность создавать, изменять или удалять любую схему в БД. А разрешение ALTER ANY LOGIN для сервера дает возможность изменять или удалять любую учетную запись на этом экземпляре сервера.
Другие примеры ключевых слов разрешений: CREATE, DELETE, REFERENCES (возможность ссылаться на объект), EXECUTE (возможность выполнения объекта) и др.

Просмотр разрешений
Просмотреть разрешения на защищаемые объекты можно функциями:
sys.fn_builtin_permissions ( ) – для просмотра встроенных разрешений,
has_perms_by_name ( ) – для просмотра действующих разрешений.

Синтаксис функции sys.fn_builtin_permissions ( ):

sys.fn_builtin_permissions ( { DEFAULT  NULL  ‘класс_защищаемых_объектов’ } )

Значения параметра класс_защищаемых_объектов могут быть следующими:
APPLICATION ROLE, ASSEMBLY, ASSYMMETRIC KEY, CERTIFICATE, CONTACT, DATABASE, ENDPOINT, FULLTEXT CATALOG, LOGIN, MESSAGE TYPE, OBJECT, REMOTE SERVICE BINDING, ROLE, ROUTE, SCHEMA, SERVER, SERVICE, SYMMETRIC KEY, TYPE, USER, XML SCHEMA COLLECTION
При использовании параметров DEFAULT, NULL возвращается полный список встроенных разрешений.

Например, для просмотра всех возможных разрешений на все объекты базы данных используется следующий запрос:

SELECT * FROM sys.fn_builtin_permissions (DEFAULT)

Задание 8.
а) Просмотрите все разрешения на все объекты базы данных AdventureWorksDW.
b) Просмотрите разрешения на класс объектов LOGIN базы данных AdventureWorksDW.

Можно просмотреть список классов объектов, на которые предоставляется определенное разрешение. Для этого в приведенную конструкцию добавляется условие WHERE.
Например, чтобы просмотреть классы объектов, для которых имеется разрешение CREATE TABLE, используется следующий запрос:

SELECT * FROM sys.fn_builtin_permissions (DEFAULT)
WHERE permission_name='CREATE TABLE'

Задание 9. Просмотрите классы объектов, для которых имеется разрешение SELECT.

Синтаксис функции has_perms_by_name ( ):
has_perms_by_name ( ‘защищаемый_объект’,
‘класс_защищаемых_объектов’,
‘имя_разрешения’ )
Параметр защищаемый_объект содержит имя защищаемого объекта или NULL, если защищаемым объектом является сам сервер. Например, объектом может быть определенная база данных.
Параметр класс_защищаемых_объектов - имя класса защищаемых объектов или NULL, если защищаемым объектом является сам сервер. Например, классом может быть ‘DATABASE’ – база данных.
Параметр имя_разрешения – имя проверяемого разрешения, отличное от NULL.

Эта функция возвращает логическое значение 1 (true) или 0 (false), обозначающее наличие или отсутствие проверяемого разрешения на указанных объектах.

Например, узнать, имеет ли подключенный в данное время пользователь разрешения на сервер, можно с помощью такого запроса:

SELECT has_perms_by_name (NULL, NULL, 'permission_name')

Задание 10.
а) Просмотрите, имеет ли текущий пользователь разрешение VIEW SERVER STATE на сервере.
b) Просмотрите, имеет ли текущий пользователь разрешения в базе данных AdventureWorksDW. (Примечание: для определения любых разрешений в качестве имени разрешения указывается ‘ANY’)

Общие сведения об управлении разрешениями
Владелец базы данных, а также члены группы sysadmin и роли securityadmin могут назначить разрешения БД. При работе с разрешениями применяются три основные инструкции:
GRANT (Предоставить разрешение) – предоставляет разрешение на проведение действий. При использовании ролей разрешение наследуют все члены роли.
REVOKE (Отменить разрешение) – отменяет разрешение, ранее предоставленное инструкцией GRANT, но явно не запрещает пользователю или роли выполнение какого-либо действия. Пользователь или роль может унаследовать разрешение на это действие через членство в другой роли.
DENY (Отклонить разрешение) – явным образом запрещает проведение каких-либо действий и не допускает унаследования разрешения пользователем или ролью. Эта инструкция имеет приоритет над всеми разрешениями, выданными с помощью инструкции GRANT.

Назначение разрешений БД
Для этого в SQL Management Studio нужно вызвать свойства определенной базы данных, и в окне свойств на странице Разрешения выбрать пользователя или роль и отметить разрешения флажком. Можно добавить пользователя или роль кнопкой Добавить….
Чтобы назначить для всех пользователей разрешения по умолчанию, нужно выдать разрешения роли public.

Управлять разрешениями можно и с помощью языка Transact-SQL.

Задание 11. Для своей базы данных назначьте разрешения по умолчанию для всех пользователей.

Назначение разрешений для отдельного пользователя на несколько объектов
Разрешение на объекты применяется к таблицам, представлениям и хранимым процедурам. Наиболее часто используются разрешения SELECT, INSERT, UPDATE и DELETE для таблиц и представлений, и EXECUTE для хранимых процедур.
Для назначения разрешений для пользователя на объекты в SQL Management Studio нужно в узле определенной базы данных открыть окно конкретного пользователя (Безопасность – Пользователи).
Затем на странице Защищаемые объекты добавить (с помощью кнопки Добавить…) объекты и разрешения для них. (Аналогично действовали при создании стандартных ролей БД).

Задание 12. Для своей базы данных для пользователя Student назначьте разрешения на удаление для таблиц Заказы и Заказчики.

Назначение разрешений на отдельный объект для нескольких пользователей
Для этого в SQL Management Studio нужно выбрать узел объектов, с которыми будете работать (например, таблицы, представления или хранимые процедуры), и вызвать свойства конкретного объекта (таблицы, представления или хранимой процедуры).
В окне свойств на странице Разрешения можно выбрать нескольких пользователей и назначить им разрешения на этот объект.

Задание 13. Для таблицы Сотрудники своей базы данных для всех доступных пользователей назначьте разрешение на обновление данных.

Удобный интернет магазин бытовой техники - обширный каталог товаров, демократичные цены.
Очень интересный сайт недвижимость в Болгарии цены - все об актуальных ценах на недвижимость в Болгарии.
Профессиональная разработка сайтов любой сложности: от визитки до портала - все для вас!