Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!!! Конспект ББД 2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
87 Кб
Скачать
☆

Создание пользователей

После того, как пользователь прошёл аутентификацию и получил идентификатор учётной записи loginid, он считается зарегистрированным и ему предоставляется доступ к серверу. Для каждой базы данных, к объектам которой пользователю необходимо получить доступ необходимо ассоциировать учётную запись (login) с пользователем(user) конкретной базы данных.

Пользователи выступают в качестве специальных объектов SQL Server, при помощи которых определяются все разрешения доступа и владения объектами в базе данных. Имя пользователя может использоваться для предоставления доступа, как конкретному человеку, так и группе людей, в зависимости от типа учётной записи.

При создании базы данных определяется два стандартных пользователя: dbo (владелец базы данных) и guest (гость).

Если логин не связывается явно с юзером, пользователю может быть предоставлен неявный доступ с использованием гостевого имени guest. Если удалить имя guest, то пользователи, не имеющие явного отображения логина в имя пользователя, не смогут получить доступ к базе данных. При этом guest не имеет автоматического доступа к объектам. Владелец объекта должен сам решить, разрешать пользователю guest доступ или нет. Обычно пользователю guest предоставляется минимальный доступ в режиме только чтение.

Для обеспечения максимальной безопасности можно удалить пользователя guest из любой базы данных, кроме системных баз данных master и tempdb, в которых пользователь guest используется для выполнения системных хранимых процедур обычными пользователями.

Владелец базы данных dbo –это специальный пользователь, обладающий максимальными правами в базе данных. Любой представитель роли sysadmin отображается в пользователя dbo. Если пользователь является представителем роли sysadmin и создаёт какой-нибудь объект, то владельцем этого объекта назначается не данных пользователь, а dbo.

Например, если пользователь Ivan создаёт в базе данных некий объект, например TableA, то полное имя объекта будет dbo.TableA, если данный пользователь Ivan является представителем роли sysadmin и Ivan.TableA, если пользователь Ivan не является участником роли sysadmin. В том числе и в том случае если пользователь Ivan состоит в роли db_owner в текущей базе данных.

Пользователя dbo нельзя удалить, для связывания учётной записи(login) с определённым именем пользовател (user) можно воспользоваться хранимой процедурой sp_adduser.

sp_adduser [@loginname=] ‘login’

[[@name_in_db=] ‘user’]

[[@grname=]= ‘role’]

Либо, если используется SQL Server 2008, есть команда CREATE USER.

CREATE USER user_name

FOR LOGIN login_name

[WITH DEFAULT_SCHEMA= shema_name]

Для создания роли используется команда CREATE SERVER ROLE.

CREATE SERVER ROLE

ROLE [rolename]

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

ALTER SERVER ROLE role_name

ADD MEMBER [user]

Для удаления пользователя из группы.

ALTER SERVER ROLE role_name DROP MEMBER [user]

Пользователь, который создаёт объект в базе данных, например, таблицу, хранимую процедуру или представление становится владельцем объекта. Владелец объекта dbo имеет все права доступа к созданному им объекту. Чтобы пользователь мог создать объект, владелец базы данных должен предоставить пользователю соответствующие права.

Полное имя создаваемого объекта включает в себя имя создавшего его пользователя.

Если пользователь хочет обратиться к таблице, используя только её имя и не указывая владельца, SQL Server применяет следующий алгоритм поиска:

  1. Ищется таблица, созданная пользователем, выполняющим запрос.

  2. Ищется таблица, созданная владельцем базы данных.

Например, пользователь пытается найти таблицу Ivan.TableA, просто используя имя TableA. Если данная таблица не соответствует ни первому ни второму критерию поиска, то таблица TableA не будет найдена и пользователь получит сообщение об ошибке.

Для получения доступа к таблице необходимо ввести имя, включающее владельца объекта, то есть, Ivan.TableA. Владелец объекта не имеет никакого специального пароля или определённых где-то прав доступа. Он неявно имеет полный доступ, но должен явно предоставить доступ другим пользователям.

SQL Server позволяет передавать права владения от одного пользователя другому. Чтобы удалить владельца объекта из базы данных сначала необходимо удалить все объекты, которые он создал, или передать права на их владение другому пользователю.

Роли

Роль позволяет объединять пользователей, выполняющих одинаковые функции, для упрощения администрирования системы безопасности. В SQL Server реализовано два вида стандартных ролей: на уровне сервера и на уровне баз данных. Эти роли нельзя удалить и нельзя модифицировать права их доступа. Кроме того невозможно предоставить пользователю права, которые имеют фиксированные роли сервера другим способом, кроме как включением пользователя в нужную роль.

В ранних версиях SQL Server для администрирования можно было использовать только учётную запись пользователя sa или её аналог. Иначе говоря, у администратора были либо все права, либо никаких. Начиная с седьмой версии SQL Server эту проблему решили путём использования ролей сервера, которые позволяют предоставить пользователям только необходимые им права. При этом роли сервера перестали иметь отношение к администрированию баз данных. Можно включить любую учётную запись SQL Server или учётную запись Windows в любую роль сервера.

К стандартным ролям сервера относятся:

  1. sysadmin. Может выполнять любые действия в SQL Server.

  2. serveradmin. Выполняет конфигурирование и выключение сервера.

  3. setupadmin. Управляет связанными серверами и процедурами, автоматически запускающимися при запуске SQL Server.

  4. securirtadmin. Управляет учётными записями и правами на создание баз данных, а так же может просматривать журнал ошибок.

  5. processadmin. Управляет процессами, запущенными в SQL Server.

  6. dbcreator. Может создавать и модифицировать базы данных.

  7. diskadmin. Управляет файлами SQL Server.

Роли базы данных позволяют объединять пользователей в одну административную единицу и работать с ней как с обычным пользователем. Можно назначить права доступа к объектам базы данных для конкретной роли, при этом автоматически наделив всех представителей этой роли одинаковыми правами. Вместо того, чтобы предоставлять доступ каждому конкретному пользователю, а в последствии постоянно следить за изменениями, можно просто включить пользователя в нужную роль. Например, если сотрудник переходит в другой отдел, нужно просто удалить его из одной роли и добавить в другую.

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

В роль базы данных пользователей и роли SQL Server, пользователей и группы Windows, которым предварительно предоставлен доступ к нужной базе данных.

Помимо функции ALTER SERVER ROLE для добавления пользователей в роль базы данных можно использовать хранимую процедуру sp_addrplemember, имеющую следующий синтаксис.

sp_addrplemember

[@role_name=] ‘role’

[@member_name=] ‘security_account’

role – имя роли.

security_account – имя того объекта системы безопасности, который необходимо включить в роль. В качестве такого объекта могут выступать как учётные записи SQL Server, так и пользователи и группы Windows, которым предоставлен доступ к серверу баз данных.

К стандартным ролям базы данных относятся:

  1. db_owner. Имеет все права в базе данных.

  2. db_accessadmin. Может добавлять и удалять пользователей.

  3. db_securiryadmin. Управляет всеми разрешениями, объектами, ролями и представителями ролей.

  4. db_ddladmin. Может выполнять любые команды по созданию объектов базы данных, кроме команд, определяющих права доступа пользователей.

  5. db_backupoperator. Может выполнять командой установки контрольных точек и резервного копирования базы данных.

  6. db_datareader. Может просматривать любые данные в любой таблице базы данных.

  7. db_datawriter. Может модифицировать любые данные в любой таблице базы данных.

  8. db_denydatareader. Запрещает просматривать данные в любой таблице.

  9. db_denydatawriter. Запрещает модифицировать данные в любой таблице.

Кроме указанных ролей существует роль public, имеющая специальное назначение, поскольку в неё входят все пользователи, имеющие доступ к базе данных. Нельзя явно установить представителей этой роли, поскольку все пользователи автоматически являются её представителями. Эта роль используется для предоставления минимального доступа пользователям, для которых права доступа к объектам явно не определены.

Если в базе данных разрешён пользователь guest, то установленный для public доступ будут иметь все пользователи, получившие доступ к SQL Server. Роль public имеется во всех базах данных, включая системные базы данных master, tempdb, model, msdb и не может быть удалена. Группы Windows могут быть использованы аналогично ролям SQl Server. Можно создать одну учётную запись (login) для группы Windows и включить соответствующих пользователей вместо роли в группу Windows.