Пользователи базы данных

 

После того как клиент успешно прошел аутентификацию, он получает доступ к SQL Server.

Для получения доступа к любой базе данных учетная запись пользователя (login) отображается в пользователя данной базы данных (user).

В пользователя базы данных может отображаться:

• учетная запись Windows;

• группа Windows;

• учетная запись SQL Server.

Отображения сохраняются в системной таблице sysusers, которая имеется в любой базе данных.

 

Объект «пользователь базы данных» применяется для предоставления доступа ко всем объектам базы данных:

• таблицам,

• представлениям,

• хранимым процедурам

• диаграммам

• и т. д.

 

В ситуации, когда учетная запись не отображается в пользователя базы данных, клиент все же может получить доступ к базе данных под гостевым именем guest, если оно, имеется в базе данных.

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

 

Пользователи баз данных могут объединяться в группы и роли для упрощения управлением системой безопасности.

 

Например. При аутентификации средствами Windows, на уровне домена создается несколько групп, каждая из которых предназначена для решения специфических задач.

На уровне SQL Server такой группе разрешается доступ к серверу, предоставляются необходимые права доступа к базам данных и их объектам. Достаточно включить учетную запись Windows в одну из групп, и пользователь получит все права доступа, предоставленные этой группе.

Более того, одна и та же учетная запись может быть включена во множество групп Windows, что даст этой учет­ной записи возможность пользоваться правами доступа, предоставленными всем этим группам.

 

При создании базы данных определяются два стандартных пользователя:

dbо ( DataBase Owner, владелец базы данных )

guest (гость)

 

 

Владелец базы данных (DataBase Owner, DBO) — специальный пользователь, обладающий максимальными правами в базе данных. Пользователя dbo нельзя удалить.

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

Например, если Liliya, член административной группы, создает таблицу Таблица, то полное имя таблицы будет не Liliya .ТableA, a dbo.ТableA. В то же время, если Liliya, не будучи участником роли сервера sysadmin, состоит в роли владельца базы данных db_owner, то имя таблицы будет Liliуа. TableA.

 

Если учетная запись (login) не связывается явно с пользователем (user), последнему предоставляется неявный доступ с использованием гостевого имени guest.

То есть, все учетные записи, получившие доступ к SQL Server, автоматически отображаются в пользователей guest во всех базах данных.

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

 

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

 

Для связывания учетной записи (login) с определенным именем пользователя (user) можно воспользоваться следующей системной хранимой процедурой:

 

sp_adduser [@loginame =] 'login' [,[@name_in_db =] 'user'] [.[@grpname =] 'role']

 

Параметры:

 

login— имя учетной записи, которую необходимо связать с именем пользователя базы данных;

user — имя пользователя базы данных, с которым ассоциируется данная учетная запись (в базе данных заранее не должно существовать пользователя с указанным именем);

role — этот параметр определяет роль, в которую данный пользователь будет включен.

 

 

Пример: EXEC sp_adduser 'petrov', 'operator1'

 

Системная хранимая процедура sp_grantdbaccess позволяет отобразить учетную запись Windows в имя пользователя:

 

sp_grantdbaccess [@loginame =] 'login' [,[@name_in_db =] 'user']

 

Параметры:

 

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

user — имя пользователя базы данных, с которым ассоциируется данная учетная запись.

 

Пользователь, который создает объект в базе данных, например таблицу, хранимую процедуру или представление, становится владельцем объекта (database object owner) :

• владелец объекта имеет все права доступа к созданному им объекту;

• чтобы пользователь мог создать объект, владелец базы данных (dbo) должен предоставить пользователю соответствующие права;

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

 

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

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

2. Если таблица не найдена, то ищется таблица, созданная владельцем базы данных (dbo).

 

 

Пример.

Допустим, пользователь Liss пытается обратиться к таблице Liliya.TableA, просто используя имя TablеА. Поскольку таблица, созданная Liliya, не соответствует ни первому, ни второму критерию поиска, то таблица ТаbleА найдена не будет и пользователь получит сообщение об ошибке.

Для получения доступа к таблице необходимо ввести имя, включающее владельца объекта, то есть Liliya.TableA.

 

 

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

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

 

Для передачи прав можно использовать хранимую процедуру sp_changeobjectowner, имеющую следующий синтаксис:

 

sp_changeobjectowner [ @objname = ] 'object' , [ (@newowner = ] 'owner'

 

Здесь:

object - имя объекта,

owne - имя пользователя, который станет новым владельцем указанного объекта.